From 0eee95af574880fbd2c6c599988b86a427520677 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Thu, 29 Aug 2024 16:41:52 +0900 Subject: [PATCH] Fix CTRL-Z handling Fix #3802 This fixes `xterm -e fzf` hangs on CTRL-Z * Replace SIGSTOP with SIGTSTP * Do not rely on SIGCONT --- src/terminal.go | 18 ++---------------- src/terminal_unix.go | 6 +----- src/terminal_windows.go | 4 ---- 3 files changed, 3 insertions(+), 25 deletions(-) diff --git a/src/terminal.go b/src/terminal.go index 388548d..1158de7 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 d0b00f2..7afa222 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 112cd68..9b200aa 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 -}