mirror of
https://github.com/zyedidia/micro.git
synced 2026-03-29 22:27:13 +09:00
Handle SIGHUP properly
Fixes #2085 Not the nicest solution but it will do for now.
This commit is contained in:
@@ -40,6 +40,9 @@ var (
|
|||||||
flagPlugin = flag.String("plugin", "", "Plugin command")
|
flagPlugin = flag.String("plugin", "", "Plugin command")
|
||||||
flagClean = flag.Bool("clean", false, "Clean configuration directory")
|
flagClean = flag.Bool("clean", false, "Clean configuration directory")
|
||||||
optionFlags map[string]*string
|
optionFlags map[string]*string
|
||||||
|
|
||||||
|
sigterm chan os.Signal
|
||||||
|
sighup chan os.Signal
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitFlags() {
|
func InitFlags() {
|
||||||
@@ -272,23 +275,10 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
c := make(chan os.Signal, 1)
|
sigterm = make(chan os.Signal, 1)
|
||||||
signal.Notify(c, syscall.SIGTERM)
|
sighup = make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sigterm, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT)
|
||||||
go func() {
|
signal.Notify(sighup, syscall.SIGHUP)
|
||||||
<-c
|
|
||||||
|
|
||||||
for _, b := range buffer.OpenBuffers {
|
|
||||||
if !b.Modified() {
|
|
||||||
b.Fini()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if screen.Screen != nil {
|
|
||||||
screen.Screen.Fini()
|
|
||||||
}
|
|
||||||
os.Exit(0)
|
|
||||||
}()
|
|
||||||
|
|
||||||
m := clipboard.SetMethod(config.GetGlobalOption("clipboard").(string))
|
m := clipboard.SetMethod(config.GetGlobalOption("clipboard").(string))
|
||||||
clipErr := clipboard.Initialize(m)
|
clipErr := clipboard.Initialize(m)
|
||||||
@@ -427,6 +417,24 @@ func DoEvent() {
|
|||||||
for len(screen.DrawChan()) > 0 {
|
for len(screen.DrawChan()) > 0 {
|
||||||
<-screen.DrawChan()
|
<-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()
|
ulua.Lock.Lock()
|
||||||
|
|||||||
Reference in New Issue
Block a user