From e2ed56126438747c2b24d9b1d8ec84788303939c Mon Sep 17 00:00:00 2001 From: Michael Steinert Date: Wed, 30 Nov 2016 14:28:43 -0600 Subject: [PATCH] Fixes behavior of 'x' in normal mode After 'x' is used to delete a character at the end of a line the cursor should be repositioned at the last character, i.e. repeatedly pressing 'x' in normal mode should delete the entire string. --- src/reader.cpp | 3 +++ tests/bind.expect | 12 ++++++++++++ tests/bind.expect.out | 1 + 3 files changed, 16 insertions(+) diff --git a/src/reader.cpp b/src/reader.cpp index 449a5550c..58fa2496a 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -2746,6 +2746,9 @@ const wchar_t *reader_readline(int nchars) { if (el->position < el->size()) { update_buff_pos(el, el->position + 1); remove_backward(); + if (el->position > 0 && el->position == el->size()) { + update_buff_pos(el, el->position - 1); + } } break; } diff --git a/tests/bind.expect b/tests/bind.expect index 00da321c6..3f0508ddb 100644 --- a/tests/bind.expect +++ b/tests/bind.expect @@ -92,6 +92,18 @@ expect_prompt -re {\r\nTAXT\r\n} { puts stderr "vi mode replace char, default timeout: long delay" } +# Test deleting characters with 'x'. +send "echo MORE-TEXT" +send "\033" +# Delay needed to allow fish to transition to vi "normal" mode. +sleep 0.150 +send "xxxxx\r" +expect_prompt -re {\r\nMORE\r\n} { + puts "vi mode delete char, default timeout: long delay" +} unmatched { + puts stderr "vi mode delete char, default timeout: long delay" +} + # Verify that changing the escape timeout has an effect. send "set -g fish_escape_delay_ms 200\r" expect_prompt diff --git a/tests/bind.expect.out b/tests/bind.expect.out index b9ff26444..e04e9bd3a 100644 --- a/tests/bind.expect.out +++ b/tests/bind.expect.out @@ -5,6 +5,7 @@ prime vi mode, default timeout vi-mode default timeout set correctly vi replace line, default timeout: long delay vi mode replace char, default timeout: long delay +vi mode delete char, default timeout: long delay vi replace line, 100ms timeout: long delay vi replace line, 100ms timeout: short delay t-binding success