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); | 
