Improve -0 and -1 as suggested in #36

- Make -0 and -1 work without -q
- Change exit status to 0 when exiting with -0
This commit is contained in:
Junegunn Choi 2014-04-03 01:06:40 +09:00
parent 22d3929ae3
commit 02c01c81a0
3 changed files with 41 additions and 11 deletions

View File

@ -72,8 +72,8 @@ usage: fzf [options]
Scripting Scripting
-q, --query=STR Start the finder with the given query -q, --query=STR Start the finder with the given query
-1, --select-1 (with --query) Automatically select the only match -1, --select-1 Automatically select the only match
-0, --exit-0 (with --query) Exit when there's no match -0, --exit-0 Exit immediately when there's no match
-f, --filter=STR Filter mode. Do not start interactive finder. -f, --filter=STR Filter mode. Do not start interactive finder.
Environment variables Environment variables

16
fzf
View File

@ -7,7 +7,7 @@
# / __/ / /_/ __/ # / __/ / /_/ __/
# /_/ /___/_/ Fuzzy finder for your shell # /_/ /___/_/ Fuzzy finder for your shell
# #
# Version: 0.8.3 (April 2, 2014) # Version: 0.8.3 (April 3, 2014)
# #
# Author: Junegunn Choi # Author: Junegunn Choi
# URL: https://github.com/junegunn/fzf # URL: https://github.com/junegunn/fzf
@ -194,16 +194,16 @@ class FZF
filter_list @new filter_list @new
else else
start_reader start_reader
emit(:key) { q = @query.get; [q, q.length] } unless @query.empty? emit(:key) { q = @query.get; [q, q.length] } unless empty = @query.empty?
if !@query.empty? && (@select1 || @exit0) if @select1 || @exit0
start_search do |loaded, matches| start_search do |loaded, matches|
len = matches.length len = empty ? @count.get : matches.length
if loaded if loaded
if @select1 && len == 1 if @select1 && len == 1
puts matches.first.first puts empty ? matches.first : matches.first.first
exit 0 exit 0
elsif @exit0 && len == 0 elsif @exit0 && len == 0
exit 1 exit 0
end end
end end
@ -276,8 +276,8 @@ class FZF
Scripting Scripting
-q, --query=STR Start the finder with the given query -q, --query=STR Start the finder with the given query
-1, --select-1 (with --query) Automatically select the only match -1, --select-1 Automatically select the only match
-0, --exit-0 (with --query) Exit when there's no match -0, --exit-0 Exit immediately when there's no match
-f, --filter=STR Filter mode. Do not start interactive finder. -f, --filter=STR Filter mode. Do not start interactive finder.
Environment variables Environment variables

View File

@ -590,6 +590,21 @@ class TestFZF < MiniTest::Unit::TestCase
end end
end end
def test_select_1_without_query
stream = stream_for "Hello World"
output = StringIO.new
begin
$stdout = output
FZF.new(%w[--select-1], stream).start
rescue SystemExit => e
assert_equal 0, e.status
assert_equal 'Hello World', output.string.chomp
ensure
$stdout = STDOUT
end
end
def test_select_1_ambiguity def test_select_1_ambiguity
stream = stream_for "Hello\nWorld" stream = stream_for "Hello\nWorld"
begin begin
@ -611,7 +626,22 @@ class TestFZF < MiniTest::Unit::TestCase
$stdout = output $stdout = output
FZF.new(%w[--query=zz --exit-0], stream).start FZF.new(%w[--query=zz --exit-0], stream).start
rescue SystemExit => e rescue SystemExit => e
assert_equal 1, e.status assert_equal 0, e.status
assert_equal '', output.string
ensure
$stdout = STDOUT
end
end
def test_exit_0_without_query
stream = stream_for ""
output = StringIO.new
begin
$stdout = output
FZF.new(%w[--exit-0], stream).start
rescue SystemExit => e
assert_equal 0, e.status
assert_equal '', output.string assert_equal '', output.string
ensure ensure
$stdout = STDOUT $stdout = STDOUT