diff options
author | Tulir Asokan <tulir@maunium.net> | 2018-03-17 14:32:01 +0200 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2018-03-17 14:32:01 +0200 |
commit | ba379a1b4a97ee7eb56bed726f1c4edd76f76bb8 (patch) | |
tree | 57f02a6d8a2ff8bf8151c6928e2918add017b7fd /advanced-inputfield.go | |
parent | dacc7fd6a310d3945bc61983ec218d083900a98d (diff) |
Add basic username/id autocompletion
Diffstat (limited to 'advanced-inputfield.go')
-rw-r--r-- | advanced-inputfield.go | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/advanced-inputfield.go b/advanced-inputfield.go index 97fbfab..8b5b47a 100644 --- a/advanced-inputfield.go +++ b/advanced-inputfield.go @@ -79,7 +79,7 @@ type AdvancedInputField struct { done func(tcell.Key) // An optional function which is called when the user presses tab. - tabComplete func(text string, cursorOffset int) + tabComplete func(text string, cursorOffset int) string } // NewAdvancedInputField returns a new input field. @@ -205,7 +205,7 @@ func (field *AdvancedInputField) SetDoneFunc(handler func(key tcell.Key)) *Advan return field } -func (field *AdvancedInputField) SetTabCompleteFunc(handler func(text string, cursorOffset int)) *AdvancedInputField { +func (field *AdvancedInputField) SetTabCompleteFunc(handler func(text string, cursorOffset int) string) *AdvancedInputField { field.tabComplete = handler return field } @@ -429,7 +429,12 @@ func (field *AdvancedInputField) InputHandler() func(event *tcell.EventKey, setF } case tcell.KeyTab: // Tab-completion if field.tabComplete != nil { - field.tabComplete(field.text, field.cursorOffset) + oldWidth := runewidth.StringWidth(field.text) + field.text = field.tabComplete(field.text, field.cursorOffset) + newWidth := runewidth.StringWidth(field.text) + if oldWidth != newWidth { + field.cursorOffset += newWidth - oldWidth + } } case tcell.KeyEnter, tcell.KeyEscape: // We're done. if field.done != nil { |