summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2024-08-29 16:41:52 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2024-08-29 16:41:52 +0900
commit0eee95af574880fbd2c6c599988b86a427520677 (patch)
tree0703d997945947d6da3a3ebadf401a38f8c03c11 /src
parenta09c6e991aa494bed852f8a8c40bfd94ce43aac2 (diff)
downloadfzf-0eee95af574880fbd2c6c599988b86a427520677.tar.gz
Fix CTRL-Z handling
Fix #3802 This fixes `xterm -e fzf` hangs on CTRL-Z * Replace SIGSTOP with SIGTSTP * Do not rely on SIGCONT
Diffstat (limited to 'src')
-rw-r--r--src/terminal.go18
-rw-r--r--src/terminal_unix.go6
-rw-r--r--src/terminal_windows.go4
3 files changed, 3 insertions, 25 deletions
diff --git a/src/terminal.go b/src/terminal.go
index 388548da..1158de7a 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -854,7 +854,6 @@ func NewTerminal(opts *Options, eventBox *util.EventBox, executor *util.Executor
mutex: sync.Mutex{},
uiMutex: sync.Mutex{},
suppress: true,
- sigstop: false,
slab: util.MakeSlab(slab16Size, slab32Size),
theme: opts.Theme,
startChan: make(chan fitpad, 1),
@@ -3437,19 +3436,6 @@ func (t *Terminal) Loop() error {
}
}()
- contChan := make(chan os.Signal, 1)
- notifyOnCont(contChan)
- go func() {
- for {
- select {
- case <-ctx.Done():
- return
- case <-contChan:
- t.reqBox.Set(reqReinit, nil)
- }
- }
- }()
-
if !t.tui.ShouldEmitResizeEvent() {
resizeChan := make(chan os.Signal, 1)
notifyOnResize(resizeChan) // Non-portable
@@ -3787,7 +3773,7 @@ func (t *Terminal) Loop() error {
case reqRedrawPreviewLabel:
t.printLabel(t.pborder, t.previewLabel, t.previewLabelOpts, t.previewLabelLen, t.previewOpts.border, true)
case reqReinit:
- t.tui.Resume(t.fullscreen, t.sigstop)
+ t.tui.Resume(t.fullscreen, true)
t.fullRedraw()
case reqResize, reqFullRedraw:
if req == reqResize {
@@ -4527,11 +4513,11 @@ func (t *Terminal) Loop() error {
case actSigStop:
p, err := os.FindProcess(os.Getpid())
if err == nil {
- t.sigstop = true
t.tui.Clear()
t.tui.Pause(t.fullscreen)
notifyStop(p)
t.mutex.Unlock()
+ t.reqBox.Set(reqReinit, nil)
return false
}
case actMouse:
diff --git a/src/terminal_unix.go b/src/terminal_unix.go
index d0b00f2f..7afa2220 100644
--- a/src/terminal_unix.go
+++ b/src/terminal_unix.go
@@ -20,9 +20,5 @@ func notifyStop(p *os.Process) {
if err == nil {
pid = pgid * -1
}
- unix.Kill(pid, syscall.SIGSTOP)
-}
-
-func notifyOnCont(resizeChan chan<- os.Signal) {
- signal.Notify(resizeChan, syscall.SIGCONT)
+ unix.Kill(pid, syscall.SIGTSTP)
}
diff --git a/src/terminal_windows.go b/src/terminal_windows.go
index 112cd68d..9b200aaa 100644
--- a/src/terminal_windows.go
+++ b/src/terminal_windows.go
@@ -13,7 +13,3 @@ func notifyOnResize(resizeChan chan<- os.Signal) {
func notifyStop(p *os.Process) {
// NOOP
}
-
-func notifyOnCont(resizeChan chan<- os.Signal) {
- // NOOP
-}