diff options
Diffstat (limited to 'data/vim/patches/8.1.1205')
-rw-r--r-- | data/vim/patches/8.1.1205 | 209 |
1 files changed, 0 insertions, 209 deletions
diff --git a/data/vim/patches/8.1.1205 b/data/vim/patches/8.1.1205 deleted file mode 100644 index 4f686c635..000000000 --- a/data/vim/patches/8.1.1205 +++ /dev/null @@ -1,209 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.1205 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.1205 -Problem: A BufReadPre autocommand may cause the cursor to move. -Solution: Restore the cursor position after executing the autocommand, - unless the autocommand moved it. (Christian Brabandt, - closes #4302, closes #4294) -Files: src/autocmd.c, src/proto/window.pro, src/structs.h, - src/testdir/test_autocmd.vim, src/window.c - - -*** ../vim-8.1.1204/src/autocmd.c 2019-04-08 18:15:36.464223229 +0200 ---- src/autocmd.c 2019-04-25 22:07:17.467246898 +0200 -*************** -*** 2123,2131 **** - for (ap = patcmd.curpat; ap->next != NULL; ap = ap->next) - ap->last = FALSE; - ap->last = TRUE; -! check_lnums(TRUE); // make sure cursor and topline are valid - do_cmdline(NULL, getnextac, (void *)&patcmd, - DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); - #ifdef FEAT_EVAL - if (eap != NULL) - { ---- 2123,2138 ---- - for (ap = patcmd.curpat; ap->next != NULL; ap = ap->next) - ap->last = FALSE; - ap->last = TRUE; -! -! // make sure cursor and topline are valid -! check_lnums(TRUE); -! - do_cmdline(NULL, getnextac, (void *)&patcmd, - DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); -+ -+ // restore cursor and topline, unless they were changed -+ reset_lnums(); -+ - #ifdef FEAT_EVAL - if (eap != NULL) - { -*** ../vim-8.1.1204/src/proto/window.pro 2019-04-17 18:24:32.010143188 +0200 ---- src/proto/window.pro 2019-04-25 22:07:22.791243667 +0200 -*************** -*** 70,75 **** ---- 70,76 ---- - int min_rows(void); - int only_one_window(void); - void check_lnums(int do_curwin); -+ void reset_lnums(void); - void make_snapshot(int idx); - void restore_snapshot(int idx, int close_curwin); - int switch_win(win_T **save_curwin, tabpage_T **save_curtab, win_T *win, tabpage_T *tp, int no_display); -*** ../vim-8.1.1204/src/structs.h 2019-04-04 18:15:05.770857065 +0200 ---- src/structs.h 2019-04-25 22:11:22.790777615 +0200 -*************** -*** 2715,2720 **** ---- 2715,2730 ---- - #endif - }; - -+ // Structure to store last cursor position and topline. Used by check_lnums() -+ // and reset_lnums(). -+ typedef struct -+ { -+ int w_topline_save; // original topline value -+ int w_topline_corr; // corrected topline value -+ pos_T w_cursor_save; // original cursor position -+ pos_T w_cursor_corr; // corrected cursor position -+ } pos_save_T; -+ - #ifdef FEAT_MENU - typedef struct { - int wb_startcol; -*************** -*** 2803,2808 **** ---- 2813,2820 ---- - int w_wincol; /* Leftmost column of window in screen. */ - int w_width; /* Width of window, excluding separation. */ - int w_vsep_width; /* Number of separator columns (0 or 1). */ -+ pos_save_T w_save_cursor; /* backup of cursor pos and topline */ -+ - - /* - * === start of cached values ==== -*** ../vim-8.1.1204/src/testdir/test_autocmd.vim 2019-04-25 20:28:53.327979592 +0200 ---- src/testdir/test_autocmd.vim 2019-04-25 22:17:58.565083976 +0200 -*************** -*** 1485,1490 **** ---- 1485,1535 ---- - call assert_fails('au WinNew * ++once ++once echo bad', 'E983:') - endfunc - -+ func Test_autocmd_bufreadpre() -+ new -+ let b:bufreadpre = 1 -+ call append(0, range(100)) -+ w! XAutocmdBufReadPre.txt -+ autocmd BufReadPre <buffer> :let b:bufreadpre += 1 -+ norm! 50gg -+ sp -+ norm! 100gg -+ wincmd p -+ let g:wsv1 = winsaveview() -+ wincmd p -+ let g:wsv2 = winsaveview() -+ " triggers BufReadPre, should not move the cursor in either window -+ " The topline may change one line in a large window. -+ edit -+ call assert_inrange(g:wsv2.topline - 1, g:wsv2.topline + 1, winsaveview().topline) -+ call assert_equal(g:wsv2.lnum, winsaveview().lnum) -+ call assert_equal(2, b:bufreadpre) -+ wincmd p -+ call assert_equal(g:wsv1.topline, winsaveview().topline) -+ call assert_equal(g:wsv1.lnum, winsaveview().lnum) -+ call assert_equal(2, b:bufreadpre) -+ " Now set the cursor position in an BufReadPre autocommand -+ " (even though the position will be invalid, this should make Vim reset the -+ " cursor position in the other window. -+ wincmd p -+ set cpo+=g -+ " won't do anything, but try to set the cursor on an invalid lnum -+ autocmd BufReadPre <buffer> :norm! 70gg -+ " triggers BufReadPre, should not move the cursor in either window -+ e -+ call assert_equal(1, winsaveview().topline) -+ call assert_equal(1, winsaveview().lnum) -+ call assert_equal(3, b:bufreadpre) -+ wincmd p -+ call assert_equal(g:wsv1.topline, winsaveview().topline) -+ call assert_equal(g:wsv1.lnum, winsaveview().lnum) -+ call assert_equal(3, b:bufreadpre) -+ close -+ close -+ call delete('XAutocmdBufReadPre.txt') -+ set cpo-=g -+ endfunc -+ - " FileChangedShell tested in test_filechanged.vim - - " Tests for the following autocommands: -*** ../vim-8.1.1204/src/window.c 2019-04-17 18:24:32.010143188 +0200 ---- src/window.c 2019-04-25 22:20:04.956396595 +0200 -*************** -*** 6196,6205 **** ---- 6196,6234 ---- - FOR_ALL_TAB_WINDOWS(tp, wp) - if ((do_curwin || wp != curwin) && wp->w_buffer == curbuf) - { -+ // save the original cursor position and topline -+ wp->w_save_cursor.w_cursor_save = wp->w_cursor; -+ wp->w_save_cursor.w_topline_save = wp->w_topline; -+ - if (wp->w_cursor.lnum > curbuf->b_ml.ml_line_count) - wp->w_cursor.lnum = curbuf->b_ml.ml_line_count; - if (wp->w_topline > curbuf->b_ml.ml_line_count) - wp->w_topline = curbuf->b_ml.ml_line_count; -+ -+ // save the corrected cursor position and topline -+ wp->w_save_cursor.w_cursor_corr = wp->w_cursor; -+ wp->w_save_cursor.w_topline_corr = wp->w_topline; -+ } -+ } -+ -+ /* -+ * Reset cursor and topline to its stored values from check_lnums(). -+ * check_lnums() must have been called first! -+ */ -+ void -+ reset_lnums() -+ { -+ win_T *wp; -+ tabpage_T *tp; -+ -+ FOR_ALL_TAB_WINDOWS(tp, wp) -+ if (wp->w_buffer == curbuf) -+ { -+ // Restore the value if the autocommand didn't change it. -+ if (EQUAL_POS(wp->w_save_cursor.w_cursor_corr, wp->w_cursor)) -+ wp->w_cursor = wp->w_save_cursor.w_cursor_save; -+ if (wp->w_save_cursor.w_topline_corr == wp->w_topline) -+ wp->w_topline = wp->w_save_cursor.w_topline_save; - } - } - -*** ../vim-8.1.1204/src/version.c 2019-04-25 21:27:40.566186854 +0200 ---- src/version.c 2019-04-25 22:05:46.695243258 +0200 -*************** -*** 773,774 **** ---- 773,776 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 1205, - /**/ - --- -Nothing is impossible for the man who doesn't have to do it. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |