aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--parser.cpp3
-rw-r--r--qbuffers.cpp23
-rw-r--r--qbuffers.h1
3 files changed, 20 insertions, 7 deletions
diff --git a/parser.cpp b/parser.cpp
index 4ce0f8b..7dcb8a7 100644
--- a/parser.cpp
+++ b/parser.cpp
@@ -1070,8 +1070,7 @@ StateSearch::done(const gchar *str)
QRegister *search_reg = qregisters["_"];
if (*str) {
- undo.push_var<gint>(search_reg->dot);
- undo.push_msg(SCI_UNDO);
+ search_reg->undo_set_string();
search_reg->set_string(str);
} else {
gchar *search_str = search_reg->get_string();
diff --git a/qbuffers.cpp b/qbuffers.cpp
index a2fed34..3421d39 100644
--- a/qbuffers.cpp
+++ b/qbuffers.cpp
@@ -33,6 +33,7 @@ QRegisterTable qregisters;
static QRegister *register_argument = NULL;
+/* FIXME: clean up current_save_dot() usage */
static inline void
current_save_dot(void)
{
@@ -56,7 +57,6 @@ current_edit(void)
void
QRegister::set_string(const gchar *str)
{
- current_save_dot();
edit();
dot = 0;
@@ -67,6 +67,21 @@ QRegister::set_string(const gchar *str)
current_edit();
}
+void
+QRegister::undo_set_string(void)
+{
+ current_save_dot();
+ if (ring.current)
+ ring.current->undo_edit();
+ else if (qregisters.current)
+ qregisters.current->undo_edit();
+
+ undo.push_var<gint>(dot);
+ undo.push_msg(SCI_UNDO);
+
+ undo_edit();
+}
+
gchar *
QRegister::get_string(void)
{
@@ -361,8 +376,7 @@ StateSetQRegString::done(const gchar *str)
{
BEGIN_EXEC(&States::start);
- undo.push_var<gint>(register_argument->dot);
- undo.push_msg(SCI_UNDO);
+ register_argument->undo_set_string();
register_argument->set_string(str);
return &States::start;
@@ -461,8 +475,7 @@ StateCopyToQReg::got_register(QRegister *reg)
tr.lpstrText = (char *)g_malloc(len + 1);
editor_msg(SCI_GETTEXTRANGE, 0, (sptr_t)&tr);
- undo.push_var<gint>(reg->dot);
- undo.push_msg(SCI_UNDO);
+ reg->undo_set_string();
reg->set_string(tr.lpstrText);
g_free(tr.lpstrText);
diff --git a/qbuffers.h b/qbuffers.h
index 9aacaa8..b5b09a5 100644
--- a/qbuffers.h
+++ b/qbuffers.h
@@ -48,6 +48,7 @@ public:
}
void set_string(const gchar *str);
+ void undo_set_string(void);
gchar *get_string(void);
inline void