mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.1.1221: filtering does not work when listing marks
Problem: Filtering does not work when listing marks.
Solution: Implement filtering marks. (Marcin Szamotulski, closes vim/vim#3895)
ad6dc49a75
This commit is contained in:
parent
5d933310c8
commit
d27175aa28
@ -359,17 +359,19 @@ g8 Print the hex values of the bytes used in the
|
||||
the output, not necessarily the whole line. Only some
|
||||
commands support filtering, try it out to check if it
|
||||
works. Some of the commands that support filtering:
|
||||
|:#| - filter whole line
|
||||
|:command| - filter by command name
|
||||
|:files| - filter by file name
|
||||
|:highlight| - filter by highlight group
|
||||
|:jumps| - filter by file name
|
||||
|:let| - filter by variable name
|
||||
|:list| - filter whole line
|
||||
|:llist| - filter by file name or module name
|
||||
|:oldfiles| - filter by file name
|
||||
|:clist| - filter by file name or module name
|
||||
|:set| - filter by variable name
|
||||
|:#| - filter whole line
|
||||
|:clist| - filter by file name or module name
|
||||
|:command| - filter by command name
|
||||
|:files| - filter by file name
|
||||
|:highlight| - filter by highlight group
|
||||
|:jumps| - filter by file name
|
||||
|:let| - filter by variable name
|
||||
|:list| - filter whole line
|
||||
|:llist| - filter by file name or module name
|
||||
|:marks| - filter by text in the current file,
|
||||
or file name for other files
|
||||
|:oldfiles| - filter by file name
|
||||
|:set| - filter by variable name
|
||||
|
||||
Only normal messages are filtered, error messages are
|
||||
not.
|
||||
|
@ -656,48 +656,51 @@ show_one_mark(
|
||||
int c,
|
||||
char_u *arg,
|
||||
pos_T *p,
|
||||
char_u *name,
|
||||
int current /* in current file */
|
||||
char_u *name_arg,
|
||||
int current // in current file
|
||||
)
|
||||
{
|
||||
static int did_title = FALSE;
|
||||
int mustfree = FALSE;
|
||||
static bool did_title = false;
|
||||
bool mustfree = false;
|
||||
char_u *name = name_arg;
|
||||
|
||||
if (c == -1) { /* finish up */
|
||||
if (did_title)
|
||||
did_title = FALSE;
|
||||
else {
|
||||
if (arg == NULL)
|
||||
if (c == -1) { // finish up
|
||||
if (did_title) {
|
||||
did_title = false;
|
||||
} else {
|
||||
if (arg == NULL) {
|
||||
MSG(_("No marks set"));
|
||||
else
|
||||
} else {
|
||||
EMSG2(_("E283: No marks matching \"%s\""), arg);
|
||||
}
|
||||
}
|
||||
/* don't output anything if 'q' typed at --more-- prompt */
|
||||
else if (!got_int
|
||||
&& (arg == NULL || vim_strchr(arg, c) != NULL)
|
||||
&& p->lnum != 0) {
|
||||
if (!did_title) {
|
||||
/* Highlight title */
|
||||
MSG_PUTS_TITLE(_("\nmark line col file/text"));
|
||||
did_title = TRUE;
|
||||
}
|
||||
msg_putchar('\n');
|
||||
if (!got_int) {
|
||||
sprintf((char *)IObuff, " %c %6ld %4d ", c, p->lnum, p->col);
|
||||
msg_outtrans(IObuff);
|
||||
if (name == NULL && current) {
|
||||
name = mark_line(p, 15);
|
||||
mustfree = TRUE;
|
||||
}
|
||||
if (name != NULL) {
|
||||
msg_outtrans_attr(name, current ? HL_ATTR(HLF_D) : 0);
|
||||
if (mustfree) {
|
||||
xfree(name);
|
||||
}
|
||||
} else if (!got_int
|
||||
&& (arg == NULL || vim_strchr(arg, c) != NULL)
|
||||
&& p->lnum != 0) {
|
||||
// don't output anything if 'q' typed at --more-- prompt
|
||||
if (name == NULL && current) {
|
||||
name = mark_line(p, 15);
|
||||
mustfree = true;
|
||||
}
|
||||
if (!message_filtered(name)) {
|
||||
if (!did_title) {
|
||||
// Highlight title
|
||||
msg_puts_title(_("\nmark line col file/text"));
|
||||
did_title = true;
|
||||
}
|
||||
msg_putchar('\n');
|
||||
if (!got_int) {
|
||||
snprintf((char *)IObuff, IOSIZE, " %c %6ld %4d ", c, p->lnum, p->col);
|
||||
msg_outtrans(IObuff);
|
||||
if (name != NULL) {
|
||||
msg_outtrans_attr(name, current ? HL_ATTR(HLF_D) : 0);
|
||||
}
|
||||
}
|
||||
ui_flush(); // show one line at a time
|
||||
}
|
||||
if (mustfree) {
|
||||
xfree(name);
|
||||
}
|
||||
ui_flush(); /* show one line at a time */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,7 +126,22 @@ func Test_filter_commands()
|
||||
let res = split(execute("filter /\.c$/ jumps"), "\n")[1:]
|
||||
call assert_equal([" 2 1 0 file.c", ">"], res)
|
||||
|
||||
bwipe file.c
|
||||
bwipe file.h
|
||||
bwipe file.hs
|
||||
" Test filtering :marks command
|
||||
b file.c
|
||||
mark A
|
||||
b file.h
|
||||
mark B
|
||||
let res = split(execute("filter /\.c$/ marks"), "\n")[1:]
|
||||
call assert_equal([" A 1 0 file.c"], res)
|
||||
|
||||
call setline(1, ['one', 'two', 'three'])
|
||||
1mark a
|
||||
2mark b
|
||||
3mark c
|
||||
let res = split(execute("filter /two/ marks abc"), "\n")[1:]
|
||||
call assert_equal([" b 2 0 two"], res)
|
||||
|
||||
bwipe! file.c
|
||||
bwipe! file.h
|
||||
bwipe! file.hs
|
||||
endfunc
|
||||
|
Loading…
Reference in New Issue
Block a user