aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp3
-rw-r--r--src/parser.cpp40
-rw-r--r--src/parser.h2
3 files changed, 20 insertions, 25 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 42ebc71..b8e87a0 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -231,6 +231,9 @@ main(int argc, char **argv)
/*
* If munged file didn't quit, switch into interactive mode
*/
+ /* commandline replacement string register */
+ QRegisters::globals.initialize("\x1B");
+
Goto::table = &cmdline_goto_table;
interface.ssm(SCI_EMPTYUNDOBUFFER);
undo.enabled = true;
diff --git a/src/parser.cpp b/src/parser.cpp
index d63f0f7..314c156 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -170,9 +170,11 @@ Execute::file(const gchar *filename, bool locals)
return true;
}
-ReplaceCmdline::ReplaceCmdline(gchar *_new_cmdline)
- : new_cmdline(_new_cmdline)
+ReplaceCmdline::ReplaceCmdline()
{
+ QRegister *cmdline_reg = QRegisters::globals["\x1B"];
+
+ new_cmdline = cmdline_reg->get_string();
for (pos = 0; cmdline[pos] && cmdline[pos] == new_cmdline[pos]; pos++);
pos++;
}
@@ -832,45 +834,35 @@ StateStart::custom(gchar chr) throw (Error, ReplaceCmdline)
/*
* Command-line editing
*/
- case '{': {
- void *document;
-
+ case '{':
BEGIN_EXEC(this);
if (!undo.enabled)
throw Error("Command-line editing only possible in "
"interactive mode");
- current_save_dot();
-
if (ring.current)
- ring.current->undo_edit();
- else if (QRegisters::current)
- QRegisters::current->undo_edit();
+ ring.undo_edit();
+ else /* QRegisters::current != NULL */
+ QRegisters::undo_edit();
+ QRegisters::globals.edit("\x1B");
- document = (void *)interface.ssm(SCI_CREATEDOCUMENT);
- interface.ssm(SCI_SETDOCPOINTER, 0, (sptr_t)document);
+ interface.ssm(SCI_BEGINUNDOACTION);
+ interface.ssm(SCI_CLEARALL);
interface.ssm(SCI_ADDTEXT, cmdline_pos-1, (sptr_t)cmdline);
+ /* FIXME: scroll into view */
+ interface.ssm(SCI_ENDUNDOACTION);
- undo.push_msg(SCI_RELEASEDOCUMENT, 0, (sptr_t)document);
+ undo.push_msg(SCI_UNDO);
break;
- }
-
- case '}': {
- gint size;
- gchar *new_cmdline;
+ case '}':
BEGIN_EXEC(this);
if (!undo.enabled)
throw Error("Command-line editing only possible in "
"interactive mode");
- size = interface.ssm(SCI_GETLENGTH) + 1;
- new_cmdline = (gchar *)g_malloc(size);
- interface.ssm(SCI_GETTEXT, size, (sptr_t)new_cmdline);
-
/* replace cmdline in the outer macro environment */
- throw ReplaceCmdline(new_cmdline);
- }
+ throw ReplaceCmdline();
/*
* modifiers
diff --git a/src/parser.h b/src/parser.h
index 865cf85..d2e570b 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -32,7 +32,7 @@ public:
gchar *new_cmdline;
gint pos;
- ReplaceCmdline(gchar *_new_cmdline);
+ ReplaceCmdline();
};
class State {