aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-12-14 09:20:07 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2015-01-13 11:54:51 -0300
commit3e83e44792021fb9d18acbb664172ce9a06dc9be (patch)
treef0e784a94f3ec26d01f50c6b8269f15e013d6212
parent17b211d288203ef394fc0dbf7b73a6cbf761921b (diff)
downloadrneovim-3e83e44792021fb9d18acbb664172ce9a06dc9be.tar.gz
rneovim-3e83e44792021fb9d18acbb664172ce9a06dc9be.tar.bz2
rneovim-3e83e44792021fb9d18acbb664172ce9a06dc9be.zip
input: Ignore invalid "<" key sequences
Ignoring invalid key sequences simplifies input handling in UIs. The only downside is having to use "<lt>" everytime a "<" is needed on functional tests.
-rw-r--r--src/nvim/os/input.c10
-rw-r--r--test/functional/legacy/066_visual_block_tab_spec.lua10
2 files changed, 13 insertions, 7 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c
index c0d588f4ef..130e239a34 100644
--- a/src/nvim/os/input.c
+++ b/src/nvim/os/input.c
@@ -187,14 +187,20 @@ size_t input_enqueue(String keys)
unsigned int new_size = trans_special((uint8_t **)&ptr, buf, false);
if (!new_size) {
+ if (*ptr == '<') {
+ // Invalid key sequence, skip until the next '>' or until *end
+ do {
+ ptr++;
+ } while (ptr < end && *ptr != '>');
+ ptr++;
+ continue;
+ }
// copy the character unmodified
*buf = (uint8_t)*ptr++;
new_size = 1;
}
new_size = handle_mouse_event(&ptr, buf, new_size);
- // TODO(tarruda): Don't produce past unclosed '<' characters, except if
- // there's a lot of characters after the '<'
rbuffer_write(input_buffer, (char *)buf, new_size);
}
diff --git a/test/functional/legacy/066_visual_block_tab_spec.lua b/test/functional/legacy/066_visual_block_tab_spec.lua
index cd283e6746..82bb988c67 100644
--- a/test/functional/legacy/066_visual_block_tab_spec.lua
+++ b/test/functional/legacy/066_visual_block_tab_spec.lua
@@ -23,18 +23,18 @@ describe('visual block shift and tab characters', function()
abcdefghijklmnopqrstuvwxyz]])
feed('gg')
- feed([[fe<C-v>4jR<esc>ugvr1:'<,'>yank A<cr>]])
+ feed([[fe<C-v>4jR<esc>ugvr1:'<lt>,'>yank A<cr>]])
execute('/^abcdefgh')
- feed('<C-v>4jI <esc>j<<11|D')
+ feed('<C-v>4jI <esc>j<lt><lt>11|D')
feed('j7|a <esc>')
feed('j7|a <esc>')
- feed('j7|a <esc>4k13|<C-v>4j<')
+ feed('j7|a <esc>4k13|<C-v>4j<lt>')
execute('$-5,$yank A')
execute([[$-4,$s/\s\+//g]])
- feed('<C-v>4kI <esc>j<<')
+ feed('<C-v>4kI <esc>j<lt><lt>')
feed('j7|a <esc>')
feed('j7|a <esc>')
- feed('j7|a <esc>4k13|<C-v>4j3<')
+ feed('j7|a <esc>4k13|<C-v>4j3<lt>')
execute('$-4,$yank A')
-- Put @a and clean empty lines