diff options
author | bitterfox <bitterfoxc@gmail.com> | 2021-02-28 21:01:03 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-28 21:01:03 +0900 |
commit | 4f9a7f8c879ef625f3bec5946df9e7fe5768f9dd (patch) | |
tree | 1fe477b287ce4bbf691632ef22d1c85cf462a07b /src | |
parent | bb0502ff4429580e363be708ff301c35479144e3 (diff) |
Don't exit fzf by SIGINT while executing command (#2375)
Fix #2374
Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/terminal.go | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/terminal.go b/src/terminal.go index 2fcaa697..93ba21ba 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -157,6 +157,7 @@ type Terminal struct { slab *util.Slab theme *tui.ColorTheme tui tui.Renderer + executing *util.AtomicBool } type selectedItem struct { @@ -525,7 +526,8 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal { startChan: make(chan bool, 1), killChan: make(chan int), tui: renderer, - initFunc: func() { renderer.Init() }} + initFunc: func() { renderer.Init() }, + executing: util.NewAtomicBool(false)} t.prompt, t.promptLen = t.parsePrompt(opts.Prompt) t.pointer, t.pointerLen = t.processTabs([]rune(opts.Pointer), 0) t.marker, t.markerLen = t.processTabs([]rune(opts.Marker), 0) @@ -1713,13 +1715,17 @@ func (t *Terminal) executeCommand(template string, forcePlus bool, background bo cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr t.tui.Pause(true) + t.executing.Set(true) cmd.Run() + t.executing.Set(false) t.tui.Resume(true, false) t.redraw() t.refresh() } else { t.tui.Pause(false) + t.executing.Set(true) cmd.Run() + t.executing.Set(false) t.tui.Resume(false, false) } cleanTemporaryFiles() @@ -1837,8 +1843,12 @@ func (t *Terminal) Loop() { intChan := make(chan os.Signal, 1) signal.Notify(intChan, os.Interrupt, syscall.SIGTERM) go func() { - <-intChan - t.reqBox.Set(reqQuit, nil) + for s := range intChan { + // Don't quit by SIGINT while executing because it should be for the executing command and not for fzf itself + if !(s == os.Interrupt && t.executing.Get()) { + t.reqBox.Set(reqQuit, nil) + } + } }() contChan := make(chan os.Signal, 1) |