changeset 29511:3778f9415b92 v9.0.0097

patch 9.0.0097: long quickfix line is truncated for :clist Commit: https://github.com/vim/vim/commit/5f30e26f6946f0d0396499f91fbcfaa9d1f8acf7 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 28 11:56:01 2022 +0100 patch 9.0.0097: long quickfix line is truncated for :clist Problem: Long quickfix line is truncated for :clist. Solution: Allocate a buffer if needed.
author Bram Moolenaar <Bram@vim.org>
date Thu, 28 Jul 2022 13:00:08 +0200
parents 0acbd5c55267
children 2f9709d835ac
files src/quickfix.c src/testdir/test_quickfix.vim src/version.c
diffstat 3 files changed, 35 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -3622,13 +3622,31 @@ qf_list_entry(qfline_T *qfp, int qf_idx,
     }
     msg_puts(" ");
 
-    // Remove newlines and leading whitespace from the text.  For an
-    // unrecognized line keep the indent, the compiler may mark a word
-    // with ^^^^.
-    qf_fmt_text((fname != NULL || qfp->qf_lnum != 0)
-				? skipwhite(qfp->qf_text) : qfp->qf_text,
-				IObuff, IOSIZE);
-    msg_prt_line(IObuff, FALSE);
+    {
+	char_u *tbuf = IObuff;
+	size_t	tbuflen = IOSIZE;
+	size_t	len = STRLEN(qfp->qf_text) + 3;
+
+	if (len > IOSIZE)
+	{
+	    tbuf = alloc(len);
+	    if (tbuf != NULL)
+		tbuflen = len;
+	    else
+		tbuf = IObuff;
+	}
+
+	// Remove newlines and leading whitespace from the text.  For an
+	// unrecognized line keep the indent, the compiler may mark a word
+	// with ^^^^.
+	qf_fmt_text((fname != NULL || qfp->qf_lnum != 0)
+				    ? skipwhite(qfp->qf_text) : qfp->qf_text,
+				    tbuf, tbuflen);
+	msg_prt_line(tbuf, FALSE);
+
+	if (tbuf != IObuff)
+	    vim_free(tbuf);
+    }
     out_flush();		// show one line at a time
 }
 
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -185,6 +185,14 @@ func XlistTests(cchar)
 	\ ' 2 Data.Text:20 col 10 warning  22: ModuleWarning',
 	\ ' 3 Data/Text.hs:30 col 15 warning  33: FileWarning'], l)
 
+  " Very long line should be displayed.
+  let text = 'Line' .. repeat('1234567890', 130)
+  let lines = ['Xtestfile9:2:9:' .. text]
+  Xgetexpr lines
+
+  let l = split(execute('Xlist', ''), "\n")
+  call assert_equal([' 1 Xtestfile9:2 col 9: ' .. text] , l)
+
   " For help entries in the quickfix list, only the filename without directory
   " should be displayed
   Xhelpgrep setqflist()
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    97,
+/**/
     96,
 /**/
     95,