Patch 8.1.0859
Problem: "%v" in 'errorformat' does handle multi-byte characters.
Solution: Handle multi-byte characters. (Yegappan Lakshmanan, closes #3700)
Files: src/quickfix.c, src/testdir/test_quickfix.vim
*** ../vim-8.1.0858/src/quickfix.c 2019-01-26 17:43:16.226527267 +0100
--- src/quickfix.c 2019-01-31 14:24:27.575216468 +0100
***************
*** 3047,3055 ****
char_u *qf_pattern)
{
linenr_T i;
- char_u *line;
- colnr_T screen_col;
- colnr_T char_col;
if (qf_pattern == NULL)
{
--- 3047,3052 ----
***************
*** 3063,3091 ****
}
if (qf_col > 0)
{
- curwin->w_cursor.col = qf_col - 1;
curwin->w_cursor.coladd = 0;
if (qf_viscol == TRUE)
! {
! // Check each character from the beginning of the error
! // line up to the error column. For each tab character
! // found, reduce the error column value by the length of
! // a tab character.
! line = ml_get_curline();
! screen_col = 0;
! for (char_col = 0; char_col < curwin->w_cursor.col; ++char_col)
! {
! if (*line == NUL)
! break;
! if (*line++ == '\t')
! {
! curwin->w_cursor.col -= 7 - (screen_col % 8);
! screen_col += 8 - (screen_col % 8);
! }
! else
! ++screen_col;
! }
! }
curwin->w_set_curswant = TRUE;
check_cursor();
}
--- 3060,3070 ----
}
if (qf_col > 0)
{
curwin->w_cursor.coladd = 0;
if (qf_viscol == TRUE)
! coladvance(qf_col - 1);
! else
! curwin->w_cursor.col = qf_col - 1;
curwin->w_set_curswant = TRUE;
check_cursor();
}
*** ../vim-8.1.0858/src/testdir/test_quickfix.vim 2019-01-11
14:49:25.380107431 +0100
--- src/testdir/test_quickfix.vim 2019-01-31 14:26:43.042269859 +0100
***************
*** 3843,3845 ****
--- 3843,3901 ----
call delete('Xtestfile1')
call delete('Xtestfile2')
endfunc
+
+ " Test for parsing entries using visual screen column
+ func Test_viscol()
+ enew
+ call writefile(["Col1\tCol2\tCol3"], 'Xfile1')
+ edit Xfile1
+
+ " Use byte offset for column number
+ set efm&
+ cexpr "Xfile1:1:5:XX\nXfile1:1:9:YY\nXfile1:1:20:ZZ"
+ call assert_equal([5, 8], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([9, 12], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([14, 20], [col('.'), virtcol('.')])
+
+ " Use screen column offset for column number
+ set efm=%f:%l:%v:%m
+ cexpr "Xfile1:1:8:XX\nXfile1:1:12:YY\nXfile1:1:20:ZZ"
+ call assert_equal([5, 8], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([9, 12], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([14, 20], [col('.'), virtcol('.')])
+ cexpr "Xfile1:1:6:XX\nXfile1:1:15:YY\nXfile1:1:24:ZZ"
+ call assert_equal([5, 8], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([10, 16], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([14, 20], [col('.'), virtcol('.')])
+
+ enew
+ call writefile(["Col1\täü\töß\tCol4"], 'Xfile1')
+
+ " Use byte offset for column number
+ set efm&
+ cexpr "Xfile1:1:8:XX\nXfile1:1:11:YY\nXfile1:1:16:ZZ"
+ call assert_equal([8, 10], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([11, 17], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([16, 25], [col('.'), virtcol('.')])
+
+ " Use screen column offset for column number
+ set efm=%f:%l:%v:%m
+ cexpr "Xfile1:1:10:XX\nXfile1:1:17:YY\nXfile1:1:25:ZZ"
+ call assert_equal([8, 10], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([11, 17], [col('.'), virtcol('.')])
+ cnext
+ call assert_equal([16, 25], [col('.'), virtcol('.')])
+
+ enew | only
+ set efm&
+ call delete('Xfile1')
+ endfunc
*** ../vim-8.1.0858/src/version.c 2019-01-31 14:12:52.760076333 +0100
--- src/version.c 2019-01-31 14:22:32.848018305 +0100
***************
*** 785,786 ****
--- 785,788 ----
{ /* Add new patch number below this line */
+ /**/
+ 859,
/**/
--
There are 10 kinds of people: Those who understand binary and those who don't.
/// 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.