aboutsummaryrefslogtreecommitdiffhomepage
path: root/qbuffers.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-11 04:03:14 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-11 04:03:14 +0100
commit46316ece115c100a8146303957a3bec07a1d2dde (patch)
tree9486c8e0a2b623a7db36af8840cfce5a489e2b90 /qbuffers.cpp
parentd6593762d97bf44f3a398dc4fae714a9e20a24b2 (diff)
downloadsciteco-46316ece115c100a8146303957a3bec07a1d2dde.tar.gz
Q-Register table and EQx command
Diffstat (limited to 'qbuffers.cpp')
-rw-r--r--qbuffers.cpp49
1 files changed, 47 insertions, 2 deletions
diff --git a/qbuffers.cpp b/qbuffers.cpp
index d9eba9f..c907330 100644
--- a/qbuffers.cpp
+++ b/qbuffers.cpp
@@ -16,10 +16,34 @@
#include "qbuffers.h"
namespace States {
- StateFile file;
+ StateFile file;
+ StateEQCommand eqcommand;
}
Ring ring;
+QRegisterTable qregisters;
+
+void
+QRegisterTable::initialize(void)
+{
+ /* general purpose registers */
+ for (gchar q = 'A'; q <= 'Z'; q++)
+ initialize_register((gchar []){q, '\0'});
+ for (gchar q = '0'; q <= '9'; q++)
+ initialize_register((gchar []){q, '\0'});
+}
+
+void
+QRegisterTable::edit(QRegister *reg)
+{
+ if (current)
+ current->dot = editor_msg(SCI_GETCURRENTPOS);
+
+ reg->edit();
+
+ ring.current = NULL;
+ current = reg;
+}
bool
Buffer::load(const gchar *filename)
@@ -106,6 +130,7 @@ Ring::edit(const gchar *filename)
}
}
+ qregisters.current = NULL;
current = buffer;
return new_in_ring;
@@ -139,7 +164,10 @@ Ring::~Ring()
void
StateFile::do_edit(const gchar *filename)
{
- ring.undo_edit();
+ if (ring.current)
+ ring.undo_edit();
+ else /* qregisters.current != NULL */
+ qregisters.undo_edit();
if (ring.edit(filename))
ring.undo_close();
}
@@ -203,3 +231,20 @@ StateFile::done(const gchar *str)
return &States::start;
}
+
+/*
+ * TODO: expect filename to read into Q-register
+ */
+State *
+StateEQCommand::got_register(QRegister *reg)
+{
+ BEGIN_EXEC(&States::start);
+
+ if (ring.current)
+ ring.undo_edit();
+ else /* qregisters.current != NULL */
+ qregisters.undo_edit();
+ qregisters.edit(reg);
+
+ return &States::start;
+}