Separate handleCompletionKeyBinding

This commit is contained in:
c-bata 2018-02-19 23:34:45 +09:00
parent 134d46302a
commit f2ee1fd099

View File

@ -105,31 +105,7 @@ func (p *Prompt) feed(b []byte) (shouldExit bool, exec *Exec) {
// completion
completing := p.completion.Completing()
switch key {
case Down:
if completing {
p.completion.Next()
}
case Tab, ControlI:
p.completion.Next()
case Up:
if completing {
p.completion.Previous()
}
case BackTab:
p.completion.Previous()
case ControlSpace:
return
default:
if s, ok := p.completion.GetSelectedSuggestion(); ok {
w := p.buf.Document().GetWordBeforeCursor()
if w != "" {
p.buf.DeleteBeforeCursor(len([]rune(w)))
}
p.buf.InsertText(s.Text, false, true)
}
p.completion.Reset()
}
p.handleCompletionKeyBinding(key, completing)
switch key {
case Enter, ControlJ, ControlM:
@ -171,6 +147,34 @@ func (p *Prompt) feed(b []byte) (shouldExit bool, exec *Exec) {
return
}
func (p *Prompt) handleCompletionKeyBinding(key Key, completing bool) {
switch key {
case Down:
if completing {
p.completion.Next()
}
case Tab, ControlI:
p.completion.Next()
case Up:
if completing {
p.completion.Previous()
}
case BackTab:
p.completion.Previous()
case ControlSpace:
return
default:
if s, ok := p.completion.GetSelectedSuggestion(); ok {
w := p.buf.Document().GetWordBeforeCursor()
if w != "" {
p.buf.DeleteBeforeCursor(len([]rune(w)))
}
p.buf.InsertText(s.Text, false, true)
}
p.completion.Reset()
}
}
func (p *Prompt) handleKeyBinding(key Key) {
for i := range commonKeyBindings {
kb := commonKeyBindings[i]