st-anygeometry-0.8.1.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
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 <[email protected]> | |
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 |