summaryrefslogtreecommitdiffstats
path: root/pkgs/override/fzf/complete1.patch
blob: 3e3f2c4d56b1be5d0f8ab4615843b870a2445597 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
commit 57cbd76c068121b685399fdb4649e7ba537983d6
Author: tv <tv@krebsco.de>
Date:   Mon Dec 5 15:24:30 2022 +0100

    Add --complete-1 option

diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index 79e7291..3b8a753 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -685,6 +685,9 @@ interactive finder and automatically select the only match
 If there is no match for the initial query (\fB--query\fR), do not start
 interactive finder and exit immediately
 .TP
+.B "--complete-1"
+Exit interactive finder when there's exactly one match
+.TP
 .BI "-f, --filter=" "STR"
 Filter mode. Do not start interactive finder. When used with \fB--no-sort\fR,
 fzf becomes a fuzzy-version of grep.
diff --git a/src/core.go b/src/core.go
index 2ddddc3..09afff2 100644
--- a/src/core.go
+++ b/src/core.go
@@ -337,8 +337,14 @@ func Run(opts *Options, version string, revision string) {
 								}
 								determine(val.final)
 							}
+						} else {
+							if opts.Complete1 && val.Length() == 1 {
+								opts.Printer(val.Get(0).item.AsString(opts.Ansi))
+								terminal.reqBox.Set(reqClose, nil)
+							} else {
+								terminal.UpdateList(val, clearSelection())
+							}
 						}
-						terminal.UpdateList(val, clearSelection())
 					}
 				}
 			}
diff --git a/src/options.go b/src/options.go
index 5400311..1e38fe4 100644
--- a/src/options.go
+++ b/src/options.go
@@ -108,6 +108,7 @@ const usage = `usage: fzf [options]
     -1, --select-1         Automatically select the only match
     -0, --exit-0           Exit immediately when there's no match
     -f, --filter=STR       Filter mode. Do not start interactive finder.
+    --complete-1           Exit interactive finder when there's exactly one match
     --print-query          Print query as the first line
     --expect=KEYS          Comma-separated list of keys to complete fzf
     --read0                Read input delimited by ASCII NUL characters
@@ -274,6 +275,7 @@ type Options struct {
 	Query        string
 	Select1      bool
 	Exit0        bool
+	Complete1    bool
 	Filter       *string
 	ToggleSort   bool
 	Expect       map[tui.Event]string
@@ -342,6 +344,7 @@ func defaultOptions() *Options {
 		Query:        "",
 		Select1:      false,
 		Exit0:        false,
+		Complete1:    false,
 		Filter:       nil,
 		ToggleSort:   false,
 		Expect:       make(map[tui.Event]string),
@@ -1546,6 +1549,8 @@ func parseOptions(opts *Options, allArgs []string) {
 			opts.Exit0 = true
 		case "+0", "--no-exit-0":
 			opts.Exit0 = false
+		case "--complete-1":
+			opts.Complete1 = true
 		case "--read0":
 			opts.ReadZero = true
 		case "--no-read0":