summaryrefslogtreecommitdiff
path: root/files/config/suckless/st/st.h.rej
diff options
context:
space:
mode:
authorshipwreckt <me@shipwreckt.co.uk>2025-10-16 22:13:02 +0100
committershipwreckt <me@shipwreckt.co.uk>2025-10-16 22:13:02 +0100
commite63a16b509b05993fc7900b6296ba8601e343976 (patch)
treeb9e1d57e09a111981427bafe3b3223384e358830 /files/config/suckless/st/st.h.rej
parente8b5675eb77aa20027f369ca278457b6a7c2e142 (diff)
More small changes, added thunderbird items.
Diffstat (limited to 'files/config/suckless/st/st.h.rej')
-rw-r--r--files/config/suckless/st/st.h.rej72
1 files changed, 72 insertions, 0 deletions
diff --git a/files/config/suckless/st/st.h.rej b/files/config/suckless/st/st.h.rej
new file mode 100644
index 0000000..0434f72
--- /dev/null
+++ b/files/config/suckless/st/st.h.rej
@@ -0,0 +1,72 @@
+--- st.h
++++ st.h
+@@ -140,3 +156,69 @@ extern unsigned int tabspaces;
+ extern unsigned int defaultfg;
+ extern unsigned int defaultbg;
+ extern unsigned int defaultcs;
++
++// Accessors to decoration properties stored in `decor`.
++// The 25-th bit is used to indicate if it's a 24-bit color.
++static inline uint32_t tgetdecorcolor(Glyph *g) { return g->decor & 0x1ffffff; }
++static inline uint32_t tgetdecorstyle(Glyph *g) { return (g->decor >> 25) & 0x7; }
++static inline void tsetdecorcolor(Glyph *g, uint32_t color) {
++ g->decor = (g->decor & ~0x1ffffff) | (color & 0x1ffffff);
++}
++static inline void tsetdecorstyle(Glyph *g, uint32_t style) {
++ g->decor = (g->decor & ~(0x7 << 25)) | ((style & 0x7) << 25);
++}
++
++
++// Some accessors to image placeholder properties stored in `u`:
++// - row (1-base) - 9 bits
++// - column (1-base) - 9 bits
++// - most significant byte of the image id plus 1 - 9 bits (0 means unspecified,
++// don't forget to subtract 1).
++// - the original number of diacritics (0, 1, 2, or 3) - 2 bits
++// - whether this is a classic (1) or Unicode (0) placeholder - 1 bit
++static inline uint32_t tgetimgrow(Glyph *g) { return g->u & 0x1ff; }
++static inline uint32_t tgetimgcol(Glyph *g) { return (g->u >> 9) & 0x1ff; }
++static inline uint32_t tgetimgid4thbyteplus1(Glyph *g) { return (g->u >> 18) & 0x1ff; }
++static inline uint32_t tgetimgdiacriticcount(Glyph *g) { return (g->u >> 27) & 0x3; }
++static inline uint32_t tgetisclassicplaceholder(Glyph *g) { return (g->u >> 29) & 0x1; }
++static inline void tsetimgrow(Glyph *g, uint32_t row) {
++ g->u = (g->u & ~0x1ff) | (row & 0x1ff);
++}
++static inline void tsetimgcol(Glyph *g, uint32_t col) {
++ g->u = (g->u & ~(0x1ff << 9)) | ((col & 0x1ff) << 9);
++}
++static inline void tsetimg4thbyteplus1(Glyph *g, uint32_t byteplus1) {
++ g->u = (g->u & ~(0x1ff << 18)) | ((byteplus1 & 0x1ff) << 18);
++}
++static inline void tsetimgdiacriticcount(Glyph *g, uint32_t count) {
++ g->u = (g->u & ~(0x3 << 27)) | ((count & 0x3) << 27);
++}
++static inline void tsetisclassicplaceholder(Glyph *g, uint32_t isclassic) {
++ g->u = (g->u & ~(0x1 << 29)) | ((isclassic & 0x1) << 29);
++}
++
++/// Returns the full image id. This is a naive implementation, if the most
++/// significant byte is not specified, it's assumed to be 0 instead of inferring
++/// it from the cells to the left.
++static inline uint32_t tgetimgid(Glyph *g) {
++ uint32_t msb = tgetimgid4thbyteplus1(g);
++ if (msb != 0)
++ --msb;
++ return (msb << 24) | (g->fg & 0xFFFFFF);
++}
++
++/// Sets the full image id.
++static inline void tsetimgid(Glyph *g, uint32_t id) {
++ g->fg = (id & 0xFFFFFF) | (1 << 24);
++ tsetimg4thbyteplus1(g, ((id >> 24) & 0xFF) + 1);
++}
++
++static inline uint32_t tgetimgplacementid(Glyph *g) {
++ if (tgetdecorcolor(g) == DECOR_DEFAULT_COLOR)
++ return 0;
++ return g->decor & 0xFFFFFF;
++}
++
++static inline void tsetimgplacementid(Glyph *g, uint32_t id) {
++ g->decor = (id & 0xFFFFFF) | (1 << 24);
++}