From b82057eb85be26d83d5dcb7e8f3b74a95166cca5 Mon Sep 17 00:00:00 2001 From: Bakkeby Date: Sun, 25 Jun 2023 14:19:27 +0200 Subject: [PATCH] Fix for wide character being incorrectly cleared on MODE_INSERT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Under insert mode, when inserting a normal character in front of a wide character, the affected region is shifted to the right by one cell. However, the empty cell is reset as if being a part of a wide character, causing the following cell being mishandled as a dummy cell. To reproduce the bug: printf '\033[4h' # set MODE_INSERT printf 妳好 printf '\033[4D' printf 'x' printf '\033[4l\n' Ref. https://git.suckless.org/st/commit/3a6d6d740110e6ee1b092d05ad746244eedabe4b.html --- README.md | 2 +- st.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4787c1a..62912e5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Similar to [dwm-flexipatch](https://github.com/bakkeby/dwm-flexipatch) this st 0.9 (211964d, 2023-02-07) project has a different take on st patching. It uses preprocessor directives to decide whether or not to include a patch during build time. Essentially this means that this build, for better or worse, contains both the patched _and_ the original code. The aim being that you can select which patches to include and the build will contain that code and nothing more. +Similar to [dwm-flexipatch](https://github.com/bakkeby/dwm-flexipatch) this st 0.9 (3a6d6d7, 2023-06-25) project has a different take on st patching. It uses preprocessor directives to decide whether or not to include a patch during build time. Essentially this means that this build, for better or worse, contains both the patched _and_ the original code. The aim being that you can select which patches to include and the build will contain that code and nothing more. For example to include the `alpha` patch then you would only need to flip this setting from 0 to 1 in [patches.h](https://github.com/bakkeby/st-flexipatch/blob/master/patches.def.h): ```c diff --git a/st.c b/st.c index a351efe..4929a8a 100644 --- a/st.c +++ b/st.c @@ -3244,8 +3244,10 @@ check_control_code: gp = &term.line[term.c.y][term.c.x]; } - if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) + if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) { memmove(gp+width, gp, (term.col - term.c.x - width) * sizeof(Glyph)); + gp->mode &= ~ATTR_WIDE; + } if (term.c.x+width > term.col) { tnewline(1);