To: vim_dev@googlegroups.com Subject: Patch 9.0.1616 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.1616 Problem: Quickfix text field is truncated. Solution: Fix output of text field after pattern field in quickfix buffer. (Shane Harper, closes #12498) Files: src/quickfix.c, src/testdir/test_quickfix.vim *** ../vim-9.0.1615/src/quickfix.c 2023-04-29 21:38:00.563105306 +0100 --- src/quickfix.c 2023-06-07 19:05:54.740539789 +0100 *************** *** 3340,3345 **** --- 3340,3346 ---- // 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,3668 **** if (qfp->qf_lnum != 0) msg_puts_attr(":", qfSepAttr); gap = qfga_get(); ! if (qfp->qf_lnum == 0) ! ga_append(gap, NUL); ! else qf_range_text(gap, qfp); ga_concat(gap, qf_types(qfp->qf_type, qfp->qf_nr)); ga_append(gap, NUL); --- 3661,3667 ---- if (qfp->qf_lnum != 0) msg_puts_attr(":", qfSepAttr); gap = qfga_get(); ! 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,3677 **** --- 3671,3677 ---- { 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,3688 **** // with ^^^^. gap = qfga_get(); qf_fmt_text(gap, (fname != NULL || qfp->qf_lnum != 0) ! ? skipwhite(qfp->qf_text) : qfp->qf_text); msg_prt_line((char_u *)gap->ga_data, FALSE); out_flush(); // show one line at a time } --- 3682,3689 ---- // with ^^^^. gap = qfga_get(); qf_fmt_text(gap, (fname != NULL || qfp->qf_lnum != 0) ! ? 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,3780 **** qf_fmt_text(garray_T *gap, char_u *text) { char_u *p = text; - while (*p != NUL) { if (*p == '\n') --- 3775,3780 ---- *************** *** 3787,3794 **** else ga_append(gap, *p++); } - - ga_append(gap, NUL); } /* --- 3787,3792 ---- *************** *** 3807,3814 **** 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); len += (int)STRLEN(buf + len); } if (qfp->qf_col > 0) --- 3805,3812 ---- 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); len += (int)STRLEN(buf + len); } if (qfp->qf_col > 0) *************** *** 3817,3828 **** 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); len += (int)STRLEN(buf + len); } } - buf[len] = NUL; ga_concat_len(gap, buf, len); } --- 3815,3825 ---- 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); len += (int)STRLEN(buf + len); } } ga_concat_len(gap, buf, len); } *************** *** 4659,4665 **** if (qftf_str != NULL && *qftf_str != NUL) { ga_concat(gap, qftf_str); - ga_append(gap, NUL); } else { --- 4656,4661 ---- *************** *** 4706,4711 **** --- 4702,4708 ---- : qfp->qf_text); } + ga_append(gap, NUL); if (ml_append_buf(buf, lnum, gap->ga_data, gap->ga_len, FALSE) == FAIL) return FAIL; *** ../vim-9.0.1615/src/testdir/test_quickfix.vim 2023-06-05 21:52:41.847715785 +0100 --- src/testdir/test_quickfix.vim 2023-06-07 19:00:37.672600159 +0100 *************** *** 167,179 **** \ {'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}]) 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) " Test for module names, one needs to explicitly set `'valid':v:true` so call g:Xsetlist([ --- 167,181 ---- \ {'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':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', ! \ ' 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,6431 **** --- 6430,6440 ---- 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 *** ../vim-9.0.1615/src/version.c 2023-06-07 18:26:58.025112415 +0100 --- src/version.c 2023-06-07 19:08:58.832508449 +0100 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 1616, /**/ -- hundred-and-one symptoms of being an internet addict: 129. You cancel your newspaper subscription. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///