aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2014-11-20 01:29:47 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2014-11-20 01:29:47 +0100
commit4282e7d6b2f2cd73e93bf478a4aae4ce92481808 (patch)
tree87ab1d9cb0d8601e61e576dd4d5c39cf59854a78
parentd4f8fb3efcb60cc2cd39ecb7ca65706db4c7b6ad (diff)
downloadsciteco-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.cpp4
-rw-r--r--src/qregisters.cpp13
-rw-r--r--src/ring.cpp6
-rw-r--r--src/ring.h6
-rw-r--r--src/search.cpp10
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();
}
diff --git a/src/ring.h b/src/ring.h
index 3b60833..8dc0422 100644
--- a/src/ring.h
+++ b/src/ring.h
@@ -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) {