Print [ERROR] on info line when the default command failed

With zero result.

Related: https://github.com/junegunn/fzf.vim/issues/22#issuecomment-311869805
This commit is contained in:
Junegunn Choi 2017-07-01 01:13:15 +09:00
parent 3fc795340d
commit 07ef2b051c
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627
4 changed files with 25 additions and 11 deletions

View File

@ -228,7 +228,7 @@ func Run(opts *Options, revision string) {
case EvtReadNew, EvtReadFin: case EvtReadNew, EvtReadFin:
reading = reading && evt == EvtReadNew reading = reading && evt == EvtReadNew
snapshot, count := chunkList.Snapshot() snapshot, count := chunkList.Snapshot()
terminal.UpdateCount(count, !reading) terminal.UpdateCount(count, !reading, value.(bool))
matcher.Reset(snapshot, terminal.Input(), false, !reading, sort) matcher.Reset(snapshot, terminal.Input(), false, !reading, sort)
case EvtSearchNew: case EvtSearchNew:

View File

@ -17,16 +17,17 @@ type Reader struct {
// ReadSource reads data from the default command or from standard input // ReadSource reads data from the default command or from standard input
func (r *Reader) ReadSource() { func (r *Reader) ReadSource() {
var success bool
if util.IsTty() { if util.IsTty() {
cmd := os.Getenv("FZF_DEFAULT_COMMAND") cmd := os.Getenv("FZF_DEFAULT_COMMAND")
if len(cmd) == 0 { if len(cmd) == 0 {
cmd = defaultCommand cmd = defaultCommand
} }
r.readFromCommand(cmd) success = r.readFromCommand(cmd)
} else { } else {
r.readFromStdin() success = r.readFromStdin()
} }
r.eventBox.Set(EvtReadFin, nil) r.eventBox.Set(EvtReadFin, success)
} }
func (r *Reader) feed(src io.Reader) { func (r *Reader) feed(src io.Reader) {
@ -50,7 +51,7 @@ func (r *Reader) feed(src io.Reader) {
} }
} }
if r.pusher(bytea) { if r.pusher(bytea) {
r.eventBox.Set(EvtReadNew, nil) r.eventBox.Set(EvtReadNew, true)
} }
} }
if err != nil { if err != nil {
@ -59,20 +60,21 @@ func (r *Reader) feed(src io.Reader) {
} }
} }
func (r *Reader) readFromStdin() { func (r *Reader) readFromStdin() bool {
r.feed(os.Stdin) r.feed(os.Stdin)
return true
} }
func (r *Reader) readFromCommand(cmd string) { func (r *Reader) readFromCommand(cmd string) bool {
listCommand := util.ExecCommand(cmd) listCommand := util.ExecCommand(cmd)
out, err := listCommand.StdoutPipe() out, err := listCommand.StdoutPipe()
if err != nil { if err != nil {
return return false
} }
err = listCommand.Start() err = listCommand.Start()
if err != nil { if err != nil {
return return false
} }
defer listCommand.Wait()
r.feed(out) r.feed(out)
return listCommand.Wait() == nil
} }

View File

@ -94,6 +94,7 @@ type Terminal struct {
count int count int
progress int progress int
reading bool reading bool
success bool
jumping jumpMode jumping jumpMode
jumpLabels string jumpLabels string
printer func(string) printer func(string)
@ -372,6 +373,7 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal {
ansi: opts.Ansi, ansi: opts.Ansi,
tabstop: opts.Tabstop, tabstop: opts.Tabstop,
reading: true, reading: true,
success: true,
jumping: jumpDisabled, jumping: jumpDisabled,
jumpLabels: opts.JumpLabels, jumpLabels: opts.JumpLabels,
printer: opts.Printer, printer: opts.Printer,
@ -401,10 +403,11 @@ func (t *Terminal) Input() []rune {
} }
// UpdateCount updates the count information // UpdateCount updates the count information
func (t *Terminal) UpdateCount(cnt int, final bool) { func (t *Terminal) UpdateCount(cnt int, final bool, success bool) {
t.mutex.Lock() t.mutex.Lock()
t.count = cnt t.count = cnt
t.reading = !final t.reading = !final
t.success = success
t.mutex.Unlock() t.mutex.Unlock()
t.reqBox.Set(reqInfo, nil) t.reqBox.Set(reqInfo, nil)
if final { if final {
@ -682,6 +685,9 @@ func (t *Terminal) printInfo() {
if t.progress > 0 && t.progress < 100 { if t.progress > 0 && t.progress < 100 {
output += fmt.Sprintf(" (%d%%)", t.progress) output += fmt.Sprintf(" (%d%%)", t.progress)
} }
if !t.success && t.count == 0 {
output += " [ERROR]"
}
if pos+len(output) <= t.window.Width() { if pos+len(output) <= t.window.Width() {
t.window.CPrint(tui.ColInfo, 0, output) t.window.CPrint(tui.ColInfo, 0, output)
} }

View File

@ -260,6 +260,12 @@ class TestGoFZF < TestBase
assert_equal 'hello', readonce.chomp assert_equal 'hello', readonce.chomp
end end
def test_fzf_default_command_failure
tmux.send_keys fzf.sub('FZF_DEFAULT_COMMAND=', 'FZF_DEFAULT_COMMAND=false'), :Enter
tmux.until { |lines| lines[-2].include?('ERROR') }
tmux.send_keys :Enter
end
def test_key_bindings def test_key_bindings
tmux.send_keys "#{FZF} -q 'foo bar foo-bar'", :Enter tmux.send_keys "#{FZF} -q 'foo bar foo-bar'", :Enter
tmux.until { |lines| lines.last =~ /^>/ } tmux.until { |lines| lines.last =~ /^>/ }