diff options
author | James McCoy <jamessan@jamessan.com> | 2017-04-28 21:04:17 -0400 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2017-04-29 21:46:12 -0400 |
commit | dbdc2d40bb7a950e294c6e50906f546707ccf390 (patch) | |
tree | 72eadcf95cf00567554ef2e2a2a5c557e15d3237 /src | |
parent | 0df1b6655be5385c9cbb70dca1c042c6447ec50b (diff) | |
download | rneovim-dbdc2d40bb7a950e294c6e50906f546707ccf390.tar.gz rneovim-dbdc2d40bb7a950e294c6e50906f546707ccf390.tar.bz2 rneovim-dbdc2d40bb7a950e294c6e50906f546707ccf390.zip |
vim-patch:7.4.2231
Problem: ":oldfiles" output is a very long list.
Solution: Add a pattern argument. (Coot, closes vim/vim#575)
https://github.com/vim/vim/commit/e11d61a3b1cdedf3144de697a2b38af62c3a78d8
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 46 | ||||
-rw-r--r-- | src/nvim/ex_cmds.c | 68 | ||||
-rw-r--r-- | src/nvim/ex_cmds.lua | 2 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
4 files changed, 70 insertions, 48 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index b0f47d8e45..1bf85ccd8b 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -21779,52 +21779,6 @@ void last_set_msg(scid_T scriptID) } } -/* - * List v:oldfiles in a nice way. - */ -void ex_oldfiles(exarg_T *eap) -{ - list_T *l = get_vim_var_list(VV_OLDFILES); - listitem_T *li; - long nr = 0; - - if (l == NULL) - msg((char_u *)_("No old files")); - else { - msg_start(); - msg_scroll = TRUE; - for (li = l->lv_first; li != NULL && !got_int; li = li->li_next) { - msg_outnum(++nr); - MSG_PUTS(": "); - msg_outtrans((char_u *)tv_get_string(&li->li_tv)); - msg_clr_eos(); - msg_putchar('\n'); - ui_flush(); /* output one line at a time */ - os_breakcheck(); - } - /* Assume "got_int" was set to truncate the listing. */ - got_int = FALSE; - - // File selection prompt on ":browse oldfiles" - if (cmdmod.browse) { - quit_more = false; - nr = prompt_for_number(false); - msg_starthere(); - if (nr > 0 && nr <= l->lv_len) { - const char *const p = tv_list_find_str(l, nr - 1); - if (p == NULL) { - return; - } - char *const s = (char *)expand_env_save((char_u *)p); - eap->arg = (char_u *)s; - eap->cmdidx = CMD_edit; - do_exedit(eap, NULL); - xfree(s); - } - } - } -} - // reset v:option_new, v:option_old and v:option_type void reset_v_option_vars(void) { diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 7726e0fc6d..ab85bb766f 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -6158,3 +6158,71 @@ void ex_substitute(exarg_T *eap) ga_clear(&save_view); unblock_autocmds(); } + +/// List v:oldfiles in a nice way. +void ex_oldfiles(exarg_T *eap) +{ + list_T *l = get_vim_var_list(VV_OLDFILES); + listitem_T *li; + long nr = 0; + + if (l == NULL) { + msg((char_u *)_("No old files")); + } else { + char_u *reg_pat = NULL; + regmatch_T regmatch; + + if (*eap->arg != NUL) { + if (skip_vimgrep_pat(eap->arg, ®_pat, NULL) == NULL) { + EMSG(_(e_invalpat)); + return; + } + regmatch.regprog = vim_regcomp(reg_pat, p_magic ? RE_MAGIC : 0); + if (regmatch.regprog == NULL) { + return; + } + } + + msg_start(); + msg_scroll = TRUE; + for (li = l->lv_first; li != NULL && !got_int; li = li->li_next) { + nr++; + const char *fname = tv_get_string(&li->li_tv); + if (reg_pat == NULL || *reg_pat == NUL + || vim_regexec(®match, (char_u *)fname, (colnr_T)0)) { + msg_outnum(nr); + MSG_PUTS(": "); + msg_outtrans((char_u *)tv_get_string(&li->li_tv)); + msg_clr_eos(); + msg_putchar('\n'); + ui_flush(); // output one line at a time + os_breakcheck(); + } + } + if (*eap->arg != NUL) { + vim_regfree(regmatch.regprog); + } + + /* Assume "got_int" was set to truncate the listing. */ + got_int = FALSE; + + // File selection prompt on ":browse oldfiles" + if (cmdmod.browse) { + quit_more = false; + nr = prompt_for_number(false); + msg_starthere(); + if (nr > 0 && nr <= l->lv_len) { + const char *const p = tv_list_find_str(l, nr - 1); + if (p == NULL) { + return; + } + char *const s = (char *)expand_env_save((char_u *)p); + eap->arg = (char_u *)s; + eap->cmdidx = CMD_edit; + cmdmod.browse = false; + do_exedit(eap, NULL); + xfree(s); + } + } + } +} diff --git a/src/nvim/ex_cmds.lua b/src/nvim/ex_cmds.lua index 92f0669422..844d46ab26 100644 --- a/src/nvim/ex_cmds.lua +++ b/src/nvim/ex_cmds.lua @@ -1810,7 +1810,7 @@ return { }, { command='oldfiles', - flags=bit.bor(BANG, TRLBAR, SBOXOK, CMDWIN), + flags=bit.bor(BANG, TRLBAR, NOTADR, EXTRA, SBOXOK, CMDWIN), addr_type=ADDR_LINES, func='ex_oldfiles', }, diff --git a/src/nvim/version.c b/src/nvim/version.c index b1aa8e2a4b..b3ab5d0d2c 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -213,7 +213,7 @@ static const int included_patches[] = { // 2234 NA 2233, // 2232 NA - // 2231, + 2231, 2230, // 2229, 2228, |