diff --git a/internal/control/cli/controller.go b/internal/control/cli/controller.go index 6f880f69..08a7f772 100644 --- a/internal/control/cli/controller.go +++ b/internal/control/cli/controller.go @@ -116,6 +116,7 @@ func NewController( "x": "delete-rune", "s": "delete-rune-and-insert", "i": "swap-mode-insert", + "a": "swap-mode-insert-append", }, Insert: map[input.Keyspec]input.Actionspec{ "": "move-cursor-rune-left", diff --git a/internal/control/edit/editors/string_editor.go b/internal/control/edit/editors/string_editor.go index e0868752..670ee677 100644 --- a/internal/control/edit/editors/string_editor.go +++ b/internal/control/edit/editors/string_editor.go @@ -24,7 +24,6 @@ type StringEditorControl interface { MoveCursorPastEnd() MoveCursorLeft() MoveCursorRight() - MoveCursorRightA() MoveCursorToNextWordBeginning() MoveCursorToPrevWordBeginning() MoveCursorToNextWordEnd() @@ -156,7 +155,8 @@ func (e *StringEditor) MoveCursorLeft() { // MoveCursorRight moves the cursor one rune to the right. func (e *StringEditor) MoveCursorRight() { nameLen := len([]rune(e.Content)) - if e.CursorPos+1 < nameLen { + allow := (e.Mode == input.TextEditModeInsert && e.CursorPos+1 <= nameLen) || (e.Mode == input.TextEditModeNormal && e.CursorPos+1 < nameLen) + if allow { e.CursorPos++ } } @@ -288,7 +288,8 @@ func (e *StringEditor) CreateInputProcessor(cfg input.InputConfig) (input.ModalI "delete-to-end": e.DeleteToEnd, "delete-to-end-and-insert": func() { e.DeleteToEnd(); enterInsertMode() }, "swap-mode-insert": func() { enterInsertMode() }, - "swap-mode-normal": func() { exitInsertMode() }, + "swap-mode-insert-append": func() { enterInsertMode(); e.MoveCursorRight() }, + "swap-mode-normal": func() { exitInsertMode(); e.MoveCursorLeft() }, } normalModeMappings := map[input.Keyspec]action.Action{}