# HG changeset patch # User Bram Moolenaar # Date 1660396503 -7200 # Node ID c8c128b0eddc2de346c033452c233b08535fa417 # Parent fc2ac16420296bf12c72304c651fdf9bfe69d16e patch 9.0.0198: ml_get error when switching buffer in Visual mode Commit: https://github.com/vim/vim/commit/cfeb8a584be11758cf71ae02f6c937b06d6bb66f Author: Bram Moolenaar Date: Sat Aug 13 14:09:44 2022 +0100 patch 9.0.0198: ml_get error when switching buffer in Visual mode Problem: ml_get error when switching buffer in Visual mode. Solution: End Visual mode when switching buffer. (closes https://github.com/vim/vim/issues/10902) diff --git a/src/buffer.c b/src/buffer.c --- a/src/buffer.c +++ b/src/buffer.c @@ -1818,6 +1818,14 @@ set_curbuf(buf_T *buf, int action) static void enter_buffer(buf_T *buf) { + // when closing the current buffer stop Visual mode + if (VIsual_active +#if defined(EXITFREE) + && !entered_free_all_mem +#endif + ) + end_visual_mode(); + // Get the buffer in the current window. curwin->w_buffer = buf; curbuf = buf; diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim --- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -1481,5 +1481,25 @@ func Test_visual_area_adjusted_when_hidi bwipe! endfunc +func Test_switch_buffer_ends_visual_mode() + enew + call setline(1, 'foo') + set hidden + set virtualedit=all + let buf1 = bufnr() + enew + let buf2 = bufnr() + call setline(1, ['', '', '', '']) + call cursor(4, 5) + call feedkeys("\3k4h", 'xt') + exe 'buffer' buf1 + call assert_equal('n', mode()) + + set nohidden + set virtualedit= + bwipe! + exe 'bwipe!' buf2 +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 198, +/**/ 197, /**/ 196,