From 885c54ed3fd4c7ef583dd3250d1786411199ed02 Mon Sep 17 00:00:00 2001 From: sammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 14 Apr 2021 13:20:03 -0400 Subject: [PATCH] feat: ctrl c to cancel input --- main.go | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/main.go b/main.go index ae27507..2678ec8 100644 --- a/main.go +++ b/main.go @@ -4,10 +4,8 @@ import ( "fmt" "os" "os/user" - "syscall" "os/signal" "strings" - "bufio" "io" hooks "hilbish/golibs/bait" @@ -29,6 +27,7 @@ var commands = map[string]bool{} var aliases = map[string]string{} var bait hooks.Bait var homedir string +var running bool func main() { homedir, _ = os.UserHomeDir() @@ -89,13 +88,14 @@ func main() { } } - HandleSignals() + go HandleSignals() LuaInit(*configflag) readline.Completer = readline.FilenameCompleter readline.LoadHistory(homedir + "/.hilbish-history") for { + running = false input, err := readline.String(fmtPrompt()) if err == io.EOF { // Exit if user presses ^D (ctrl + d) @@ -117,6 +117,7 @@ func main() { if err != nil || !strings.HasSuffix(input, "\\") { break } } } + running = true RunInput(input) termwidth, _, err := term.GetSize(0) @@ -126,12 +127,7 @@ func main() { } func ContinuePrompt(prev string) (string, error) { - fmt.Print(multilinePrompt) - - reader := bufio.NewReader(os.Stdin) - - // TODO: use readline here? - cont, err := reader.ReadString('\n') + cont, err := readline.String(multilinePrompt) if err != nil { fmt.Println("") return "", err @@ -170,9 +166,14 @@ func fmtPrompt() string { // do i even have to say func HandleSignals() { c := make(chan os.Signal) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) - go func() { - <-c - }() + signal.Notify(c, os.Interrupt) + + for range c { + if !running { + fmt.Println(" // interrupt") + readline.ReplaceLine("", 0) + readline.RefreshLine() + } + } }