# HG changeset patch # User Bram Moolenaar # Date 1686161704 -7200 # Node ID cb1af9880f6dc76504dc3d676b3d05e8c2abb5ec # Parent 0e60e37253005a433560dfde2da34e84cf3508da patch 9.0.1616: quickfix text field is truncated Commit: https://github.com/vim/vim/commit/5bf042810b19a627eda2f170624a0cfd7b4f6ed6 Author: Shane Harper Date: Wed Jun 7 19:09:57 2023 +0100 patch 9.0.1616: quickfix text field is truncated Problem: Quickfix text field is truncated. Solution: Fix output of text field after pattern field in quickfix buffer. (Shane Harper, closes #12498) diff --git a/src/quickfix.c b/src/quickfix.c --- a/src/quickfix.c +++ b/src/quickfix.c @@ -3340,6 +3340,7 @@ qf_jump_print_msg( // Add the message, skipping leading whitespace and newlines. ga_concat(gap, IObuff); qf_fmt_text(gap, skipwhite(qf_ptr->qf_text)); + ga_append(gap, NUL); // Output the message. Overwrite to avoid scrolling when the 'O' // flag is present in 'shortmess'; But when not jumping, print the @@ -3660,9 +3661,7 @@ qf_list_entry(qfline_T *qfp, int qf_idx, if (qfp->qf_lnum != 0) msg_puts_attr(":", qfSepAttr); gap = qfga_get(); - if (qfp->qf_lnum == 0) - ga_append(gap, NUL); - else + if (qfp->qf_lnum != 0) qf_range_text(gap, qfp); ga_concat(gap, qf_types(qfp->qf_type, qfp->qf_nr)); ga_append(gap, NUL); @@ -3672,6 +3671,7 @@ qf_list_entry(qfline_T *qfp, int qf_idx, { gap = qfga_get(); qf_fmt_text(gap, qfp->qf_pattern); + ga_append(gap, NUL); msg_puts((char *)gap->ga_data); msg_puts_attr(":", qfSepAttr); } @@ -3682,7 +3682,8 @@ qf_list_entry(qfline_T *qfp, int qf_idx, // with ^^^^. gap = qfga_get(); qf_fmt_text(gap, (fname != NULL || qfp->qf_lnum != 0) - ? skipwhite(qfp->qf_text) : qfp->qf_text); + ? skipwhite(qfp->qf_text) : qfp->qf_text); + ga_append(gap, NUL); msg_prt_line((char_u *)gap->ga_data, FALSE); out_flush(); // show one line at a time } @@ -3774,7 +3775,6 @@ qf_list(exarg_T *eap) qf_fmt_text(garray_T *gap, char_u *text) { char_u *p = text; - while (*p != NUL) { if (*p == '\n') @@ -3787,8 +3787,6 @@ qf_fmt_text(garray_T *gap, char_u *text) else ga_append(gap, *p++); } - - ga_append(gap, NUL); } /* @@ -3807,8 +3805,8 @@ qf_range_text(garray_T *gap, qfline_T *q if (qfp->qf_end_lnum > 0 && qfp->qf_lnum != qfp->qf_end_lnum) { - vim_snprintf((char *)buf + len, bufsize - len, - "-%ld", qfp->qf_end_lnum); + vim_snprintf((char *)buf + len, bufsize - len, "-%ld", + qfp->qf_end_lnum); len += (int)STRLEN(buf + len); } if (qfp->qf_col > 0) @@ -3817,12 +3815,11 @@ qf_range_text(garray_T *gap, qfline_T *q len += (int)STRLEN(buf + len); if (qfp->qf_end_col > 0 && qfp->qf_col != qfp->qf_end_col) { - vim_snprintf((char *)buf + len, bufsize - len, - "-%d", qfp->qf_end_col); + vim_snprintf((char *)buf + len, bufsize - len, "-%d", + qfp->qf_end_col); len += (int)STRLEN(buf + len); } } - buf[len] = NUL; ga_concat_len(gap, buf, len); } @@ -4659,7 +4656,6 @@ qf_buf_add_line( if (qftf_str != NULL && *qftf_str != NUL) { ga_concat(gap, qftf_str); - ga_append(gap, NUL); } else { @@ -4706,6 +4702,7 @@ qf_buf_add_line( : qfp->qf_text); } + ga_append(gap, NUL); if (ml_append_buf(buf, lnum, gap->ga_data, gap->ga_len, FALSE) == FAIL) return FAIL; diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -167,13 +167,15 @@ func XlistTests(cchar) \ {'lnum':20,'col':10,'type':'e','text':'Error','nr':22}, \ {'lnum':30,'col':15,'type':'i','text':'Info','nr':33}, \ {'lnum':40,'col':20,'type':'x', 'text':'Other','nr':44}, - \ {'lnum':50,'col':25,'type':"\",'text':'one','nr':55}]) + \ {'lnum':50,'col':25,'type':"\",'text':'one','nr':55}, + \ {'lnum':0,'type':'e','text':'Check type field is output even when lnum==0. ("error" was not output by v9.0.0736.)','nr':66}]) let l = split(execute('Xlist', ""), "\n") call assert_equal([' 1:10 col 5 warning 11: Warning', \ ' 2:20 col 10 error 22: Error', \ ' 3:30 col 15 info 33: Info', \ ' 4:40 col 20 x 44: Other', - \ ' 5:50 col 25 55: one'], l) + \ ' 5:50 col 25 55: one', + \ ' 6 error 66: Check type field is output even when lnum==0. ("error" was not output by v9.0.0736.)'], l) " Test for module names, one needs to explicitly set `'valid':v:true` so call g:Xsetlist([ @@ -6428,4 +6430,11 @@ func Test_setqflist_stopinsert() bwipe! endfunc +func Test_quickfix_buffer_contents() + call setqflist([{'filename':'filename', 'pattern':'pattern', 'text':'text'}]) + copen + call assert_equal(['filename|pattern| text'], getline(1, '$')) " The assert failed with Vim v9.0.0736; '| text' did not appear after the pattern. + call setqflist([], 'f') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1616, +/**/ 1615, /**/ 1614,