# HG changeset patch # User Barry Downes # Date 1332805294 -36000 # Node ID 82ce29506f914a550b0282949d9ebae558dc8f48 # Parent c2d2ecd43ea58ecf8284b04ef248131cb2ea06b5 Add the vi-escape-hack boolean variable, which defaults to on. diff -r c2d2ecd43ea5 -r 82ce29506f91 bind.c --- a/bind.c Fri Mar 23 19:27:34 2012 +1000 +++ b/bind.c Tue Mar 27 09:41:34 2012 +1000 @@ -1433,6 +1433,7 @@ { "expand-tilde", &rl_complete_with_tilde_expansion, 0 }, { "history-preserve-point", &_rl_history_preserve_point, 0 }, { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 }, + { "vi-escape-hack", &_rl_vi_escape_hack, 0 }, { "input-meta", &_rl_meta_flag, 0 }, { "mark-directories", &_rl_complete_mark_directories, 0 }, { "mark-modified-lines", &_rl_mark_modified_lines, 0 }, diff -r c2d2ecd43ea5 -r 82ce29506f91 readline.c --- a/readline.c Fri Mar 23 19:27:34 2012 +1000 +++ b/readline.c Tue Mar 27 09:41:34 2012 +1000 @@ -222,6 +222,10 @@ AUDIBLE_BELL, or VISIBLE_BELL. */ int _rl_bell_preference = AUDIBLE_BELL; +/* When enabled, forces immediate reaction to the ESC character in the input, when it + is not followed by any other characters in the input queue. */ +int _rl_vi_escape_hack = 1; + /* String inserted into the line by rl_insert_comment (). */ char *_rl_comment_begin; @@ -821,7 +825,7 @@ will be if an arrow key has been pressed, and, if there's not, just dispatch to (what we assume is) rl_vi_movement_mode right away. This is essentially an input test with a zero timeout. */ - if (rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap + if (_rl_vi_escape_hack && rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap && _rl_input_queued (0) == 0) return (_rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key))); #endif diff -r c2d2ecd43ea5 -r 82ce29506f91 rlprivate.h --- a/rlprivate.h Fri Mar 23 19:27:34 2012 +1000 +++ b/rlprivate.h Tue Mar 27 09:41:34 2012 +1000 @@ -446,6 +446,7 @@ extern int _rl_horizontal_scroll_mode; extern int _rl_mark_modified_lines; extern int _rl_bell_preference; +extern int _rl_vi_escape_hack; extern int _rl_meta_flag; extern int _rl_convert_meta_chars_to_ascii; extern int _rl_output_meta_chars;