vty: Add ctrl-v <literal> to allow, e.g., '?' to be input for regex
* 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: Vincent.Jardin@6wind.com
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 @@
@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 @@
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 afaf2b0..7ca8354 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -1386,8 +1386,9 @@
#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_LITERAL 3 /* Next char taken as literal */
/* Escape character command map. */
static void
@@ -1515,7 +1516,14 @@
vty_escape_map (buf[i], vty);
continue;
}
-
+
+ if (vty->escape == VTY_LITERAL)
+ {
+ vty_self_insert (vty, buf[i]);
+ vty->escape = VTY_NORMAL;
+ continue;
+ }
+
/* Pre-escape status. */
if (vty->escape == VTY_PRE_ESCAPE)
{
@@ -1587,6 +1595,9 @@
case CONTROL('U'):
vty_kill_line_from_beginning (vty);
break;
+ case CONTROL('V'):
+ vty->escape = VTY_LITERAL;
+ break;
case CONTROL('W'):
vty_backward_kill_word (vty);
break;