mirror of https://github.com/rivo/tview.git
Accepting non-alt-mod keys as characters in InputField if they don't have a function. Fixes #176 (hopefully)
This commit is contained in:
parent
380278f41c
commit
60a1c63fa9
|
@ -359,20 +359,26 @@ func (i *InputField) InputHandler() func(event *tcell.EventKey, setFocus func(p
|
||||||
i.cursorPos = len(i.text) - len(regexp.MustCompile(`^\s*\S+\s*`).ReplaceAllString(i.text[i.cursorPos:], ""))
|
i.cursorPos = len(i.text) - len(regexp.MustCompile(`^\s*\S+\s*`).ReplaceAllString(i.text[i.cursorPos:], ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add character function. Returns whether or not the rune character is
|
||||||
|
// accepted.
|
||||||
|
add := func(r rune) bool {
|
||||||
|
newText := i.text[:i.cursorPos] + string(r) + i.text[i.cursorPos:]
|
||||||
|
if i.accept != nil {
|
||||||
|
return i.accept(newText, r)
|
||||||
|
}
|
||||||
|
i.text = newText
|
||||||
|
i.cursorPos += len(string(r))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// Process key event.
|
// Process key event.
|
||||||
switch key := event.Key(); key {
|
switch key := event.Key(); key {
|
||||||
case tcell.KeyRune: // Regular character.
|
case tcell.KeyRune: // Regular character.
|
||||||
modifiers := event.Modifiers()
|
modifiers := event.Modifiers()
|
||||||
if modifiers == tcell.ModNone {
|
if modifiers == tcell.ModNone {
|
||||||
ch := string(event.Rune())
|
if !add(event.Rune()) {
|
||||||
newText := i.text[:i.cursorPos] + ch + i.text[i.cursorPos:]
|
break
|
||||||
if i.accept != nil {
|
|
||||||
if !i.accept(newText, event.Rune()) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
i.text = newText
|
|
||||||
i.cursorPos += len(ch)
|
|
||||||
} else if modifiers&tcell.ModAlt > 0 {
|
} else if modifiers&tcell.ModAlt > 0 {
|
||||||
// We accept some Alt- key combinations.
|
// We accept some Alt- key combinations.
|
||||||
switch event.Rune() {
|
switch event.Rune() {
|
||||||
|
@ -384,6 +390,10 @@ func (i *InputField) InputHandler() func(event *tcell.EventKey, setFocus func(p
|
||||||
moveWordLeft()
|
moveWordLeft()
|
||||||
case 'f': // Move word right.
|
case 'f': // Move word right.
|
||||||
moveWordRight()
|
moveWordRight()
|
||||||
|
default: // Ignore Alt modifier for other keys.
|
||||||
|
if !add(event.Rune()) {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case tcell.KeyCtrlU: // Delete all.
|
case tcell.KeyCtrlU: // Delete all.
|
||||||
|
|
Loading…
Reference in New Issue