From 1f6254d363954c2a6b5b5d19390eb1ef9b19cf13 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sat, 16 Feb 2013 17:08:07 +0100 Subject: fixed commandline replacements ensure that undo tokens for first differing characters are actually associated with this character instead of the next. (resulted in strange behaviour on rubout and subsequent replacements) --- src/cmdline.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/cmdline.cpp b/src/cmdline.cpp index e73c148..f374efc 100644 --- a/src/cmdline.cpp +++ b/src/cmdline.cpp @@ -86,7 +86,7 @@ cmdline_keypress(gchar key) cmdline_pos = cmdline ? strlen(cmdline)+1 : 1; String::append(cmdline, insert); - while (cmdline_pos <= (gint)strlen(cmdline)) { + while (cmdline[cmdline_pos-1]) { try { Execute::step(cmdline, cmdline_pos); } catch (ReplaceCmdline &r) { @@ -96,6 +96,7 @@ cmdline_keypress(gchar key) cmdline = r.new_cmdline; cmdline_pos = repl_pos = r.pos; macro_pc = r.pos-1; + continue; } catch (...) { if (old_cmdline) { undo.pop(repl_pos); @@ -104,22 +105,22 @@ cmdline_keypress(gchar key) cmdline = old_cmdline; cmdline[strlen(cmdline)-1] = '\0'; old_cmdline = NULL; - cmdline_pos = repl_pos-1; + cmdline_pos = repl_pos; macro_pc = repl_pos-1; - } else { - /* - * Undo tokens may have been emitted - * (or had to be) before the exception - * is thrown. They must be executed so - * as if the character had never been - * inserted. - */ - undo.pop(cmdline_pos); - cmdline[cmdline_pos-1] = '\0'; - /* program counter could be messed up */ - macro_pc = cmdline_pos - 1; - break; + continue; } + /* + * Undo tokens may have been emitted + * (or had to be) before the exception + * is thrown. They must be executed so + * as if the character had never been + * inserted. + */ + undo.pop(cmdline_pos); + cmdline[cmdline_pos-1] = '\0'; + /* program counter could be messed up */ + macro_pc = cmdline_pos - 1; + break; } cmdline_pos++; -- cgit v1.2.3