go-prompt/prompt/key_binding.go
2017-07-15 17:45:25 +09:00

54 lines
967 B
Go

package prompt
var InputHandler = defaultHandler
func defaultHandler(ac *ASCIICode, buffer *Buffer, out *VT100Writer) {
switch ac.Key {
case Left:
l := buffer.CursorLeft(1)
if l == 0 {
return
}
out.EraseLine()
out.EraseDown()
after := buffer.Document().CurrentLine()
out.WriteStr(after)
out.CursorBackward(len(after) - buffer.CursorPosition)
case Right:
l := buffer.CursorRight(1)
if l == 0 {
return
}
out.CursorForward(l)
out.WriteRaw(ac.ASCIICode)
out.EraseDown()
after := buffer.Document().TextAfterCursor()
out.WriteStr(after)
case Backspace:
deleted := buffer.DeleteBeforeCursor(1)
if deleted == "" {
return
}
out.CursorBackward(1)
out.EraseDown()
after := buffer.Document().TextAfterCursor()
out.WriteStr(after)
case ControlI: // this is equivalent with TabKey.
fallthrough
case Tab:
break
case ControlT:
break
return
case Up:
break
case Down:
break
default:
break
}
return
}