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

View File

@ -11,6 +11,7 @@ import (
shellquote "github.com/kballard/go-shellquote" shellquote "github.com/kballard/go-shellquote"
"github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/screen"
"github.com/zyedidia/micro/v2/internal/util"
) )
// ExecCommand executes a command using exec // ExecCommand executes a command using exec
@ -95,28 +96,30 @@ func RunInteractiveShell(input string, wait bool, getOutput bool) (string, error
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
// This is a trap for Ctrl-C so that it doesn't kill micro // 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) c := make(chan os.Signal, 1)
signal.Reset(os.Interrupt)
signal.Notify(c, os.Interrupt) signal.Notify(c, os.Interrupt)
go func() { err = cmd.Start()
for range c { if err == nil {
cmd.Process.Kill() 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("")
} }
}() } else {
screen.TermMessage(err)
cmd.Start() }
err = cmd.Wait()
output := outputBytes.String() 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 // Start the screen back up
screen.TempStart(screenb) screen.TempStart(screenb)
signal.Notify(util.Sigterm, os.Interrupt)
signal.Stop(c)
return output, err return output, err
} }

View File

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

View File

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