commit 8aee31444abb1a8af50c54c802ff0af0054388b7
parent aa5957495d315a2aca2a846a48ba9f7557353ec5
Author: Bakkeby <bakkeby@gmail.com>
Date: Fri, 31 May 2024 22:47:52 +0200
Adding the anygeometry patch ref. #137
Diffstat:
4 files changed, 75 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
@@ -15,6 +15,8 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
### Changelog:
+2024-05-31 - Added the anygeometry patch
+
2024-03-13 - Added the reflow patch and upgraded the netwmicon patch
2024-03-07 - Improved sixel support, removed VIM browse patch
@@ -102,6 +104,10 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
- allows the user to specify two distinct opacity values or background colors in order to
easily differentiate between focused and unfocused terminal windows
+ - [anygeometry](https://st.suckless.org/patches/anygeometry/)
+ - allows st to start at any pixel size using the \-G command line option (if floating)
+ - can be combined with the anysize patch to resize to any pixel size
+
- [anysize](https://st.suckless.org/patches/anysize/)
- allows st to reize to any pixel size rather than snapping to character width / height
diff --git a/config.def.h b/config.def.h
@@ -267,6 +267,16 @@ static unsigned int cursorshape = 2;
static unsigned int cols = 80;
static unsigned int rows = 24;
+#if ANYGEOMETRY_PATCH
+/*
+ * Whether to use pixel geometry or cell geometry
+ */
+
+static Geometry geometry = CellGeometry; // or PixelGeometry to use the below size
+static unsigned int width = 564;
+static unsigned int height = 364;
+#endif // ANYGEOMETRY_PATCH
+
#if THEMED_CURSOR_PATCH
/*
* Default shape of the mouse cursor
diff --git a/patches.def.h b/patches.def.h
@@ -29,6 +29,13 @@
*/
#define ALPHA_GRADIENT_PATCH 0
+/* Allows for the initial size of the terminal to be specified as pixel width and height
+ * using the -G command line option. Can be combined with the anysize patch to also allow
+ * the window to be resized to any pixel size.
+ * https://st.suckless.org/patches/anygeometry/
+ */
+#define ANYGEOMETRY_PATCH 0
+
/* This patch allows st to resize to any pixel size rather than snapping to character width/height.
* https://st.suckless.org/patches/anysize/
*/
diff --git a/x.c b/x.c
@@ -42,6 +42,13 @@ enum undercurl_slope_type {
};
#endif // UNDERCURL_PATCH
+#if ANYGEOMETRY_PATCH
+typedef enum {
+ PixelGeometry,
+ CellGeometry
+} Geometry;
+#endif // ANYGEOMETRY_PATCH
+
/* X modifiers */
#define XK_ANY_MOD UINT_MAX
#define XK_NO_MOD 0
@@ -1468,13 +1475,31 @@ xinit(int cols, int rows)
xloadcols();
/* adjust fixed window geometry */
- #if ANYSIZE_PATCH
+ #if ANYGEOMETRY_PATCH
+ switch (geometry) {
+ case CellGeometry:
+ #if ANYSIZE_PATCH
+ win.w = 2 * win.hborderpx + cols * win.cw;
+ win.h = 2 * win.vborderpx + rows * win.ch;
+ #else
+ win.w = 2 * borderpx + cols * win.cw;
+ win.h = 2 * borderpx + rows * win.ch;
+ #endif // ANYGEOMETRY_PATCH | ANYSIZE_PATCH
+ break;
+ case PixelGeometry:
+ win.w = cols;
+ win.h = rows;
+ cols = (win.w - 2 * borderpx) / win.cw;
+ rows = (win.h - 2 * borderpx) / win.ch;
+ break;
+ }
+ #elif ANYSIZE_PATCH
win.w = 2 * win.hborderpx + cols * win.cw;
win.h = 2 * win.vborderpx + rows * win.ch;
#else
win.w = 2 * borderpx + cols * win.cw;
win.h = 2 * borderpx + rows * win.ch;
- #endif // ANYSIZE_PATCH
+ #endif // ANYGEOMETRY_PATCH | ANYSIZE_PATCH
if (xw.gm & XNegative)
xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;
if (xw.gm & YNegative)
@@ -3863,7 +3888,17 @@ main(int argc, char *argv[])
case 'g':
xw.gm = XParseGeometry(EARGF(usage()),
&xw.l, &xw.t, &cols, &rows);
+ #if ANYGEOMETRY_PATCH
+ geometry = CellGeometry;
+ #endif // ANYGEOMETRY_PATCH
+ break;
+ #if ANYGEOMETRY_PATCH
+ case 'G':
+ xw.gm = XParseGeometry(EARGF(usage()),
+ &xw.l, &xw.t, &width, &height);
+ geometry = PixelGeometry;
break;
+ #endif // ANYGEOMETRY_PATCH
case 'i':
xw.isfixed = 1;
break;
@@ -3912,13 +3947,28 @@ run:
hbcreatebuffer();
#endif // LIGATURES_PATCH
+ #if ANYGEOMETRY_PATCH
+ switch (geometry) {
+ case CellGeometry:
+ xinit(cols, rows);
+ break;
+ case PixelGeometry:
+ xinit(width, height);
+ cols = (win.w - 2 * borderpx) / win.cw;
+ rows = (win.h - 2 * borderpx) / win.ch;
+ break;
+ }
+ #endif // ANYGEOMETRY_PATCH
+
cols = MAX(cols, 1);
rows = MAX(rows, 1);
#if ALPHA_PATCH && ALPHA_FOCUS_HIGHLIGHT_PATCH
defaultbg = MAX(LEN(colorname), 256);
#endif // ALPHA_FOCUS_HIGHLIGHT_PATCH
tnew(cols, rows);
+ #if !ANYGEOMETRY_PATCH
xinit(cols, rows);
+ #endif // ANYGEOMETRY_PATCH
#if BACKGROUND_IMAGE_PATCH
bginit();
#endif // BACKGROUND_IMAGE_PATCH