From: Paul Jakma <[email protected]> * Support the standard ctrl-v <literal> control sequence. Otherwise there is no way to do this from the venerable telnet vty. vtysh supports this (configurably) via readline. * lib/vty.c: (VTY_ESC_LITERAL) New mode, for ctrl-v. (vty_read) Additional mode to go ctrl-v -> VTY_ESC_LITERAL, and always insert next char.
Acked-by: [email protected] --- doc/basic.texi | 9 +++++++++ lib/vty.c | 21 ++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/doc/basic.texi b/doc/basic.texi index 4485665..92e8d9e 100644 --- a/doc/basic.texi +++ b/doc/basic.texi @@ -552,6 +552,12 @@ Kill line from the beginning, erasing input. @kindex C-t Transpose character. +@item C-v +@kindex C-v +Interpret following character literally. Do not treat it specially. +This can be used to, e.g., type in a literal @kbd{?} rather than do +help completion. + @end table @node CLI Advanced Commands @@ -593,4 +599,7 @@ You can use command line help by typing @code{help} at the beginning of the line. Typing @kbd{?} at any point in the line will show possible completions. +To enter an actual @kbd{?} character rather show completions, e.g. to +enter into a regexp, use @kbd{@key{C}-v ?}. + @end table diff --git a/lib/vty.c b/lib/vty.c index 7ba277f..2c5911a 100644 --- a/lib/vty.c +++ b/lib/vty.c @@ -1340,8 +1340,9 @@ vty_execute (struct vty *vty) #define CONTROL(X) ((X) - '@') #define VTY_NORMAL 0 -#define VTY_PRE_ESCAPE 1 -#define VTY_ESCAPE 2 +#define VTY_PRE_ESCAPE 1 /* Esc seen */ +#define VTY_ESCAPE 2 /* ANSI terminal escape (Esc-[) seen */ +#define VTY_ESC_LITERAL 3 /* Escape next char as literal */ /* Escape character command map. */ static void @@ -1469,7 +1470,14 @@ vty_read (struct thread *thread) vty_escape_map (buf[i], vty); continue; } - + + if (vty->escape == VTY_ESC_LITERAL) + { + vty_self_insert (vty, buf[i]); + vty->escape = VTY_NORMAL; + continue; + } + /* Pre-escape status. */ if (vty->escape == VTY_PRE_ESCAPE) { @@ -1495,6 +1503,10 @@ vty_read (struct thread *thread) vty_backward_kill_word (vty); vty->escape = VTY_NORMAL; break; + case '?': + vty_self_insert (vty, buf[i]); + vty->escape = VTY_NORMAL; + break; default: vty->escape = VTY_NORMAL; break; @@ -1541,6 +1553,9 @@ vty_read (struct thread *thread) case CONTROL('U'): vty_kill_line_from_beginning (vty); break; + case CONTROL('V'): + vty->escape = VTY_ESC_LITERAL; + break; case CONTROL('W'): vty_backward_kill_word (vty); break; -- 2.7.4 _______________________________________________ Quagga-dev mailing list [email protected] https://lists.quagga.net/mailman/listinfo/quagga-dev
