0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 9.1.0938: exclusive selection not respected when re-selecting block mode

Problem:  exclusive selection not respected when re-selecting block mode
          (Matt Ellis)
Solution: advance selection by another character when using
          selection=exclusive and visual block mode

fixes: #16202
closes: #16219

Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt
2024-12-16 22:49:15 +01:00
parent 381ff7726e
commit bb95589473
3 changed files with 50 additions and 0 deletions

View File

@@ -5518,6 +5518,8 @@ nv_visual(cmdarg_T *cap)
update_curswant_force(); update_curswant_force();
curwin->w_curswant += resel_VIsual_vcol * cap->count0 - 1; curwin->w_curswant += resel_VIsual_vcol * cap->count0 - 1;
curwin->w_cursor.lnum = lnum; curwin->w_cursor.lnum = lnum;
if (*p_sel == 'e')
++curwin->w_curswant;
coladvance(curwin->w_curswant); coladvance(curwin->w_curswant);
} }
else else

View File

@@ -2714,4 +2714,50 @@ func Test_visual_block_cursor_insert_enter()
bwipe! bwipe!
endfunc endfunc
func Test_visual_block_exclusive_selection()
new
set selection=exclusive
call setline(1, ['asöd asdf', 'asdf asdf', 'as€d asdf', 'asdf asdf'])
call cursor(1, 1)
exe ":norm! \<c-v>eh3j~"
call assert_equal(['ASÖd asdf', 'ASDf asdf', 'AS€d asdf', 'ASDf asdf'], getline(1, '$'))
exe ":norm! 1v~"
call assert_equal(['asöd asdf', 'asdf asdf', 'as€d asdf', 'asdf asdf'], getline(1, '$'))
bwipe!
set selection&vim
endfunc
func Test_visual_block_exclusive_selection_adjusted()
new
" Test that the end-position of the visual selection is adjusted for exclusive selection
set selection=exclusive
call setline(1, ['asöd asdf ', 'asdf asdf ', 'as€d asdf ', 'asdf asdf '])
call cursor(1, 1)
" inclusive motion
exe ":norm! \<c-v>e3jy"
call assert_equal([0, 4, 5, 0], getpos("'>"))
" exclusive motion
exe ":norm! \<c-v>ta3jy"
call assert_equal([0, 4, 6, 0], getpos("'>"))
" another inclusive motion
exe ":norm! \<c-v>g_3jy"
call assert_equal([0, 4, 10, 0], getpos("'>"))
" Reset selection option to Vim default
set selection&vim
call cursor(1, 1)
" inclusive motion
exe ":norm! \<c-v>e3jy"
call assert_equal([0, 4, 4, 0], getpos("'>"))
" exclusive motion
exe ":norm! \<c-v>ta3jy"
call assert_equal([0, 4, 5, 0], getpos("'>"))
" another inclusive motion
exe ":norm! \<c-v>g_3jy"
call assert_equal([0, 4, 9, 0], getpos("'>"))
bwipe!
set selection&vim
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
938,
/**/ /**/
937, 937,
/**/ /**/