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