mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00
Merge pull request #10497 from bfredl/synlist
messages: fix missing newlines in execute("syn list").
This commit is contained in:
@@ -3608,7 +3608,7 @@ syn_list_one(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)syn_list_header(did_header, 999, id);
|
(void)syn_list_header(did_header, 0, id, true);
|
||||||
did_header = true;
|
did_header = true;
|
||||||
last_matchgroup = 0;
|
last_matchgroup = 0;
|
||||||
if (spp->sp_type == SPTYPE_MATCH) {
|
if (spp->sp_type == SPTYPE_MATCH) {
|
||||||
@@ -3657,7 +3657,7 @@ syn_list_one(
|
|||||||
|
|
||||||
/* list the link, if there is one */
|
/* list the link, if there is one */
|
||||||
if (HL_TABLE()[id - 1].sg_link && (did_header || link_only) && !got_int) {
|
if (HL_TABLE()[id - 1].sg_link && (did_header || link_only) && !got_int) {
|
||||||
(void)syn_list_header(did_header, 999, id);
|
(void)syn_list_header(did_header, 0, id, true);
|
||||||
msg_puts_attr("links to", attr);
|
msg_puts_attr("links to", attr);
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
msg_outtrans(HL_TABLE()[HL_TABLE()[id - 1].sg_link - 1].sg_name);
|
msg_outtrans(HL_TABLE()[HL_TABLE()[id - 1].sg_link - 1].sg_name);
|
||||||
@@ -3799,7 +3799,6 @@ static bool syn_list_keywords(
|
|||||||
const int attr
|
const int attr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
int outlen;
|
|
||||||
int prev_contained = 0;
|
int prev_contained = 0;
|
||||||
const int16_t *prev_next_list = NULL;
|
const int16_t *prev_next_list = NULL;
|
||||||
const int16_t *prev_cont_in_list = NULL;
|
const int16_t *prev_cont_in_list = NULL;
|
||||||
@@ -3817,17 +3816,20 @@ static bool syn_list_keywords(
|
|||||||
todo--;
|
todo--;
|
||||||
for (keyentry_T *kp = HI2KE(hi); kp != NULL && !got_int; kp = kp->ke_next) {
|
for (keyentry_T *kp = HI2KE(hi); kp != NULL && !got_int; kp = kp->ke_next) {
|
||||||
if (kp->k_syn.id == id) {
|
if (kp->k_syn.id == id) {
|
||||||
|
int outlen = 0;
|
||||||
|
bool force_newline = false;
|
||||||
if (prev_contained != (kp->flags & HL_CONTAINED)
|
if (prev_contained != (kp->flags & HL_CONTAINED)
|
||||||
|| prev_skipnl != (kp->flags & HL_SKIPNL)
|
|| prev_skipnl != (kp->flags & HL_SKIPNL)
|
||||||
|| prev_skipwhite != (kp->flags & HL_SKIPWHITE)
|
|| prev_skipwhite != (kp->flags & HL_SKIPWHITE)
|
||||||
|| prev_skipempty != (kp->flags & HL_SKIPEMPTY)
|
|| prev_skipempty != (kp->flags & HL_SKIPEMPTY)
|
||||||
|| prev_cont_in_list != kp->k_syn.cont_in_list
|
|| prev_cont_in_list != kp->k_syn.cont_in_list
|
||||||
|| prev_next_list != kp->next_list)
|
|| prev_next_list != kp->next_list) {
|
||||||
outlen = 9999;
|
force_newline = true;
|
||||||
else
|
} else {
|
||||||
outlen = (int)STRLEN(kp->keyword);
|
outlen = (int)STRLEN(kp->keyword);
|
||||||
/* output "contained" and "nextgroup" on each line */
|
}
|
||||||
if (syn_list_header(did_header, outlen, id)) {
|
// output "contained" and "nextgroup" on each line
|
||||||
|
if (syn_list_header(did_header, outlen, id, force_newline)) {
|
||||||
prev_contained = 0;
|
prev_contained = 0;
|
||||||
prev_next_list = NULL;
|
prev_next_list = NULL;
|
||||||
prev_cont_in_list = NULL;
|
prev_cont_in_list = NULL;
|
||||||
@@ -7046,7 +7048,7 @@ static void highlight_list_one(const int id)
|
|||||||
sgp->sg_blend+1, NULL, "blend");
|
sgp->sg_blend+1, NULL, "blend");
|
||||||
|
|
||||||
if (sgp->sg_link && !got_int) {
|
if (sgp->sg_link && !got_int) {
|
||||||
(void)syn_list_header(didh, 9999, id);
|
(void)syn_list_header(didh, 0, id, true);
|
||||||
didh = true;
|
didh = true;
|
||||||
msg_puts_attr("links to", HL_ATTR(HLF_D));
|
msg_puts_attr("links to", HL_ATTR(HLF_D));
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
@@ -7091,7 +7093,8 @@ static bool highlight_list_arg(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)syn_list_header(didh, (int)(vim_strsize(ts) + STRLEN(name) + 1), id);
|
(void)syn_list_header(didh, (int)(vim_strsize(ts) + STRLEN(name) + 1), id,
|
||||||
|
false);
|
||||||
didh = true;
|
didh = true;
|
||||||
if (!got_int) {
|
if (!got_int) {
|
||||||
if (*name != NUL) {
|
if (*name != NUL) {
|
||||||
@@ -7209,9 +7212,10 @@ const char *highlight_color(const int id, const char *const what,
|
|||||||
/// @param did_header did header already
|
/// @param did_header did header already
|
||||||
/// @param outlen length of string that comes
|
/// @param outlen length of string that comes
|
||||||
/// @param id highlight group id
|
/// @param id highlight group id
|
||||||
|
/// @param force_newline always start a new line
|
||||||
/// @return true when started a new line.
|
/// @return true when started a new line.
|
||||||
static bool syn_list_header(const bool did_header, const int outlen,
|
static bool syn_list_header(const bool did_header, const int outlen,
|
||||||
const int id)
|
const int id, bool force_newline)
|
||||||
{
|
{
|
||||||
int endcol = 19;
|
int endcol = 19;
|
||||||
bool newline = true;
|
bool newline = true;
|
||||||
@@ -7224,10 +7228,10 @@ static bool syn_list_header(const bool did_header, const int outlen,
|
|||||||
}
|
}
|
||||||
msg_outtrans(HL_TABLE()[id - 1].sg_name);
|
msg_outtrans(HL_TABLE()[id - 1].sg_name);
|
||||||
endcol = 15;
|
endcol = 15;
|
||||||
} else if (ui_has(kUIMessages) || msg_silent) {
|
} else if ((ui_has(kUIMessages) || msg_silent) && !force_newline) {
|
||||||
msg_putchar(' ');
|
msg_putchar(' ');
|
||||||
adjust = false;
|
adjust = false;
|
||||||
} else if (msg_col + outlen + 1 >= Columns) {
|
} else if (msg_col + outlen + 1 >= Columns || force_newline) {
|
||||||
msg_putchar('\n');
|
msg_putchar('\n');
|
||||||
if (got_int) {
|
if (got_int) {
|
||||||
return true;
|
return true;
|
||||||
|
@@ -804,6 +804,7 @@ describe('ui/builtin messages', function()
|
|||||||
[3] = {bold = true, reverse = true},
|
[3] = {bold = true, reverse = true},
|
||||||
[4] = {bold = true, foreground = Screen.colors.SeaGreen4},
|
[4] = {bold = true, foreground = Screen.colors.SeaGreen4},
|
||||||
[5] = {foreground = Screen.colors.Blue1},
|
[5] = {foreground = Screen.colors.Blue1},
|
||||||
|
[6] = {bold = true, foreground = Screen.colors.Magenta},
|
||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@@ -856,6 +857,46 @@ describe('ui/builtin messages', function()
|
|||||||
eq('ErrorMsg xxx ctermfg=15 ctermbg=1 guifg=White guibg=Red',
|
eq('ErrorMsg xxx ctermfg=15 ctermbg=1 guifg=White guibg=Red',
|
||||||
meths.command_output("hi ErrorMsg"))
|
meths.command_output("hi ErrorMsg"))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it(':syntax list langGroup output', function()
|
||||||
|
command("syntax on")
|
||||||
|
command("set syntax=vim")
|
||||||
|
screen:try_resize(110,7)
|
||||||
|
feed(':syntax list vimComment<cr>')
|
||||||
|
screen:expect([[
|
||||||
|
{6:--- Syntax items ---} |
|
||||||
|
vimComment {5:xxx} {5:match} /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 {5:excludenl} {5:contains}=@vimCommentGroup,vimCommentString |
|
||||||
|
|
|
||||||
|
{5:match} /\<endif\s\+".*$/ms=s+5,lc=5 {5:contains}=@vimCommentGroup,vimCommentString |
|
||||||
|
{5:match} /\<else\s\+".*$/ms=s+4,lc=4 {5:contains}=@vimCommentGroup,vimCommentString |
|
||||||
|
{5:links to} Comment |
|
||||||
|
{4:Press ENTER or type command to continue}^ |
|
||||||
|
]])
|
||||||
|
|
||||||
|
feed('<cr>')
|
||||||
|
screen:try_resize(55,7)
|
||||||
|
feed(':syntax list vimComment<cr>')
|
||||||
|
screen:expect([[
|
||||||
|
|
|
||||||
|
{5:match} /\<endif\s\+".*$/ms=s+5,lc=5 |
|
||||||
|
{5:contains}=@vimCommentGroup,vimCommentString |
|
||||||
|
{5:match} /\<else\s\+".*$/ms=s+4,lc=4 {5:c}|
|
||||||
|
{5:ontains}=@vimCommentGroup,vimCommentString |
|
||||||
|
{5:links to} Comment |
|
||||||
|
{4:Press ENTER or type command to continue}^ |
|
||||||
|
]])
|
||||||
|
feed('<cr>')
|
||||||
|
|
||||||
|
-- ignore final whitespace inside string
|
||||||
|
-- luacheck: push ignore
|
||||||
|
eq([[--- Syntax items ---
|
||||||
|
vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vimCommentGroup,vimCommentString
|
||||||
|
match /\<endif\s\+".*$/ms=s+5,lc=5 contains=@vimCommentGroup,vimCommentString
|
||||||
|
match /\<else\s\+".*$/ms=s+4,lc=4 contains=@vimCommentGroup,vimCommentString
|
||||||
|
links to Comment]],
|
||||||
|
meths.command_output('syntax list vimComment'))
|
||||||
|
-- luacheck: pop
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('ui/ext_messages', function()
|
describe('ui/ext_messages', function()
|
||||||
|
Reference in New Issue
Block a user