Update prompt
This commit is contained in:
parent
bd3464ce4d
commit
2eab51d9f7
39
prompt.go
39
prompt.go
@ -52,7 +52,7 @@ func (p *Prompt) Run() {
|
|||||||
bufCh := make(chan []byte, 128)
|
bufCh := make(chan []byte, 128)
|
||||||
go readBuffer(bufCh)
|
go readBuffer(bufCh)
|
||||||
|
|
||||||
exitCh := make(chan struct{})
|
exitCh := make(chan int)
|
||||||
winSizeCh := make(chan *WinSize)
|
winSizeCh := make(chan *WinSize)
|
||||||
go handleSignals(p.in, exitCh, winSizeCh)
|
go handleSignals(p.in, exitCh, winSizeCh)
|
||||||
|
|
||||||
@ -77,8 +77,9 @@ func (p *Prompt) Run() {
|
|||||||
p.renderer.UpdateWinSize(w)
|
p.renderer.UpdateWinSize(w)
|
||||||
completions := p.completer(p.buf.Text())
|
completions := p.completer(p.buf.Text())
|
||||||
p.renderer.Render(p.buf, completions, p.maxCompletions, p.selected)
|
p.renderer.Render(p.buf, completions, p.maxCompletions, p.selected)
|
||||||
case <-exitCh:
|
case code := <-exitCh:
|
||||||
return
|
p.tearDown()
|
||||||
|
os.Exit(code)
|
||||||
default:
|
default:
|
||||||
time.Sleep(10 * time.Millisecond)
|
time.Sleep(10 * time.Millisecond)
|
||||||
}
|
}
|
||||||
@ -117,11 +118,9 @@ func (p *Prompt) feed(b []byte) (shouldExecute, shouldExit bool, input string) {
|
|||||||
fallthrough
|
fallthrough
|
||||||
case BackTab:
|
case BackTab:
|
||||||
p.selected -= 1
|
p.selected -= 1
|
||||||
case ControlI:
|
|
||||||
fallthrough
|
|
||||||
case Down:
|
case Down:
|
||||||
fallthrough
|
fallthrough
|
||||||
case Tab:
|
case Tab, ControlI:
|
||||||
p.selected += 1
|
p.selected += 1
|
||||||
case Left:
|
case Left:
|
||||||
p.buf.CursorLeft(1)
|
p.buf.CursorLeft(1)
|
||||||
@ -180,11 +179,10 @@ func readBuffer(bufCh chan []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleSignals(in ConsoleParser, exitCh chan struct{}, winSizeCh chan *WinSize) {
|
func handleSignals(in ConsoleParser, exitCh chan int, winSizeCh chan *WinSize) {
|
||||||
sigCh := make(chan os.Signal, 1)
|
sigCh := make(chan os.Signal, 1)
|
||||||
signal.Notify(
|
signal.Notify(
|
||||||
sigCh,
|
sigCh,
|
||||||
syscall.SIGHUP,
|
|
||||||
syscall.SIGINT,
|
syscall.SIGINT,
|
||||||
syscall.SIGTERM,
|
syscall.SIGTERM,
|
||||||
syscall.SIGQUIT,
|
syscall.SIGQUIT,
|
||||||
@ -194,24 +192,23 @@ func handleSignals(in ConsoleParser, exitCh chan struct{}, winSizeCh chan *WinSi
|
|||||||
for {
|
for {
|
||||||
s := <-sigCh
|
s := <-sigCh
|
||||||
switch s {
|
switch s {
|
||||||
// kill -SIGHUP XXXX
|
case syscall.SIGINT: // kill -SIGINT XXXX or Ctrl+c
|
||||||
case syscall.SIGHUP:
|
log.Println("SIGNAL: Catch SIGINT")
|
||||||
exitCh <- struct{}{}
|
exitCh <- 0
|
||||||
|
|
||||||
// kill -SIGINT XXXX or Ctrl+c
|
case syscall.SIGTERM: // kill -SIGTERM XXXX
|
||||||
case syscall.SIGINT:
|
log.Println("SIGNAL: Catch SIGTERM")
|
||||||
exitCh <- struct{}{}
|
exitCh <- 1
|
||||||
|
|
||||||
// kill -SIGTERM XXXX
|
case syscall.SIGQUIT: // kill -SIGQUIT XXXX
|
||||||
case syscall.SIGTERM:
|
log.Println("SIGNAL: Catch SIGQUIT")
|
||||||
exitCh <- struct{}{}
|
exitCh <- 0
|
||||||
|
|
||||||
// kill -SIGQUIT XXXX
|
|
||||||
case syscall.SIGQUIT:
|
|
||||||
exitCh <- struct{}{}
|
|
||||||
|
|
||||||
case syscall.SIGWINCH:
|
case syscall.SIGWINCH:
|
||||||
|
log.Println("SIGNAL: Catch SIGWINCH")
|
||||||
winSizeCh <- in.GetWinSize()
|
winSizeCh <- in.GetWinSize()
|
||||||
|
|
||||||
|
// TODO: SIGUSR1 -> Reopen log file.
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user