0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.2.1252: ":marks" may show '< and '> mixed up

Problem:    ":marks" may show '< and '> mixed up.
Solution:   Show the mark position as where '< and '> would jump.
This commit is contained in:
Bram Moolenaar
2020-07-19 22:09:06 +02:00
parent 682d0a1546
commit 54c3fcd852
3 changed files with 43 additions and 21 deletions

View File

@@ -704,6 +704,7 @@ ex_marks(exarg_T *eap)
char_u *arg = eap->arg;
int i;
char_u *name;
pos_T *posp, *startp, *endp;
if (arg != NULL && *arg == NUL)
arg = NULL;
@@ -731,8 +732,17 @@ ex_marks(exarg_T *eap)
show_one_mark(']', arg, &curbuf->b_op_end, NULL, TRUE);
show_one_mark('^', arg, &curbuf->b_last_insert, NULL, TRUE);
show_one_mark('.', arg, &curbuf->b_last_change, NULL, TRUE);
show_one_mark('<', arg, &curbuf->b_visual.vi_start, NULL, TRUE);
show_one_mark('>', arg, &curbuf->b_visual.vi_end, NULL, TRUE);
// Show the marks as where they will jump to.
startp = &curbuf->b_visual.vi_start;
endp = &curbuf->b_visual.vi_end;
if ((LT_POS(*startp, *endp) || endp->lnum == 0) && startp->lnum != 0)
posp = startp;
else
posp = endp;
show_one_mark('<', arg, posp, NULL, TRUE);
show_one_mark('>', arg, posp == startp ? endp : startp, NULL, TRUE);
show_one_mark(-1, arg, NULL, NULL, FALSE);
}

View File

@@ -105,33 +105,43 @@ func Test_marks_cmd()
new Xtwo
call setline(1, ['ccc', 'ddd'])
norm! $mcGmD
exe "norm! GVgg\<Esc>G"
w!
b Xone
let a = split(execute('marks'), "\n")
call assert_equal(9, len(a))
call assert_equal('mark line col file/text', a[0])
call assert_equal(" ' 2 0 bbb", a[1])
call assert_equal(' a 1 0 aaa', a[2])
call assert_equal(' B 2 2 bbb', a[3])
call assert_equal(' D 2 0 Xtwo', a[4])
call assert_equal(' " 1 0 aaa', a[5])
call assert_equal(' [ 1 0 aaa', a[6])
call assert_equal(' ] 2 0 bbb', a[7])
call assert_equal(' . 2 0 bbb', a[8])
call assert_equal(['mark line col file/text',
\ " ' 2 0 bbb",
\ ' a 1 0 aaa',
\ ' B 2 2 bbb',
\ ' D 2 0 Xtwo',
\ ' " 1 0 aaa',
\ ' [ 1 0 aaa',
\ ' ] 2 0 bbb',
\ ' . 2 0 bbb'], a)
b Xtwo
let a = split(execute('marks'), "\n")
call assert_equal(9, len(a))
call assert_equal('mark line col file/text', a[0])
call assert_equal(" ' 1 0 ccc", a[1])
call assert_equal(' c 1 2 ccc', a[2])
call assert_equal(' B 2 2 Xone', a[3])
call assert_equal(' D 2 0 ddd', a[4])
call assert_equal(' " 2 0 ddd', a[5])
call assert_equal(' [ 1 0 ccc', a[6])
call assert_equal(' ] 2 0 ddd', a[7])
call assert_equal(' . 2 0 ddd', a[8])
call assert_equal(11, len(a))
call assert_equal(['mark line col file/text',
\ " ' 1 0 ccc",
\ ' c 1 2 ccc',
\ ' B 2 2 Xone',
\ ' D 2 0 ddd',
\ ' " 2 0 ddd',
\ ' [ 1 0 ccc',
\ ' ] 2 0 ddd',
\ ' . 2 0 ddd',
\ ' < 1 0 ccc',
\ ' > 2 0 ddd'], a)
norm! Gdd
w!
let a = split(execute('marks <>'), "\n")
call assert_equal(3, len(a))
call assert_equal(['mark line col file/text',
\ ' < 1 0 ccc',
\ ' > 2 0 -invalid-'], a)
b Xone
delmarks aB

View File

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