summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Brabandt <cb@256bit.org>2024-05-19 09:11:09 +0200
committerChristian Brabandt <cb@256bit.org>2024-05-19 09:11:09 +0200
commit0b0f7d6be08df5411718797043414a6391ebfda5 (patch)
tree7d764dda5de406a08df0e0f9e8ab3658b66b753e
parent4776e64e72de2976ff90b17d236e50e2b02c5540 (diff)
patch 9.1.0420: :browse oldfiles prompts even with single entryv9.1.0420
Problem: :browse oldfiles prompts even with single entry Solution: Do not prompt, but edit the file directly, also when using :filter /pat/ browse oldfiles closes: #14794 Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r--runtime/doc/usr_21.txt19
-rw-r--r--src/ex_cmds.c17
-rw-r--r--src/testdir/test_viminfo.vim30
-rw-r--r--src/version.c2
4 files changed, 66 insertions, 2 deletions
diff --git a/runtime/doc/usr_21.txt b/runtime/doc/usr_21.txt
index 95ded58eaf..fe3ee3199c 100644
--- a/runtime/doc/usr_21.txt
+++ b/runtime/doc/usr_21.txt
@@ -1,4 +1,4 @@
-*usr_21.txt* For Vim version 9.1. Last change: 2019 Apr 25
+*usr_21.txt* For Vim version 9.1. Last change: 2024 May 17
VIM USER MANUAL - by Bram Moolenaar
@@ -207,6 +207,23 @@ You get the same list of files as with |:oldfiles|. If you want to edit
Type "2" and press <Enter> to edit the second file.
+If you know that the filename contains a pattern, you can also |:filter| the
+list of files: >
+
+ :filter /resume/ :browse oldfiles
+<
+Since there is only one single matching filename, Vim will directly edit that
+file without prompting. If the filter matches several files, you'll get
+prompted for the list of matching files instead: >
+
+ :filter! /resume/ browse oldfiles
+< 1: ~/.viminfo ~
+ 3: /tmp/draft ~
+ Type number and <Enter> (q or empty cancels): ~
+
+Note: this time we filtered out all files NOT matching resume.
+
+
More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 2a5d842fc9..5c34e8645d 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -5622,6 +5622,9 @@ ex_oldfiles(exarg_T *eap UNUSED)
listitem_T *li;
int nr = 0;
char_u *fname;
+ // for a single filtered match, remember the number
+ // so we can jump directly to it without prompting
+ int matches = -1;
if (l == NULL)
{
@@ -5637,6 +5640,10 @@ ex_oldfiles(exarg_T *eap UNUSED)
fname = tv_get_string(&li->li_tv);
if (!message_filtered(fname))
{
+ if (matches < 0)
+ matches = nr;
+ else
+ matches = 0;
msg_outnum((long)nr);
msg_puts(": ");
msg_outtrans(fname);
@@ -5654,7 +5661,15 @@ ex_oldfiles(exarg_T *eap UNUSED)
if (cmdmod.cmod_flags & CMOD_BROWSE)
{
quit_more = FALSE;
- nr = prompt_for_number(FALSE);
+ // we only need to prompt if there is more than 1 match
+ if (matches > 0)
+ {
+ nr = matches;
+ // msg_putchar above sets needs_wait_return
+ need_wait_return = FALSE;
+ }
+ else
+ nr = prompt_for_number(FALSE);
msg_starthere();
if (nr > 0)
{
diff --git a/src/testdir/test_viminfo.vim b/src/testdir/test_viminfo.vim
index 1f4a72db16..7aab271336 100644
--- a/src/testdir/test_viminfo.vim
+++ b/src/testdir/test_viminfo.vim
@@ -1299,4 +1299,34 @@ func Test_viminfo_merge_old_jumplist()
bw!
endfunc
+func Test_viminfo_oldfiles_filter()
+ let v:oldfiles = []
+ let _viminfofile = &viminfofile
+ let &viminfofile=''
+ let lines = [
+ \ '# comment line',
+ \ '*encoding=utf-8',
+ \ "> /tmp/vimrc_one.vim",
+ \ "\t\"\t11\t0",
+ \ "",
+ \ "> /tmp/foobar.txt",
+ \ "\t\"\t11\t0",
+ \ "",
+ \ ]
+ call writefile(lines, 'Xviminfo1', 'D')
+ rviminfo! Xviminfo1
+ new
+ " filter returns a single item
+ let a = execute('filter /vim/ oldfiles')->split('\n')
+ call assert_equal(1, len(a))
+ " filter returns more than a single match
+ let a = execute('filter #tmp# oldfiles')->split('\n')
+ call assert_equal(2, len(a))
+ " don't get prompted for the file, but directly open it
+ filter /vim/ browse oldfiles
+ call assert_equal("/tmp/vimrc_one.vim", expand("%"))
+ bw
+ let &viminfofile = _viminfofile
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 34f474da4d..aafbddcd8e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 420,
+/**/
419,
/**/
418,