diff --git a/src/curses/curses.go b/src/curses/curses.go
index debdeaf4870aefcb139f93d24faadbd0c5dd012c..06493a2aee0423b42a1ffd38fc6bdfdb7b1f2f85 100644
--- a/src/curses/curses.go
+++ b/src/curses/curses.go
@@ -11,7 +11,6 @@ import "C"
 import (
 	"fmt"
 	"os"
-	"os/signal"
 	"syscall"
 	"time"
 	"unicode/utf8"
@@ -271,14 +270,6 @@ func Init(theme *ColorTheme, black bool, mouse bool) {
 	C.noecho()
 	C.raw() // stty dsusp undef
 
-	intChan := make(chan os.Signal, 1)
-	signal.Notify(intChan, os.Interrupt, os.Kill)
-	go func() {
-		<-intChan
-		Close()
-		os.Exit(2)
-	}()
-
 	if theme != nil {
 		C.start_color()
 		initPairs(theme, black)
diff --git a/src/terminal.go b/src/terminal.go
index 9a92ba436035bf7202d943a3fa48e34f85c968ce..ab77ecfe1186609bb8dc1729212bbc814e0e021b 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -727,6 +727,13 @@ func (t *Terminal) Loop() {
 			t.reqBox.Set(reqRefresh, nil)
 		}()
 
+		intChan := make(chan os.Signal, 1)
+		signal.Notify(intChan, os.Interrupt, os.Kill)
+		go func() {
+			<-intChan
+			t.reqBox.Set(reqQuit, nil)
+		}()
+
 		resizeChan := make(chan os.Signal, 1)
 		signal.Notify(resizeChan, syscall.SIGWINCH)
 		go func() {