]> git.lizzy.rs Git - micro.git/commitdiff
Handle SIGHUP properly
authorZachary Yedidia <zyedidia@gmail.com>
Wed, 21 Apr 2021 01:27:59 +0000 (21:27 -0400)
committerZachary Yedidia <zyedidia@gmail.com>
Wed, 21 Apr 2021 01:27:59 +0000 (21:27 -0400)
Fixes #2085

Not the nicest solution but it will do for now.

cmd/micro/micro.go

index e274e5992d07e7c5ad261949ebddf5f48888b0a6..049be3370f107b2d10c95c751e0db22524857ec7 100644 (file)
@@ -40,6 +40,9 @@ var (
        flagPlugin    = flag.String("plugin", "", "Plugin command")
        flagClean     = flag.Bool("clean", false, "Clean configuration directory")
        optionFlags   map[string]*string
+
+       sigterm chan os.Signal
+       sighup  chan os.Signal
 )
 
 func InitFlags() {
@@ -272,23 +275,10 @@ func main() {
                os.Exit(1)
        }
 
-       c := make(chan os.Signal, 1)
-       signal.Notify(c, syscall.SIGTERM)
-
-       go func() {
-               <-c
-
-               for _, b := range buffer.OpenBuffers {
-                       if !b.Modified() {
-                               b.Fini()
-                       }
-               }
-
-               if screen.Screen != nil {
-                       screen.Screen.Fini()
-               }
-               os.Exit(0)
-       }()
+       sigterm = make(chan os.Signal, 1)
+       sighup = make(chan os.Signal, 1)
+       signal.Notify(sigterm, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT)
+       signal.Notify(sighup, syscall.SIGHUP)
 
        m := clipboard.SetMethod(config.GetGlobalOption("clipboard").(string))
        clipErr := clipboard.Initialize(m)
@@ -427,6 +417,24 @@ func DoEvent() {
                for len(screen.DrawChan()) > 0 {
                        <-screen.DrawChan()
                }
+       case <-sighup:
+               for _, b := range buffer.OpenBuffers {
+                       if !b.Modified() {
+                               b.Fini()
+                       }
+               }
+               os.Exit(0)
+       case <-sigterm:
+               for _, b := range buffer.OpenBuffers {
+                       if !b.Modified() {
+                               b.Fini()
+                       }
+               }
+
+               if screen.Screen != nil {
+                       screen.Screen.Fini()
+               }
+               os.Exit(0)
        }
 
        ulua.Lock.Lock()