diff options
-rw-r--r-- | qbuffers.cpp | 24 | ||||
-rw-r--r-- | qbuffers.h | 9 |
2 files changed, 31 insertions, 2 deletions
diff --git a/qbuffers.cpp b/qbuffers.cpp index 42ac436..a3b4651 100644 --- a/qbuffers.cpp +++ b/qbuffers.cpp @@ -108,6 +108,21 @@ QRegisterData::undo_set_string(void) undo_edit(); } +void +QRegisterData::append_string(const gchar *str) +{ + if (!str) + return; + + edit(); + + interface.ssm(SCI_BEGINUNDOACTION); + interface.ssm(SCI_APPENDTEXT, strlen(str), (sptr_t)str); + interface.ssm(SCI_ENDUNDOACTION); + + current_edit(); +} + gchar * QRegisterData::get_string(void) { @@ -903,8 +918,13 @@ StateCopyToQReg::got_register(QRegister *reg) throw (Error) tr.lpstrText = (char *)g_malloc(len + 1); interface.ssm(SCI_GETTEXTRANGE, 0, (sptr_t)&tr); - reg->undo_set_string(); - reg->set_string(tr.lpstrText); + if (eval_colon()) { + reg->undo_append_string(); + reg->append_string(tr.lpstrText); + } else { + reg->undo_set_string(); + reg->set_string(tr.lpstrText); + } g_free(tr.lpstrText); return &States::start; @@ -78,6 +78,12 @@ public: virtual void set_string(const gchar *str); virtual void undo_set_string(void); + virtual void append_string(const gchar *str); + virtual inline void + undo_append_string(void) + { + undo_set_string(); + } virtual gchar *get_string(void); virtual void edit(void); @@ -124,6 +130,9 @@ public: void set_string(const gchar *str) {} void undo_set_string(void) {} + void append_string(const gchar *str) {} + void undo_append_string(void) {} + gchar *get_string(void); void edit(void); |