From d3e043ac07d56bff129a0dda3e2a9e233676c1f3 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Tue, 12 Apr 2022 22:14:41 -0400 Subject: [PATCH] fix: make delete word function accurately --- readline/line.go | 24 ++++++++++++++++++++++++ readline/readline.go | 5 +++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/readline/line.go b/readline/line.go index 5b3b282..274d11b 100644 --- a/readline/line.go +++ b/readline/line.go @@ -182,3 +182,27 @@ func (rl *Instance) deleteToEnd() { // Keep everything before the cursor rl.line = rl.line[:rl.pos] } + +func (rl *Instance) emacsForwardWord(tokeniser tokeniser) (adjust int) { + // when emacs has more specific stuff, move this in a file with then + split, index, pos := tokeniser(rl.line, rl.pos) + if len(split) == 0 { + return + } + + word := rTrimWhiteSpace(split[index]) + + switch { + case len(split) == 0: + return + case index == len(split)-1 && pos >= len(word)-1: + return + case pos >= len(word)-1: + word = rTrimWhiteSpace(split[index+1]) + adjust = len(split[index]) - pos + adjust += len(word) + default: + adjust = len(word) - pos + } + return +} diff --git a/readline/readline.go b/readline/readline.go index b4ae201..b897811 100644 --- a/readline/readline.go +++ b/readline/readline.go @@ -785,8 +785,9 @@ func (rl *Instance) escapeSeq(r []rune) { if rl.modeViMode != VimInsert { return } - rl.saveToRegister(rl.viJumpW(tokeniseLine)) - rl.viDeleteByAdjust(rl.viJumpW(tokeniseLine)) + rl.saveToRegister(rl.emacsForwardWord(tokeniseLine)) + // vi delete, emacs forward, funny huh + rl.viDeleteByAdjust(rl.emacsForwardWord(tokeniseLine)) rl.updateHelpers() default: