Compare commits

...

6 Commits

Author SHA1 Message Date
Mikko
df09b8a87a
Merge e559992309 into dc7759204b 2024-07-06 02:25:55 +01:00
Dmytro Maluka
dc7759204b
Merge pull request #3357 from niten94/shell-sigint-recv
Receive SIGINT only in RunInteractiveShell
2024-06-28 10:37:41 +02:00
niten94
a84aa225ab Return error with start in RunInteractiveShell
Print and return error with process start in RunInteractiveShell if
process was not able to be started. Wait until enter is pressed even if
`wait` is false.

Co-authored-by: Dmitry Maluka <dmitrymaluka@gmail.com>
2024-06-22 21:21:13 +08:00
niten94
f05d3582b3 Receive SIGINT only in RunInteractiveShell
Temporarily reset SIGINT signal handlers and receive SIGINT in
RunInteractiveShell. Do not try to kill the process in micro when signal
is received.
2024-06-17 19:07:10 +08:00
niten94
26ae1b95cc Move sigterm channel to internal/util 2024-06-17 18:08:18 +08:00
Andriamanitra
e559992309 List more bindable actions in help keybindings 2024-01-23 03:37:25 +02:00
4 changed files with 27 additions and 18 deletions

View File

@ -40,8 +40,7 @@ var (
flagClean = flag.Bool("clean", false, "Clean configuration directory")
optionFlags map[string]*string
sigterm chan os.Signal
sighup chan os.Signal
sighup chan os.Signal
timerChan chan func()
)
@ -360,9 +359,9 @@ func main() {
screen.Events = make(chan tcell.Event)
sigterm = make(chan os.Signal, 1)
util.Sigterm = make(chan os.Signal, 1)
sighup = make(chan os.Signal, 1)
signal.Notify(sigterm, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGABRT)
signal.Notify(util.Sigterm, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGABRT)
signal.Notify(sighup, syscall.SIGHUP)
timerChan = make(chan func())
@ -437,7 +436,7 @@ func DoEvent() {
}
}
os.Exit(0)
case <-sigterm:
case <-util.Sigterm:
for _, b := range buffer.OpenBuffers {
if !b.Modified() {
b.Fini()

View File

@ -11,6 +11,7 @@ import (
shellquote "github.com/kballard/go-shellquote"
"github.com/zyedidia/micro/v2/internal/screen"
"github.com/zyedidia/micro/v2/internal/util"
)
// ExecCommand executes a command using exec
@ -95,28 +96,30 @@ func RunInteractiveShell(input string, wait bool, getOutput bool) (string, error
cmd.Stderr = os.Stderr
// This is a trap for Ctrl-C so that it doesn't kill micro
// Instead we trap Ctrl-C to kill the program we're running
// micro is killed if the signal is ignored only on Windows, so it is
// received
c := make(chan os.Signal, 1)
signal.Reset(os.Interrupt)
signal.Notify(c, os.Interrupt)
go func() {
for range c {
cmd.Process.Kill()
err = cmd.Start()
if err == nil {
err = cmd.Wait()
if wait {
// This is just so we don't return right away and let the user press enter to return
screen.TermMessage("")
}
}()
cmd.Start()
err = cmd.Wait()
} else {
screen.TermMessage(err)
}
output := outputBytes.String()
if wait {
// This is just so we don't return right away and let the user press enter to return
screen.TermMessage("")
}
// Start the screen back up
screen.TempStart(screenb)
signal.Notify(util.Sigterm, os.Interrupt)
signal.Stop(c)
return output, err
}

View File

@ -41,6 +41,8 @@ var (
// Stdout is a buffer that is written to stdout when micro closes
Stdout *bytes.Buffer
// Sigterm is a channel where micro exits when written
Sigterm chan os.Signal
)
func init() {

View File

@ -193,6 +193,7 @@ DeleteSubWordLeft
SelectLine
SelectToStartOfLine
SelectToEndOfLine
Deselect
InsertNewline
InsertSpace
Backspace
@ -240,12 +241,16 @@ ParagraphNext
ToggleHelp
ToggleDiffGutter
ToggleRuler
ToggleKeyMenu
ToggleHighlightSearch
JumpLine
ClearInfo
ClearStatus
ShellMode
CommandMode
Quit
QuitAll
ForceQuit
AddTab
PreviousTab
NextTab