sites

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

st-nowide-20241013-0.8.2.diff (3230B)


      1 From 6fb87a9dbdbdc344fec14d026adf2c84853794b3 Mon Sep 17 00:00:00 2001
      2 From: 8dcc <8dcc.git@gmail.com>
      3 Date: Sun, 13 Oct 2024 14:45:12 +0200
      4 Subject: [PATCH] Allow user to not render wide characters
      5 
      6 This patch adds a new terminal mode, NOWIDE. If it's enabled, wide characters
      7 will be replaced with a faint question mark. This mode can be enabled or
      8 disabled by default with the `renderwide' variable in <config.def.h>, and can be
      9 toggled with a keybind (Ctrl+Shift+W by default).
     10 
     11 This mode is specially useful if your font doesn't support wide characters,
     12 since rendering them usually makes the terminal really, really slow, specially
     13 when scrolling.
     14 
     15 This patch is intended for ST 0.8.2, but it should be easy to port it to newer
     16 versions.
     17 ---
     18  config.def.h |  7 +++++++
     19  st.c         | 17 ++++++++++++++++-
     20  st.h         |  2 ++
     21  3 files changed, 25 insertions(+), 1 deletion(-)
     22 
     23 diff --git a/config.def.h b/config.def.h
     24 index 0e01717..bc3f06f 100644
     25 --- a/config.def.h
     26 +++ b/config.def.h
     27 @@ -56,6 +56,12 @@ static unsigned int blinktimeout = 800;
     28   */
     29  static unsigned int cursorthickness = 2;
     30  
     31 +/*
     32 + * should we render wide characters by default? Can be toggled with the
     33 + * `togglewide' shortcut below.
     34 + */
     35 +int renderwide = 1;
     36 +
     37  /*
     38   * bell volume. It must be a value between -100 and 100. Use 0 for disabling
     39   * it
     40 @@ -178,6 +184,7 @@ static Shortcut shortcuts[] = {
     41  	{ TERMMOD,              XK_Y,           selpaste,       {.i =  0} },
     42  	{ ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
     43  	{ TERMMOD,              XK_Num_Lock,    numlock,        {.i =  0} },
     44 +	{ TERMMOD,              XK_W,           togglewide,     {.i =  0} },
     45  };
     46  
     47  /*
     48 diff --git a/st.c b/st.c
     49 index b8e6077..c583b5c 100644
     50 --- a/st.c
     51 +++ b/st.c
     52 @@ -52,6 +52,7 @@ enum term_mode {
     53  	MODE_PRINT       = 1 << 5,
     54  	MODE_UTF8        = 1 << 6,
     55  	MODE_SIXEL       = 1 << 7,
     56 +	MODE_NOWIDE      = 1 << 8,
     57  };
     58  
     59  enum cursor_movement {
     60 @@ -1029,6 +1030,8 @@ treset(void)
     61  	term.top = 0;
     62  	term.bot = term.row - 1;
     63  	term.mode = MODE_WRAP|MODE_UTF8;
     64 +	if (!renderwide)
     65 +		term.mode |= MODE_NOWIDE;
     66  	memset(term.trantbl, CS_USA, sizeof(term.trantbl));
     67  	term.charset = 0;
     68  
     69 @@ -1980,6 +1983,12 @@ tprinter(char *s, size_t len)
     70  	}
     71  }
     72  
     73 +void
     74 +togglewide(const Arg *arg)
     75 +{
     76 +	term.mode ^= MODE_NOWIDE;
     77 +}
     78 +
     79  void
     80  toggleprinter(const Arg *arg)
     81  {
     82 @@ -2427,7 +2436,13 @@ check_control_code:
     83  	tsetchar(u, &term.c.attr, term.c.x, term.c.y);
     84  
     85  	if (width == 2) {
     86 -		gp->mode |= ATTR_WIDE;
     87 +		if (IS_SET(MODE_NOWIDE))  {
     88 +			gp[0].u = '?';
     89 +			gp[0].mode |= ATTR_FAINT;
     90 +		} else {
     91 +			gp[0].mode |= ATTR_WIDE;
     92 +		}
     93 +
     94  		if (term.c.x+1 < term.col) {
     95  			gp[1].u = '\0';
     96  			gp[1].mode = ATTR_WDUMMY;
     97 diff --git a/st.h b/st.h
     98 index 38c61c4..0691246 100644
     99 --- a/st.h
    100 +++ b/st.h
    101 @@ -83,6 +83,7 @@ void draw(void);
    102  void printscreen(const Arg *);
    103  void printsel(const Arg *);
    104  void sendbreak(const Arg *);
    105 +void togglewide(const Arg *);
    106  void toggleprinter(const Arg *);
    107  
    108  int tattrset(int);
    109 @@ -116,6 +117,7 @@ extern char *stty_args;
    110  extern char *vtiden;
    111  extern char *worddelimiters;
    112  extern int allowaltscreen;
    113 +extern int renderwide;
    114  extern char *termname;
    115  extern unsigned int tabspaces;
    116  extern unsigned int defaultfg;
    117 -- 
    118 2.46.2
    119