diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2014-11-20 01:29:47 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2014-11-20 01:29:47 +0100 |
commit | 4282e7d6b2f2cd73e93bf478a4aae4ce92481808 (patch) | |
tree | 87ab1d9cb0d8601e61e576dd4d5c39cf59854a78 | |
parent | d4f8fb3efcb60cc2cd39ecb7ca65706db4c7b6ad (diff) | |
download | sciteco-4282e7d6b2f2cd73e93bf478a4aae4ce92481808.tar.gz |
allow a current buffer if we're editing a Q-Register
this eases handling of the "*" register
-rw-r--r-- | src/parser.cpp | 4 | ||||
-rw-r--r-- | src/qregisters.cpp | 13 | ||||
-rw-r--r-- | src/ring.cpp | 6 | ||||
-rw-r--r-- | src/ring.h | 6 | ||||
-rw-r--r-- | src/search.cpp | 10 |
5 files changed, 23 insertions, 16 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 575fc78..90447d4 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1811,8 +1811,8 @@ StateECommand::custom(gchar chr) */ case 'F': BEGIN_EXEC(&States::start); - if (!ring.current) - throw Error("No buffer selected"); + if (QRegisters::current) + throw Error("Q-Register currently edited"); if (IS_FAILURE(expressions.pop_num_calc()) && ring.current->dirty) diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 98edb0b..fdb804b 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -228,9 +228,6 @@ QRegisterBufferInfo::get_integer(void) { tecoInt id = 1; - if (!ring.current) - return 0; - for (Buffer *buffer = ring.first(); buffer != ring.current; buffer = buffer->next()) @@ -242,7 +239,7 @@ QRegisterBufferInfo::get_integer(void) gchar * QRegisterBufferInfo::get_string(void) { - return g_strdup(ring.current ? ring.current->filename : ""); + return g_strdup(ring.current->filename ? : ""); } void @@ -252,7 +249,7 @@ QRegisterBufferInfo::edit(void) QRegisters::view.ssm(SCI_BEGINUNDOACTION); QRegisters::view.ssm(SCI_SETTEXT, 0, - (sptr_t)(ring.current ? ring.current->filename : "")); + (sptr_t)(ring.current->filename ? : "")); QRegisters::view.ssm(SCI_ENDUNDOACTION); QRegisters::view.undo_ssm(SCI_UNDO); @@ -267,12 +264,14 @@ QRegisterTable::QRegisterTable(bool _undo) : RBTree(), must_undo(_undo) insert(q); } +/* + * NOTE: by not making this inline, + * we can access QRegisters::current + */ void QRegisterTable::edit(QRegister *reg) { reg->edit(); - - ring.current = NULL; QRegisters::current = reg; } diff --git a/src/ring.cpp b/src/ring.cpp index 492845f..1c7087e 100644 --- a/src/ring.cpp +++ b/src/ring.cpp @@ -201,7 +201,7 @@ Ring::find(tecoInt id) void Ring::dirtify(void) { - if (!current || current->dirty) + if (QRegisters::current || current->dirty) return; interface.undo_info_update(current); @@ -746,9 +746,9 @@ StateSaveFile::done(const gchar *str) void current_doc_undo_edit(void) { - if (ring.current) + if (!QRegisters::current) ring.undo_edit(); - else if (QRegisters::current) + else undo.push_var(QRegisters::current)->undo_edit(); } @@ -253,7 +253,11 @@ void current_doc_undo_edit(void); static inline bool current_doc_must_undo(void) { - return ring.current || + /* + * If there's no currently edited Q-Register + * we must be editing the current buffer + */ + return !QRegisters::current || QRegisters::current->must_undo; } diff --git a/src/search.cpp b/src/search.cpp index 77a563a..37ca746 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -147,7 +147,7 @@ StateSearch::initial(void) } } - parameters.from_buffer = ring.current; + parameters.from_buffer = QRegisters::current ? NULL : ring.current; parameters.to_buffer = NULL; } @@ -442,7 +442,8 @@ StateSearch::process(const gchar *str, gint new_chars) if (!re) goto failure; - if (ring.current != parameters.from_buffer) { + if (!QRegisters::current && + ring.current != parameters.from_buffer) { ring.undo_edit(); parameters.from_buffer->edit(); } @@ -597,7 +598,10 @@ StateSearchAll::initial(void) } else { parameters.count = (gint)v2; /* NOTE: on Q-Registers, behave like "S" */ - parameters.from_buffer = parameters.to_buffer = ring.current; + if (QRegisters::current) + parameters.from_buffer = parameters.to_buffer = NULL; + else + parameters.from_buffer = parameters.to_buffer = ring.current; } if (parameters.count >= 0) { |