st-anygeometry-0.8.1.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       st-anygeometry-0.8.1.diff (2817B)
       ---
            1 From 6a5a862569912e34febe2dbd5244062013840204 Mon Sep 17 00:00:00 2001
            2 From: =?UTF-8?q?Jos=C3=A9=20Miguel=20S=C3=A1nchez=20Garc=C3=ADa?=
            3  <soy.jmi2k@gmail.com>
            4 Date: Thu, 13 Aug 2020 11:02:01 +0000
            5 Subject: [PATCH] add -G to set pixel-based geometry
            6 
            7 ---
            8  config.def.h | 13 +++++++++++++
            9  x.c          | 36 ++++++++++++++++++++++++++++++++----
           10  2 files changed, 45 insertions(+), 4 deletions(-)
           11 
           12 diff --git a/config.def.h b/config.def.h
           13 index 6f05dce..bea316a 100644
           14 --- a/config.def.h
           15 +++ b/config.def.h
           16 @@ -141,6 +141,12 @@ static unsigned int defaultrcs = 257;
           17   */
           18  static unsigned int cursorshape = 2;
           19  
           20 +/*
           21 + * Whether to use pixel geometry or cell geometry
           22 + */
           23 +
           24 +static Geometry geometry = CellGeometry;
           25 +
           26  /*
           27   * Default columns and rows numbers
           28   */
           29 @@ -148,6 +154,13 @@ static unsigned int cursorshape = 2;
           30  static unsigned int cols = 80;
           31  static unsigned int rows = 24;
           32  
           33 +/*
           34 + * Default width and height (including borders!)
           35 + */
           36 +
           37 +static unsigned int width = 564;
           38 +static unsigned int height = 364;
           39 +
           40  /*
           41   * Default colour and shape of the mouse cursor
           42   */
           43 diff --git a/x.c b/x.c
           44 index 210f184..29e35d0 100644
           45 --- a/x.c
           46 +++ b/x.c
           47 @@ -45,6 +45,11 @@ typedef struct {
           48          signed char appcursor; /* application cursor */
           49  } Key;
           50  
           51 +typedef enum {
           52 +        PixelGeometry,
           53 +        CellGeometry
           54 +} Geometry;
           55 +
           56  /* X modifiers */
           57  #define XK_ANY_MOD    UINT_MAX
           58  #define XK_NO_MOD     0
           59 @@ -1096,7 +1101,7 @@ xicdestroy(XIC xim, XPointer client, XPointer call)
           60  }
           61  
           62  void
           63 -xinit(int cols, int rows)
           64 +xinit(int w, int h)
           65  {
           66          XGCValues gcvalues;
           67          Cursor cursor;
           68 @@ -1121,8 +1126,16 @@ xinit(int cols, int rows)
           69          xloadcols();
           70  
           71          /* adjust fixed window geometry */
           72 -        win.w = 2 * borderpx + cols * win.cw;
           73 -        win.h = 2 * borderpx + rows * win.ch;
           74 +        switch (geometry) {
           75 +        case CellGeometry:
           76 +                win.w = 2 * borderpx + w * win.cw;
           77 +                win.h = 2 * borderpx + h * win.ch;
           78 +                break;
           79 +        case PixelGeometry:
           80 +                win.w = w;
           81 +                win.h = h;
           82 +                break;
           83 +        }
           84          if (xw.gm & XNegative)
           85                  xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;
           86          if (xw.gm & YNegative)
           87 @@ -2001,6 +2014,12 @@ main(int argc, char *argv[])
           88          case 'g':
           89                  xw.gm = XParseGeometry(EARGF(usage()),
           90                                  &xw.l, &xw.t, &cols, &rows);
           91 +                geometry = CellGeometry;
           92 +                break;
           93 +        case 'G':
           94 +                xw.gm = XParseGeometry(EARGF(usage()),
           95 +                                &xw.l, &xw.t, &width, &height);
           96 +                geometry = PixelGeometry;
           97                  break;
           98          case 'i':
           99                  xw.isfixed = 1;
          100 @@ -2037,10 +2056,19 @@ run:
          101  
          102          setlocale(LC_CTYPE, "");
          103          XSetLocaleModifiers("");
          104 +        switch (geometry) {
          105 +        case CellGeometry:
          106 +                xinit(cols, rows);
          107 +                break;
          108 +        case PixelGeometry:
          109 +                xinit(width, height);
          110 +                cols = (win.w - 2 * borderpx) / win.cw;
          111 +                rows = (win.h - 2 * borderpx) / win.ch;
          112 +                break;
          113 +        }
          114          cols = MAX(cols, 1);
          115          rows = MAX(rows, 1);
          116          tnew(cols, rows);
          117 -        xinit(cols, rows);
          118          xsetenv();
          119          selinit();
          120          run();
          121 -- 
          122 2.28.0
          123