From 52a8d7ff2b7454865b486c0f972395b6ccffd31a Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Tue, 16 Feb 2016 03:34:55 +0100 Subject: fixed function key macros and command reinsertion after ^[ * one would expect function key macros masked for the start state to work after ^[ ($), but since it has its own state now, this was broken since f08187e454f56954b41d95615ca2e370ba19667e. * Similarily command reinsertion would reinsert too much after $, since the parser wouldn't be in the "real" start state. * The "escape" state should be handled like the start state (where new commands can begin) from the perspective of the user -- the difference is not even documented, it's an implementation detail. --- src/cmdline.cpp | 4 ++-- src/parser.h | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/cmdline.cpp b/src/cmdline.cpp index 271e2be..8c5bc42 100644 --- a/src/cmdline.cpp +++ b/src/cmdline.cpp @@ -391,7 +391,7 @@ Cmdline::process_edit_cmd(gchar key) /* reinsert command */ do insert(); - while (States::current != &States::start && rubout_len); + while (!States::is_start() && rubout_len); } else { /* rubout command */ rubout_command(); @@ -565,7 +565,7 @@ Cmdline::fnmacro(const gchar *name) goto default_action; mask = reg->get_integer(); - if (States::current == &States::start) { + if (States::is_start()) { if (mask & FNMACRO_MASK_START) return; } else if (States::is_string()) { diff --git a/src/parser.h b/src/parser.h index b502f46..b18e13c 100644 --- a/src/parser.h +++ b/src/parser.h @@ -332,6 +332,17 @@ namespace States { extern State *current; + static inline bool + is_start() + { + /* + * The "escape" state exists only as a hack, + * to support $$. Otherwise it should behave + * like the start state. + */ + return current == &start || current == &escape; + } + static inline bool is_string() { -- cgit v1.2.3