Mailing List Archive

[PATCH] vty: Add ctrl-v <literal> to allow, e.g., '?' to be input for regex
From: Paul Jakma <paul.jakma@hpe.com>

* 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
---
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
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev