From cfeb8a584be11758cf71ae02f6c937b06d6bb66f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 13 Aug 2022 14:09:44 +0100 Subject: [PATCH] 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 #10902) --- src/buffer.c | 8 ++++++++ src/testdir/test_visual.vim | 20 ++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 30 insertions(+) diff --git a/src/buffer.c b/src/buffer.c index 108d59676..669cfa9a9 100644 --- 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 index e96526654..cde70bd1c 100644 --- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -1481,5 +1481,25 @@ func Test_visual_area_adjusted_when_hiding() 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 index 08dc889a9..3f4c7edb8 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 198, /**/ 197, /**/ -- 2.40.0