From 691849cc788f00ae7c6a1fb3b5c7f1c226e4d6ac Mon Sep 17 00:00:00 2001 From: root Date: Thu, 22 Dec 2005 15:52:57 +0000 Subject: [PATCH] *** empty log message *** --- src/screen.C | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/screen.C b/src/screen.C index 8889cc05..236b0ac1 100644 --- a/src/screen.C +++ b/src/screen.C @@ -282,6 +282,9 @@ rxvt_term::scr_reset () // re-wrap lines, this is rather ugly, possibly because I am too dumb // to come up with a lean and mean algorithm. + row_col_t ocur = screen.cur; + ocur.row = MOD (term_start + ocur.row, prev_total_rows); + while (p != pend && q > 0) { p = MOD (p - 1, prev_total_rows); @@ -289,12 +292,14 @@ rxvt_term::scr_reset () assert (old_buf [MOD (p, prev_total_rows)].t); #endif + int plines = 1; int llen = old_buf [MOD (p, prev_total_rows)].l; while (p != pend && old_buf [MOD (p - 1, prev_total_rows)].is_longer ()) { p = MOD (p - 1, prev_total_rows); + plines++; llen += prev_ncol; } @@ -324,7 +329,14 @@ rxvt_term::scr_reset () int prow = lofs / prev_ncol; int pcol = lofs % prev_ncol; - line_t &pline = old_buf [MOD (p + prow, prev_total_rows)]; + prow = MOD (p + prow, prev_total_rows); + + // we only adjust the cursor _row_, as this seems to upset + // applications/shells/readline least. + if (prow == ocur.row) + screen.cur.row = qrow - (total_rows - nrow); + + line_t &pline = old_buf [prow]; int len = min (min (prev_ncol - pcol, ncol - qcol), llen - lofs); -- 2.34.1