Patch 8.1.0168
Problem: Output of :marks is too short with multi-byte chars. (Tony
Mechelynck)
Solution: Get more bytes from the text line.
Files: src/mark.c, src/testdir/test_marks.vim
*** ../vim-8.1.0167/src/mark.c Tue Feb 13 13:31:39 2018
--- src/mark.c Sun Jul 8 17:51:23 2018
***************
*** 686,695 ****
if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count)
return vim_strsave((char_u *)"-invalid-");
! s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns);
if (s == NULL)
return NULL;
! /* Truncate the line to fit it in the window */
len = 0;
for (p = s; *p != NUL; MB_PTR_ADV(p))
{
--- 686,696 ----
if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count)
return vim_strsave((char_u *)"-invalid-");
! // Allow for up to 5 bytes per character.
! s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns * 5);
if (s == NULL)
return NULL;
! // Truncate the line to fit it in the window.
len = 0;
for (p = s; *p != NUL; MB_PTR_ADV(p))
{
*** ../vim-8.1.0167/src/testdir/test_marks.vim Sun Oct 8 21:36:50 2017
--- src/testdir/test_marks.vim Sun Jul 8 17:50:33 2018
***************
*** 80,86 ****
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])
--- 80,86 ----
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])
***************
*** 93,99 ****
call assert_equal(' . 2 0 bbb', a[8])
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])
--- 93,99 ----
call assert_equal(' . 2 0 bbb', a[8])
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])
***************
*** 107,113 ****
b Xone
delmarks aB
! let a=split(execute('marks aBcD'), "\n")
call assert_equal(2, len(a))
call assert_equal('mark line col file/text', a[0])
call assert_equal(' D 2 0 Xtwo', a[1])
--- 107,113 ----
b Xone
delmarks aB
! let a = split(execute('marks aBcD'), "\n")
call assert_equal(2, len(a))
call assert_equal('mark line col file/text', a[0])
call assert_equal(' D 2 0 Xtwo', a[1])
***************
*** 120,122 ****
--- 120,141 ----
call delete('Xtwo')
%bwipe
endfunc
+
+ func Test_marks_cmd_multibyte()
+ if !has('multi_byte')
+ return
+ endif
+ new Xone
+ call setline(1,
['ááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá'])
+ norm! ma
+
+ let a = split(execute('marks a'), "\n")
+ call assert_equal(2, len(a))
+ let expected = ' a 1 0 '
+ while strwidth(expected) < &columns - 1
+ let expected .= 'á'
+ endwhile
+ call assert_equal(expected, a[1])
+
+ bwipe!
+ endfunc
*** ../vim-8.1.0167/src/version.c Sun Jul 8 17:18:58 2018
--- src/version.c Sun Jul 8 17:51:37 2018
***************
*** 791,792 ****
--- 791,794 ----
{ /* Add new patch number below this line */
+ /**/
+ 168,
/**/
--
Your mouse has moved. Windows must be restarted for the change
to take effect. Reboot now?
/// Bram Moolenaar -- [email protected] -- 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 ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.