diff options
-rw-r--r-- | parser.cpp | 3 | ||||
-rw-r--r-- | qbuffers.cpp | 23 | ||||
-rw-r--r-- | qbuffers.h | 1 |
3 files changed, 20 insertions, 7 deletions
@@ -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); @@ -48,6 +48,7 @@ public: } void set_string(const gchar *str); + void undo_set_string(void); gchar *get_string(void); inline void |