aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/cmdline.cpp31
1 files changed, 16 insertions, 15 deletions
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++;