From 5739daffc8dc5612ec5ba0c2aa4ec5caccc05c83 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Mon, 20 Mar 2023 16:17:43 -0400 Subject: [PATCH] Exit application if input terminal has closed Bump tcell to get access to event error information, and to propagate input EOF errors as event errors. Fixes #2569 Fixes #2148 --- cmd/micro/micro.go | 20 ++++++++++++++++++++ go.mod | 2 +- go.sum | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 0c8e428b..4229a885 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -3,6 +3,7 @@ package main import ( "flag" "fmt" + "io" "io/ioutil" "log" "os" @@ -448,6 +449,25 @@ func DoEvent() { os.Exit(0) } + if e, ok := event.(*tcell.EventError); ok { + log.Println("tcell event error: ", e.Error()) + + if e.Err() == io.EOF { + // shutdown due to terminal closing/becoming inaccessible + for _, b := range buffer.OpenBuffers { + if !b.Modified() { + b.Fini() + } + } + + if screen.Screen != nil { + screen.Screen.Fini() + } + os.Exit(0) + } + return + } + ulua.Lock.Lock() // if event != nil { if action.InfoBar.HasPrompt { diff --git a/go.mod b/go.mod index b221277c..85ea963b 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/zyedidia/clipper v0.1.1 github.com/zyedidia/glob v0.0.0-20170209203856-dd4023a66dc3 github.com/zyedidia/json5 v0.0.0-20200102012142-2da050b1a98d - github.com/zyedidia/tcell/v2 v2.0.10-0.20221007181625-f562052bccb8 + github.com/zyedidia/tcell/v2 v2.0.10-0.20230320201625-54f6acdada4a github.com/zyedidia/terminal v0.0.0-20230315200948-4b3bcf6dddef golang.org/x/text v0.3.8 gopkg.in/yaml.v2 v2.2.8 diff --git a/go.sum b/go.sum index a1b63d59..ea46dc8c 100644 --- a/go.sum +++ b/go.sum @@ -56,6 +56,8 @@ github.com/zyedidia/poller v1.0.1 h1:Tt9S3AxAjXwWGNiC2TUdRJkQDZSzCBNVQ4xXiQ7440s github.com/zyedidia/poller v1.0.1/go.mod h1:vZXJOHGDcuK08GXhF6IAY0ZFd2WcgOR5DOTp84Uk5eE= github.com/zyedidia/tcell/v2 v2.0.10-0.20221007181625-f562052bccb8 h1:53ULv4mmLyQDnqbjVxanckP57WSreWHwTmlLJrJEutY= github.com/zyedidia/tcell/v2 v2.0.10-0.20221007181625-f562052bccb8/go.mod h1:i4NNlquIQXFeNecrOgxDQQJdu+7LmTi3g62asvmwUws= +github.com/zyedidia/tcell/v2 v2.0.10-0.20230320201625-54f6acdada4a h1:W4TWa++Wk6uRGxZoxr2nPX1TpIEl+Wxv0mTtocG4TYc= +github.com/zyedidia/tcell/v2 v2.0.10-0.20230320201625-54f6acdada4a/go.mod h1:i4NNlquIQXFeNecrOgxDQQJdu+7LmTi3g62asvmwUws= github.com/zyedidia/terminal v0.0.0-20230315200948-4b3bcf6dddef h1:LeB4Qs0Tss4r/Qh8pfsTTqagDYHysfKJLYzAH3MVfu0= github.com/zyedidia/terminal v0.0.0-20230315200948-4b3bcf6dddef/go.mod h1:zeb8MJdcCObFKVvur3n2B4BANIPuo2Q8r4iiNs9Enx0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=