sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 4048cfa317cbdbb4523b014f7734352316783f99
parent 1e8125f674f7f90ccdf922832395af2bfe4f6f62
Author: 8dcc <8dcc.git@gmail.com>
Date:   Sun, 13 Oct 2024 15:52:15 +0200

[st][patch] Add nowide patch

Diffstat:
Ast.suckless.org/patches/nowide/index.md | 24++++++++++++++++++++++++
Ast.suckless.org/patches/nowide/st-nowide-20241013-0.8.2.diff | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 143 insertions(+), 0 deletions(-)

diff --git a/st.suckless.org/patches/nowide/index.md b/st.suckless.org/patches/nowide/index.md @@ -0,0 +1,24 @@ +nowide +====== + +Description +----------- +This patch adds a new terminal mode, /NOWIDE/. If it's enabled, wide characters +will be replaced with a faint question mark. This mode can be enabled or +disabled by default with the `renderwide` variable in `config.def.h`, and can be +toggled with a keybind (`Ctrl+Shift+W` by default). + +This mode is specially useful if your font doesn't support wide characters, +since rendering them usually makes the terminal really, really slow, specially +when scrolling. + +This patch is intended for ST 0.8.2, but it should be easy to port it to newer +versions. + +Download +-------- +* [st-nowide-20241013-0.8.2.diff](st-nowide-20241013-0.8.2.diff) + +Authors +------- +* [8dcc](https://github.com/8dcc) - <8dcc.git@gmail.com> diff --git a/st.suckless.org/patches/nowide/st-nowide-20241013-0.8.2.diff b/st.suckless.org/patches/nowide/st-nowide-20241013-0.8.2.diff @@ -0,0 +1,119 @@ +From 6fb87a9dbdbdc344fec14d026adf2c84853794b3 Mon Sep 17 00:00:00 2001 +From: 8dcc <8dcc.git@gmail.com> +Date: Sun, 13 Oct 2024 14:45:12 +0200 +Subject: [PATCH] Allow user to not render wide characters + +This patch adds a new terminal mode, NOWIDE. If it's enabled, wide characters +will be replaced with a faint question mark. This mode can be enabled or +disabled by default with the `renderwide' variable in <config.def.h>, and can be +toggled with a keybind (Ctrl+Shift+W by default). + +This mode is specially useful if your font doesn't support wide characters, +since rendering them usually makes the terminal really, really slow, specially +when scrolling. + +This patch is intended for ST 0.8.2, but it should be easy to port it to newer +versions. +--- + config.def.h | 7 +++++++ + st.c | 17 ++++++++++++++++- + st.h | 2 ++ + 3 files changed, 25 insertions(+), 1 deletion(-) + +diff --git a/config.def.h b/config.def.h +index 0e01717..bc3f06f 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -56,6 +56,12 @@ static unsigned int blinktimeout = 800; + */ + static unsigned int cursorthickness = 2; + ++/* ++ * should we render wide characters by default? Can be toggled with the ++ * `togglewide' shortcut below. ++ */ ++int renderwide = 1; ++ + /* + * bell volume. It must be a value between -100 and 100. Use 0 for disabling + * it +@@ -178,6 +184,7 @@ static Shortcut shortcuts[] = { + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, ++ { TERMMOD, XK_W, togglewide, {.i = 0} }, + }; + + /* +diff --git a/st.c b/st.c +index b8e6077..c583b5c 100644 +--- a/st.c ++++ b/st.c +@@ -52,6 +52,7 @@ enum term_mode { + MODE_PRINT = 1 << 5, + MODE_UTF8 = 1 << 6, + MODE_SIXEL = 1 << 7, ++ MODE_NOWIDE = 1 << 8, + }; + + enum cursor_movement { +@@ -1029,6 +1030,8 @@ treset(void) + term.top = 0; + term.bot = term.row - 1; + term.mode = MODE_WRAP|MODE_UTF8; ++ if (!renderwide) ++ term.mode |= MODE_NOWIDE; + memset(term.trantbl, CS_USA, sizeof(term.trantbl)); + term.charset = 0; + +@@ -1980,6 +1983,12 @@ tprinter(char *s, size_t len) + } + } + ++void ++togglewide(const Arg *arg) ++{ ++ term.mode ^= MODE_NOWIDE; ++} ++ + void + toggleprinter(const Arg *arg) + { +@@ -2427,7 +2436,13 @@ check_control_code: + tsetchar(u, &term.c.attr, term.c.x, term.c.y); + + if (width == 2) { +- gp->mode |= ATTR_WIDE; ++ if (IS_SET(MODE_NOWIDE)) { ++ gp[0].u = '?'; ++ gp[0].mode |= ATTR_FAINT; ++ } else { ++ gp[0].mode |= ATTR_WIDE; ++ } ++ + if (term.c.x+1 < term.col) { + gp[1].u = '\0'; + gp[1].mode = ATTR_WDUMMY; +diff --git a/st.h b/st.h +index 38c61c4..0691246 100644 +--- a/st.h ++++ b/st.h +@@ -83,6 +83,7 @@ void draw(void); + void printscreen(const Arg *); + void printsel(const Arg *); + void sendbreak(const Arg *); ++void togglewide(const Arg *); + void toggleprinter(const Arg *); + + int tattrset(int); +@@ -116,6 +117,7 @@ extern char *stty_args; + extern char *vtiden; + extern char *worddelimiters; + extern int allowaltscreen; ++extern int renderwide; + extern char *termname; + extern unsigned int tabspaces; + extern unsigned int defaultfg; +-- +2.46.2 +