]> git.lizzy.rs Git - micro.git/commitdiff
Exit gracefully when SIGTERM is received
authorZachary Yedidia <zyedidia@gmail.com>
Sun, 2 Aug 2020 00:18:07 +0000 (20:18 -0400)
committerZachary Yedidia <zyedidia@gmail.com>
Sun, 2 Aug 2020 00:18:07 +0000 (20:18 -0400)
Ref #779

cmd/micro/micro.go

index a93e8b60cc660593acef6ac302ecaed355491652..cae723996e29f8b800acd347fc24c8ba7c70331b 100644 (file)
@@ -5,10 +5,12 @@ import (
        "fmt"
        "io/ioutil"
        "os"
+       "os/signal"
        "regexp"
        "runtime"
        "sort"
        "strconv"
+       "syscall"
        "time"
 
        "github.com/go-errors/errors"
@@ -269,12 +271,25 @@ func main() {
                os.Exit(1)
        }
 
+       c := make(chan os.Signal, 1)
+       signal.Notify(c, os.Kill, syscall.SIGTERM)
+
+       go func() {
+               <-c
+               if screen.Screen != nil {
+                       screen.Screen.Fini()
+               }
+               os.Exit(0)
+       }()
+
        m := clipboard.SetMethod(config.GetGlobalOption("clipboard").(string))
        clipErr := clipboard.Initialize(m)
 
        defer func() {
                if err := recover(); err != nil {
-                       screen.Screen.Fini()
+                       if screen.Screen != nil {
+                               screen.Screen.Fini()
+                       }
                        fmt.Println("Micro encountered an error:", err)
                        // backup all open buffers
                        for _, b := range buffer.OpenBuffers {