From 577f00dfef9d665a7429bdb0b55b0d9701f267f7 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 23 Mar 2022 21:11:24 -0400 Subject: [PATCH] fix(readline): make forward delete work properly --- readline/cursor.go | 4 ++-- readline/line.go | 8 ++++---- readline/readline.go | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/readline/cursor.go b/readline/cursor.go index 262d939..f313ef4 100644 --- a/readline/cursor.go +++ b/readline/cursor.go @@ -100,12 +100,12 @@ func moveCursorBackwards(i int) { printf("\x1b[%dD", i) } -func (rl *Instance) backspace() { +func (rl *Instance) backspace(forward bool) { if len(rl.line) == 0 || rl.pos == 0 { return } - rl.deleteBackspace() + rl.deleteBackspace(forward) } func (rl *Instance) moveCursorByAdjust(adjust int) { diff --git a/readline/line.go b/readline/line.go index 134116f..580ac3d 100644 --- a/readline/line.go +++ b/readline/line.go @@ -125,14 +125,14 @@ func (rl *Instance) deleteX() { rl.updateHelpers() } -func (rl *Instance) deleteBackspace() { +func (rl *Instance) deleteBackspace(forward bool) { switch { case len(rl.line) == 0: return - case rl.pos == 0: - rl.line = rl.line[1:] + case forward: + rl.line = append(rl.line[:rl.pos], rl.line[rl.pos+1:]...) case rl.pos > len(rl.line): - rl.backspace() // There is an infite loop going on here... + rl.backspace(forward) // There is an infite loop going on here... case rl.pos == len(rl.line): rl.pos-- rl.line = rl.line[:rl.pos] diff --git a/readline/readline.go b/readline/readline.go index 7217fd4..056f10c 100644 --- a/readline/readline.go +++ b/readline/readline.go @@ -214,7 +214,7 @@ func (rl *Instance) Readline() (string, error) { // Vim mode has different behaviors if rl.InputMode == Vim { if rl.modeViMode == VimInsert { - rl.backspace() + rl.backspace(false) } else if rl.pos != 0 { rl.pos-- } @@ -223,7 +223,7 @@ func (rl *Instance) Readline() (string, error) { } // Else emacs deletes a character - rl.backspace() + rl.backspace(false) rl.renderHelpers() } @@ -704,7 +704,7 @@ func (rl *Instance) escapeSeq(r []rune) { if rl.modeTabFind { rl.backspaceTabFind() } else { - rl.deleteBackspace() + rl.deleteBackspace(true) } case seqHome, seqHomeSc: if rl.modeTabCompletion {