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); sg-avail'>...Fixes a bug that would occur with references to two outputs of the same derivation, with one of them referring to the other one. For example, the references of libreoffice include both mariadb:dev and mariadb:lib; additionally, mariadb:dev refers to mariadb:lib. In this case, the glibc graft would not be applied on one of the mariadb paths, and both the grafted and ungrafted glibc would end up in the closure of libreoffice. Fixes <https://issues.guix.gnu.org/66662>. * guix/grafts.scm (non-self-references): Simplify and include references to outputs of DRV other than OUTPUTS. (reference-origins): Simplify and possibly return outputs of DRV itself. (cumulative-grafts)[graft-origin?]: Add OUTPUT parameter and honor it. [dependency-grafts]: Adjust accordingly. * tests/grafts.scm ("graft-derivation, multiple outputs need to be replaced"): New test. Change-Id: Iac2005024ab7049037537b3af55298696ec90e3c Ludovic Courtès