summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbitterfox <bitterfoxc@gmail.com>2021-02-28 21:01:03 +0900
committerGitHub <noreply@github.com>2021-02-28 21:01:03 +0900
commit4f9a7f8c879ef625f3bec5946df9e7fe5768f9dd (patch)
tree1fe477b287ce4bbf691632ef22d1c85cf462a07b /src
parentbb0502ff4429580e363be708ff301c35479144e3 (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.go16
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)