To: vim_dev@googlegroups.com Subject: Patch 9.0.0640 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0640 Problem: Cannot scroll by screen line if a line wraps. Solution: Add the 'smoothscroll' option. Only works for CTRL-E and CTRL-Y so far. Files: runtime/doc/options.txt, runtime/doc/quickref.txt, runtime/optwin.vim, src/structs.h, src/optiondefs.h, src/option.c, src/drawline.c, src/move.c, src/testdir/test_scroll_opt.vim, src/testdir/dumps/Test_smoothscroll_1.dump, src/testdir/dumps/Test_smoothscroll_2.dump, src/testdir/dumps/Test_smoothscroll_3.dump, src/testdir/dumps/Test_smoothscroll_4.dump, src/testdir/dumps/Test_smoothscroll_5.dump, src/testdir/dumps/Test_smoothscroll_6.dump, src/testdir/dumps/Test_smoothscroll_7.dump, src/testdir/dumps/Test_smoothscroll_8.dump *** ../vim-9.0.0639/runtime/doc/options.txt 2022-10-01 19:43:48.602494034 +0100 --- runtime/doc/options.txt 2022-10-02 21:26:06.080848259 +0100 *************** *** 7273,7278 **** --- 7302,7315 ---- reset. NOTE: This option is reset when 'compatible' is set. + *'smoothscroll'* *'sms'* *'nosmoothscroll'* *'nosms'* + 'smoothscroll' 'sms' boolean (default off) + local to window + Scrolling works with screen lines. When 'wrap' is set and the first + line in the window wraps part of it may not be visible, as if it is + above the window. + NOTE: only partly implemented, works with CTRL-E and CTRL-Y. + *'softtabstop'* *'sts'* 'softtabstop' 'sts' number (default 0) local to buffer *** ../vim-9.0.0639/runtime/doc/quickref.txt 2022-09-11 16:59:48.934110049 +0100 --- runtime/doc/quickref.txt 2022-10-02 21:25:42.356954154 +0100 *************** *** 910,915 **** --- 910,916 ---- 'smartcase' 'scs' no ignore case when pattern has uppercase 'smartindent' 'si' smart autoindenting for C programs 'smarttab' 'sta' use 'shiftwidth' when inserting + 'smoothscroll' 'sms' scroll by screen lines when 'wrap' is set 'softtabstop' 'sts' number of spaces that uses while editing 'spell' enable spell checking 'spellcapcheck' 'spc' pattern to locate end of a sentence *************** *** 919,925 **** 'spellsuggest' 'sps' method(s) used to suggest spelling corrections 'splitbelow' 'sb' new window from split is below the current one 'splitright' 'spr' new window is put right of the current one ! 'splitscroll' 'spsc' determines scroll behavior when splitting windows 'startofline' 'sol' commands move cursor to first non-blank in line 'statusline' 'stl' custom format for the status line 'suffixes' 'su' suffixes that are ignored with multiple match --- 920,926 ---- 'spellsuggest' 'sps' method(s) used to suggest spelling corrections 'splitbelow' 'sb' new window from split is below the current one 'splitright' 'spr' new window is put right of the current one ! 'splitscroll' 'spsc' determines scroll behavior for split windows 'startofline' 'sol' commands move cursor to first non-blank in line 'statusline' 'stl' custom format for the status line 'suffixes' 'su' suffixes that are ignored with multiple match *** ../vim-9.0.0639/runtime/optwin.vim 2022-09-16 12:52:54.505955519 +0100 --- runtime/optwin.vim 2022-10-02 21:23:47.637513388 +0100 *************** *** 343,348 **** --- 343,351 ---- call AddOption("scroll", gettext("number of lines to scroll for CTRL-U and CTRL-D")) call append("$", "\t" .. s:local_to_window) call OptionL("scr") + call AddOption("smoothscroll", gettext("scroll by screen line")) + call append("$", "\t" .. s:local_to_window) + call BinOptionL("sms") call AddOption("scrolloff", gettext("number of screen lines to show around the cursor")) call append("$", " \tset so=" . &so) call AddOption("wrap", gettext("long lines wrap")) *** ../vim-9.0.0639/src/structs.h 2022-09-29 19:14:37.675876694 +0100 --- src/structs.h 2022-10-02 17:48:59.045171364 +0100 *************** *** 262,267 **** --- 262,269 ---- #endif long wo_scr; #define w_p_scr w_onebuf_opt.wo_scr // 'scroll' + int wo_sms; + #define w_p_sms w_onebuf_opt.wo_sms // 'smoothscroll' #ifdef FEAT_SPELL int wo_spell; # define w_p_spell w_onebuf_opt.wo_spell // 'spell' *************** *** 3592,3602 **** // below w_topline (at end of file) int w_old_botfill; // w_botfill at last redraw #endif ! colnr_T w_leftcol; // window column number of the left most // character in the window; used when // 'wrap' is off ! colnr_T w_skipcol; // starting column when a single line ! // doesn't fit in the window int w_empty_rows; // number of ~ rows in window #ifdef FEAT_DIFF --- 3594,3605 ---- // below w_topline (at end of file) int w_old_botfill; // w_botfill at last redraw #endif ! colnr_T w_leftcol; // screen column number of the left most // character in the window; used when // 'wrap' is off ! colnr_T w_skipcol; // starting screen column for the first ! // line in the window; used when 'wrap' is ! // on int w_empty_rows; // number of ~ rows in window #ifdef FEAT_DIFF *** ../vim-9.0.0639/src/optiondefs.h 2022-09-11 16:59:48.934110049 +0100 --- src/optiondefs.h 2022-10-02 17:10:56.126414341 +0100 *************** *** 194,199 **** --- 194,200 ---- #endif #define PV_SCBIND OPT_WIN(WV_SCBIND) #define PV_SCROLL OPT_WIN(WV_SCROLL) + #define PV_SMS OPT_WIN(WV_SMS) #define PV_SISO OPT_BOTH(OPT_WIN(WV_SISO)) #define PV_SO OPT_BOTH(OPT_WIN(WV_SO)) #ifdef FEAT_SPELL *************** *** 2282,2287 **** --- 2283,2291 ---- {"smarttab", "sta", P_BOOL|P_VI_DEF|P_VIM, (char_u *)&p_sta, PV_NONE, {(char_u *)FALSE, (char_u *)0L} SCTX_INIT}, + {"smoothscroll", "sms", P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_SMS, + {(char_u *)FALSE, (char_u *)0L} SCTX_INIT}, {"softtabstop", "sts", P_NUM|P_VI_DEF|P_VIM, (char_u *)&p_sts, PV_STS, {(char_u *)0L, (char_u *)0L} SCTX_INIT}, *** ../vim-9.0.0639/src/option.c 2022-09-22 13:57:29.075199731 +0100 --- src/option.c 2022-10-02 17:16:24.590652593 +0100 *************** *** 2964,2969 **** --- 2964,2978 ---- } #endif + else if ((int *)varp == &curwin->w_p_sms) + { + if (!curwin->w_p_sms) + { + curwin->w_skipcol = 0; + changed_line_abv_curs(); + } + } + // when 'textmode' is set or reset also change 'fileformat' else if ((int *)varp == &curbuf->b_p_tx) { *************** *** 5436,5441 **** --- 5445,5451 ---- case PV_RLC: return (char_u *)&(curwin->w_p_rlc); #endif case PV_SCROLL: return (char_u *)&(curwin->w_p_scr); + case PV_SMS: return (char_u *)&(curwin->w_p_sms); case PV_WRAP: return (char_u *)&(curwin->w_p_wrap); #ifdef FEAT_LINEBREAK case PV_LBR: return (char_u *)&(curwin->w_p_lbr); *** ../vim-9.0.0639/src/drawline.c 2022-09-25 20:58:08.801019377 +0100 --- src/drawline.c 2022-10-02 17:47:17.184646130 +0100 *************** *** 387,393 **** } sprintf((char *)wlv->extra, fmt, number_width(wp), num); ! if (wp->w_skipcol > 0) for (wlv->p_extra = wlv->extra; *wlv->p_extra == ' '; ++wlv->p_extra) *wlv->p_extra = '-'; --- 387,393 ---- } sprintf((char *)wlv->extra, fmt, number_width(wp), num); ! if (wp->w_skipcol > 0 && wlv->startrow == 0) for (wlv->p_extra = wlv->extra; *wlv->p_extra == ' '; ++wlv->p_extra) *wlv->p_extra = '-'; *************** *** 492,498 **** if (wlv->n_extra < 0) wlv->n_extra = 0; } ! if (wp->w_skipcol > 0 && wp->w_p_wrap && wp->w_briopt_sbr) wlv->need_showbreak = FALSE; // Correct end of highlighted area for 'breakindent', // required when 'linebreak' is also set. --- 492,499 ---- if (wlv->n_extra < 0) wlv->n_extra = 0; } ! if (wp->w_skipcol > 0 && wlv->startrow == 0 ! && wp->w_p_wrap && wp->w_briopt_sbr) wlv->need_showbreak = FALSE; // Correct end of highlighted area for 'breakindent', // required when 'linebreak' is also set. *************** *** 540,546 **** wlv->c_extra = NUL; wlv->c_final = NUL; wlv->n_extra = (int)STRLEN(sbr); ! if (wp->w_skipcol == 0 || !wp->w_p_wrap) wlv->need_showbreak = FALSE; wlv->vcol_sbr = wlv->vcol + MB_CHARLEN(sbr); // Correct end of highlighted area for 'showbreak', --- 541,547 ---- wlv->c_extra = NUL; wlv->c_final = NUL; wlv->n_extra = (int)STRLEN(sbr); ! if ((wp->w_skipcol == 0 && wlv->startrow == 0) || !wp->w_p_wrap) wlv->need_showbreak = FALSE; wlv->vcol_sbr = wlv->vcol + MB_CHARLEN(sbr); // Correct end of highlighted area for 'showbreak', *************** *** 750,756 **** // Highlight 'cursorcolumn' & 'colorcolumn' past end of the line. if (wp->w_p_wrap) ! v = wp->w_skipcol; else v = wp->w_leftcol; --- 751,757 ---- // Highlight 'cursorcolumn' & 'colorcolumn' past end of the line. if (wp->w_p_wrap) ! v = wlv->startrow == 0 ? wp->w_skipcol : 0; else v = wp->w_leftcol; *************** *** 1411,1417 **** // 'nowrap' or 'wrap' and a single line that doesn't fit: Advance to the // first character to be displayed. if (wp->w_p_wrap) ! v = wp->w_skipcol; else v = wp->w_leftcol; if (v > 0 && !number_only) --- 1412,1418 ---- // 'nowrap' or 'wrap' and a single line that doesn't fit: Advance to the // first character to be displayed. if (wp->w_p_wrap) ! v = startrow == 0 ? wp->w_skipcol : 0; else v = wp->w_leftcol; if (v > 0 && !number_only) *************** *** 3219,3227 **** // special character (via 'listchars' option "precedes:". if (lcs_prec_todo != NUL && wp->w_p_list ! && (wp->w_p_wrap ? ! (wp->w_skipcol > 0 && wlv.row == 0) : ! wp->w_leftcol > 0) #ifdef FEAT_DIFF && wlv.filler_todo <= 0 #endif --- 3220,3227 ---- // special character (via 'listchars' option "precedes:". if (lcs_prec_todo != NUL && wp->w_p_list ! && (wp->w_p_wrap ? (wp->w_skipcol > 0 && wlv.row == 0) ! : wp->w_leftcol > 0) #ifdef FEAT_DIFF && wlv.filler_todo <= 0 #endif *** ../vim-9.0.0639/src/move.c 2022-09-24 21:06:35.408199744 +0100 --- src/move.c 2022-10-02 20:48:28.203440999 +0100 *************** *** 36,41 **** --- 36,67 ---- static void botline_forw(lineoff_T *lp); /* + * Reduce "n" for the screen lines skipped with "wp->w_skipcol". + */ + static int + adjust_plines_for_skipcol(win_T *wp, int n) + { + if (wp->w_skipcol == 0) + return n; + + int off = 0; + int width = wp->w_width - win_col_off(wp); + if (wp->w_skipcol >= width) + { + ++off; + int skip = wp->w_skipcol - width; + width -= win_col_off2(wp); + while (skip >= width) + { + ++off; + skip -= width; + } + } + wp->w_valid &= ~VALID_WROW; + return n - off; + } + + /* * Compute wp->w_botline for the current wp->w_topline. Can be called after * wp->w_topline changed. */ *************** *** 78,89 **** --- 104,119 ---- } else #endif + { #ifdef FEAT_DIFF if (lnum == wp->w_topline) n = plines_win_nofill(wp, lnum, TRUE) + wp->w_topfill; else #endif n = plines_win(wp, lnum, TRUE); + if (lnum == wp->w_topline) + n = adjust_plines_for_skipcol(wp, n); + } if ( #ifdef FEAT_FOLDING lnum <= wp->w_cursor.lnum && last >= wp->w_cursor.lnum *************** *** 778,790 **** } else #endif #ifdef FEAT_DIFF if (lnum == wp->w_topline) ! wp->w_cline_row += plines_win_nofill(wp, lnum++, TRUE) ! + wp->w_topfill; else #endif ! wp->w_cline_row += plines_win(wp, lnum++, TRUE); } } --- 808,825 ---- } else #endif + { + int n; #ifdef FEAT_DIFF if (lnum == wp->w_topline) ! n = plines_win_nofill(wp, lnum, TRUE) + wp->w_topfill; else #endif ! n = plines_win(wp, lnum, TRUE); ! if (lnum++ == wp->w_topline) ! n = adjust_plines_for_skipcol(wp, n); ! wp->w_cline_row += n; ! } } } *************** *** 1237,1243 **** else if (extra < 0) win_del_lines(curwin, 0, -extra, FALSE, FALSE, 0); } ! else curwin->w_skipcol = 0; if (prev_skipcol != curwin->w_skipcol) redraw_later(UPD_NOT_VALID); --- 1272,1278 ---- else if (extra < 0) win_del_lines(curwin, 0, -extra, FALSE, FALSE, 0); } ! else if (!curwin->w_p_sms) curwin->w_skipcol = 0; if (prev_skipcol != curwin->w_skipcol) redraw_later(UPD_NOT_VALID); *************** *** 1422,1427 **** --- 1457,1470 ---- long done = 0; // total # of physical lines done int wrow; int moved = FALSE; + int width1 = 0; + int width2 = 0; + + if (curwin->w_p_wrap && curwin->w_p_sms) + { + width1 = curwin->w_width - curwin_col_off(); + width2 = width1 - curwin_col_off2(); + } #ifdef FEAT_FOLDING linenr_T first; *************** *** 1442,1466 **** else #endif { ! if (curwin->w_topline == 1) break; ! --curwin->w_topline; ! #ifdef FEAT_DIFF ! curwin->w_topfill = 0; ! #endif ! #ifdef FEAT_FOLDING ! // A sequence of folded lines only counts for one logical line ! if (hasFolding(curwin->w_topline, &first, NULL)) { ++done; - if (!byfold) - line_count -= curwin->w_topline - first - 1; - curwin->w_botline -= curwin->w_topline - first; - curwin->w_topline = first; } else #endif ! done += PLINES_NOFILL(curwin->w_topline); } --curwin->w_botline; // approximate w_botline invalidate_botline(); --- 1485,1541 ---- else #endif { ! if (curwin->w_topline == 1 && curwin->w_skipcol < width1) break; ! if (curwin->w_p_wrap && curwin->w_p_sms ! && curwin->w_skipcol >= width1) { + if (curwin->w_skipcol >= width1 + width2) + curwin->w_skipcol -= width2; + else + curwin->w_skipcol -= width1; + redraw_later(UPD_NOT_VALID); ++done; } else + { + --curwin->w_topline; + curwin->w_skipcol = 0; + #ifdef FEAT_DIFF + curwin->w_topfill = 0; + #endif + #ifdef FEAT_FOLDING + // A sequence of folded lines only counts for one logical line + if (hasFolding(curwin->w_topline, &first, NULL)) + { + ++done; + if (!byfold) + line_count -= curwin->w_topline - first - 1; + curwin->w_botline -= curwin->w_topline - first; + curwin->w_topline = first; + } + else #endif ! if (curwin->w_p_wrap && curwin->w_p_sms) ! { ! int size = win_linetabsize(curwin, curwin->w_topline, ! ml_get(curwin->w_topline), (colnr_T)MAXCOL); ! if (size > width1) ! { ! curwin->w_skipcol = width1; ! size -= width1; ! redraw_later(UPD_NOT_VALID); ! } ! while (size > width2) ! { ! curwin->w_skipcol += width2; ! size -= width2; ! } ! ++done; ! } ! else ! done += PLINES_NOFILL(curwin->w_topline); ! } } --curwin->w_botline; // approximate w_botline invalidate_botline(); *************** *** 1565,1570 **** --- 1640,1680 ---- } else #endif + if (curwin->w_p_wrap && curwin->w_p_sms) + { + int off1 = curwin_col_off(); + int off2 = off1 + curwin_col_off2(); + int add; + int size = win_linetabsize(curwin, curwin->w_topline, + ml_get(curwin->w_topline), (colnr_T)MAXCOL); + linenr_T prev_topline = curwin->w_topline; + + // 'smoothscroll': increase "w_skipcol" until it goes over the end of + // the line, then advance to the next line. + for (int todo = line_count; todo > 0; --todo) + { + add = curwin->w_width - (curwin->w_skipcol > 0 ? off2 : off1); + curwin->w_skipcol += add; + if (curwin->w_skipcol >= size) + { + if (curwin->w_topline == curbuf->b_ml.ml_line_count) + { + curwin->w_skipcol -= add; + break; + } + ++curwin->w_topline; + ++curwin->w_botline; // approximate w_botline + curwin->w_skipcol = 0; + if (todo > 1) + size = win_linetabsize(curwin, curwin->w_topline, + ml_get(curwin->w_topline), (colnr_T)MAXCOL); + } + } + if (curwin->w_topline == prev_topline) + // need to redraw even though w_topline didn't change + redraw_later(UPD_NOT_VALID); + } + else { curwin->w_topline += line_count; curwin->w_botline += line_count; // approximate w_botline *** ../vim-9.0.0639/src/testdir/test_scroll_opt.vim 2020-08-12 17:43:41.000000000 +0100 --- src/testdir/test_scroll_opt.vim 2022-10-02 21:12:04.864089029 +0100 *************** *** 1,4 **** ! " Test for reset 'scroll' func Test_reset_scroll() let scr = &l:scroll --- 1,7 ---- ! " Test for reset 'scroll' and 'smoothscroll' ! ! source check.vim ! source screendump.vim func Test_reset_scroll() let scr = &l:scroll *************** *** 34,37 **** --- 37,83 ---- quit! endfunc + func Test_smoothscroll_CtrlE_CtrlY() + CheckScreendump + + let lines =<< trim END + vim9script + setline(1, [ + 'line one', + 'word '->repeat(20), + 'line three', + 'long word '->repeat(7), + 'line', + 'line', + 'line', + ]) + set smoothscroll + :5 + END + call writefile(lines, 'XSmoothScroll', 'D') + let buf = RunVimInTerminal('-S XSmoothScroll', #{rows: 12, cols: 40}) + + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_1', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_2', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_3', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_4', {}) + + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_5', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_6', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_7', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_smoothscroll_8', {}) + + call StopVimInTerminal(buf) + endfunc + + + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_1.dump 2022-10-02 21:28:20.104302650 +0100 --- src/testdir/dumps/Test_smoothscroll_1.dump 2022-10-02 21:10:59.857177833 +0100 *************** *** 0 **** --- 1,12 ---- + |w+0&#ffffff0|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @20 + |l|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + >l|i|n|e| @35 + |l|i|n|e| @35 + |l|i|n|e| @35 + |~+0#4040ff13&| @38 + |~| @38 + | +0#0000000&@21|5|,|1| @10|B|o|t| *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_2.dump 2022-10-02 21:28:20.108302633 +0100 --- src/testdir/dumps/Test_smoothscroll_2.dump 2022-10-02 21:11:01.013157358 +0100 *************** *** 0 **** --- 1,12 ---- + |w+0&#ffffff0|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @20 + |l|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + >l|i|n|e| @35 + |l|i|n|e| @35 + |l|i|n|e| @35 + |~+0#4040ff13&| @38 + |~| @38 + |~| @38 + | +0#0000000&@21|5|,|1| @10|B|o|t| *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_3.dump 2022-10-02 21:28:20.112302620 +0100 --- src/testdir/dumps/Test_smoothscroll_3.dump 2022-10-02 21:11:02.169136933 +0100 *************** *** 0 **** --- 1,12 ---- + |w+0&#ffffff0|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @20 + |l|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + >l|i|n|e| @35 + |l|i|n|e| @35 + |l|i|n|e| @35 + |~+0#4040ff13&| @38 + |~| @38 + |~| @38 + |~| @38 + | +0#0000000&@21|5|,|1| @10|B|o|t| *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_4.dump 2022-10-02 21:28:20.116302603 +0100 --- src/testdir/dumps/Test_smoothscroll_4.dump 2022-10-02 21:11:03.325116546 +0100 *************** *** 0 **** --- 1,12 ---- + |l+0&#ffffff0|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + |l|i|n|e| @35 + |l|i|n|e| @35 + >l|i|n|e| @35 + |~+0#4040ff13&| @38 + |~| @38 + |~| @38 + |~| @38 + |~| @38 + | +0#0000000&@21|7|,|1| @10|B|o|t| *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_5.dump 2022-10-02 21:28:20.120302590 +0100 --- src/testdir/dumps/Test_smoothscroll_5.dump 2022-10-02 21:11:04.477096269 +0100 *************** *** 0 **** --- 1,12 ---- + |w+0&#ffffff0|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @20 + |l|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + |l|i|n|e| @35 + |l|i|n|e| @35 + >l|i|n|e| @35 + |~+0#4040ff13&| @38 + |~| @38 + |~| @38 + |~| @38 + | +0#0000000&@21|7|,|1| @10|B|o|t| *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_6.dump 2022-10-02 21:28:20.124302573 +0100 --- src/testdir/dumps/Test_smoothscroll_6.dump 2022-10-02 21:11:05.629076032 +0100 *************** *** 0 **** --- 1,12 ---- + |w+0&#ffffff0|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @20 + |l|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + |l|i|n|e| @35 + |l|i|n|e| @35 + >l|i|n|e| @35 + |~+0#4040ff13&| @38 + |~| @38 + |~| @38 + | +0#0000000&@21|7|,|1| @10|B|o|t| *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_7.dump 2022-10-02 21:28:20.128302560 +0100 --- src/testdir/dumps/Test_smoothscroll_7.dump 2022-10-02 21:11:06.785055767 +0100 *************** *** 0 **** --- 1,12 ---- + |w+0&#ffffff0|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @20 + |l|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + |l|i|n|e| @35 + |l|i|n|e| @35 + >l|i|n|e| @35 + |~+0#4040ff13&| @38 + |~| @38 + | +0#0000000&@21|7|,|1| @10|B|o|t| *** ../vim-9.0.0639/src/testdir/dumps/Test_smoothscroll_8.dump 2022-10-02 21:28:20.132302543 +0100 --- src/testdir/dumps/Test_smoothscroll_8.dump 2022-10-02 21:11:07.937035610 +0100 *************** *** 0 **** --- 1,12 ---- + |l+0&#ffffff0|i|n|e| |o|n|e| @31 + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| + |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @20 + |l|i|n|e| |t|h|r|e@1| @29 + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| + |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @10 + |l|i|n|e| @35 + |l|i|n|e| @35 + >l|i|n|e| @35 + |~+0#4040ff13&| @38 + | +0#0000000&@21|7|,|1| @10|A|l@1| *** ../vim-9.0.0639/src/version.c 2022-10-02 15:18:30.541075996 +0100 --- src/version.c 2022-10-02 21:16:56.156462131 +0100 *************** *** 701,702 **** --- 701,704 ---- { /* Add new patch number below this line */ + /**/ + 640, /**/ -- hundred-and-one symptoms of being an internet addict: 245. You use Real Audio to listen to a radio station from a distant city rather than turn on your stereo system. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///