diff options
author | Leo Famulari <leo@famulari.name> | 2023-09-05 13:19:51 -0400 |
---|---|---|
committer | Leo Famulari <leo@famulari.name> | 2023-07-23 22:26:00 -0400 |
commit | 8b8607a9452b7690b15f7db2613abdc211d40cee (patch) | |
tree | 0aa098b60376e7fed06e61634a240b3d454889a2 /gnu/packages | |
parent | 8d19ff23052bffb1c43f0d39f543eb0b1e363074 (diff) |
gnu: rxvt-unicode: Fix the cursor position when opening new windows in 9.31.
Fixes <https://issues.guix.gnu.org/64719>.
* gnu/packages/patches/rxvt-unicode-fix-cursor-position.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/xdisorg.scm (rxvt-unicode)[source]: Use it.
Diffstat (limited to 'gnu/packages')
-rw-r--r-- | gnu/packages/patches/rxvt-unicode-fix-cursor-position.patch | 79 | ||||
-rw-r--r-- | gnu/packages/xdisorg.scm | 1 |
2 files changed, 80 insertions, 0 deletions
diff --git a/gnu/packages/patches/rxvt-unicode-fix-cursor-position.patch b/gnu/packages/patches/rxvt-unicode-fix-cursor-position.patch new file mode 100644 index 0000000000..1905c4ccf6 --- /dev/null +++ b/gnu/packages/patches/rxvt-unicode-fix-cursor-position.patch @@ -0,0 +1,79 @@ +Fix a bug that causes the cursor position to be incorrect when opening +new terminals: + +http://lists.schmorp.de/pipermail/rxvt-unicode/2023q1/002639.html +https://bugs.archlinux.org/task/77062 +https://gitlab.alpinelinux.org/alpine/aports/-/issues/14525 + +This patches reverts all changes made to 'src/screen.C' in rxvt-unicode 9.31. + +--- rxvt-unicode-9.31/src/screen.C 2022-08-08 06:33:08.000000000 -0400 ++++ rxvt-unicode-9.30/src/screen.C 2021-07-02 23:55:47.000000000 -0400 +@@ -293,7 +293,6 @@ + + int common_col = min (prev_ncol, ncol); + +- // resize swap_buf, blank drawn_buf + for (int row = min (nrow, prev_nrow); row--; ) + { + scr_blank_screen_mem (drawn_buf [row], DEFAULT_RSTYLE); +@@ -307,7 +306,6 @@ + int pend = MOD (term_start + top_row , prev_total_rows); + int q = total_rows; // rewrapped row + +-#if ENABLE_FRILLS + if ((rewrap_always || top_row) && !rewrap_never) + { + // Re-wrap lines. This is rather ugly, possibly because I am too dumb +@@ -389,35 +387,36 @@ + scr_blank_line (*qline, qline->l, ncol - qline->l, DEFAULT_RSTYLE); + } + while (p != pend && q > 0); ++ ++ term_start = total_rows - nrow; ++ top_row = q - term_start; ++ ++ // make sure all terminal lines exist ++ while (top_row > 0) ++ scr_blank_screen_mem (ROW (--top_row), DEFAULT_RSTYLE); + } + else +-#endif + { +- // wing, instead of wrap +- screen.cur.row += nrow - prev_nrow; ++ // if no scrollback exists (yet), wing, instead of wrap + +- do ++ for (int row = min (nrow, prev_nrow); row--; ) + { +- p = MOD (p - 1, prev_total_rows); +- q--; ++ line_t &src = prev_row_buf [MOD (term_start + row, prev_total_rows)]; ++ line_t &dst = row_buf [row]; + +- copy_line (row_buf [q], prev_row_buf [p]); ++ copy_line (dst, src); + } +- while (p != pend && q > 0); +- } + +- term_start = total_rows - nrow; +- top_row = q - term_start; ++ for (int row = prev_nrow; row < nrow; row++) ++ scr_blank_screen_mem (row_buf [row], DEFAULT_RSTYLE); + +- // make sure all terminal lines exist +- while (top_row > 0) +- scr_blank_screen_mem (ROW (--top_row), DEFAULT_RSTYLE); ++ term_start = 0; ++ } + + clamp_it (screen.cur.row, 0, nrow - 1); + clamp_it (screen.cur.col, 0, ncol - 1); + } + +- // ensure drawn_buf, swap_buf and terminal rows are all initialized + for (int row = nrow; row--; ) + { + if (!ROW (row).valid ()) scr_blank_screen_mem (ROW (row), DEFAULT_RSTYLE); diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index 1c1ca32e7e..ee6e00f518 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -1335,6 +1335,7 @@ compact configuration syntax.") (method url-fetch) (uri (string-append "http://dist.schmorp.de/rxvt-unicode/Attic/" name "-" version ".tar.bz2")) + (patches (search-patches "rxvt-unicode-fix-cursor-position.patch")) (sha256 (base32 "1s3jcvac40zzp03fvmhjsdpsjx0gb1wk54qz74zhzzj9q75kz8da")))) |