aboutsummaryrefslogtreecommitdiffhomepage
path: root/qbuffers.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-18 05:00:26 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-18 05:00:26 +0100
commitbd345771ee18eb7cb3b6081b1954b1e5b48f029e (patch)
treeb90af855dd60dd54c378d12cba4c1747c8a3aeef /qbuffers.cpp
parent9be9fcca0c9ab63180a2e9aeb64e25829034b7a4 (diff)
downloadsciteco-bd345771ee18eb7cb3b6081b1954b1e5b48f029e.tar.gz
fixed "*" register: instead of trying to update it everywhere the buffer filename changes, it is implemented as a specialized Q-Register
* setting it (^U), is currently ignored * getting it, returns the current file's filename directly * editing it clears its document and resets it with the current file's filename * later dynamic querying of the numeric part of Q-Registers may be implemented as well
Diffstat (limited to 'qbuffers.cpp')
-rw-r--r--qbuffers.cpp57
1 files changed, 40 insertions, 17 deletions
diff --git a/qbuffers.cpp b/qbuffers.cpp
index 1647ef3..c8a43ba 100644
--- a/qbuffers.cpp
+++ b/qbuffers.cpp
@@ -107,6 +107,22 @@ QRegister::get_string(void)
return str;
}
+void
+QRegister::edit(void)
+{
+ interface.ssm(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
+ interface.ssm(SCI_GOTOPOS, dot);
+ interface.info_update(this);
+}
+
+void
+QRegister::undo_edit(void)
+{
+ interface.undo_info_update(this);
+ undo.push_msg(SCI_GOTOPOS, dot);
+ undo.push_msg(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
+}
+
bool
QRegister::load(const gchar *filename)
{
@@ -132,6 +148,28 @@ QRegister::load(const gchar *filename)
return true;
}
+gchar *
+QRegisterBufferInfo::get_string(void)
+{
+ gchar *filename = ring.current ? ring.current->filename : NULL;
+
+ return g_strdup(filename ? : "");
+}
+
+void
+QRegisterBufferInfo::edit(void)
+{
+ gchar *filename = ring.current ? ring.current->filename : NULL;
+
+ QRegister::edit();
+
+ interface.ssm(SCI_BEGINUNDOACTION);
+ interface.ssm(SCI_SETTEXT, 0, (sptr_t)(filename ? : ""));
+ interface.ssm(SCI_ENDUNDOACTION);
+
+ undo.push_msg(SCI_UNDO);
+}
+
void
QRegisterTable::initialize(void)
{
@@ -143,8 +181,8 @@ QRegisterTable::initialize(void)
/* search string and status register */
initialize_register("_");
- /* current buffer name and number */
- initialize_register("*");
+ /* current buffer name and number ("*") */
+ insert(new QRegisterBufferInfo());
}
void
@@ -295,24 +333,9 @@ Ring::edit(const gchar *filename)
}
}
- /* TODO: set integer part */
- qregisters["*"]->set_string(current->filename);
-
return new_in_ring;
}
-void
-Ring::undo_edit(void)
-{
- current->dot = interface.ssm(SCI_GETCURRENTPOS);
-
- undo.push_var<Buffer*>(current);
- current->undo_edit();
-
- /* TODO: undo integer part */
- qregisters["*"]->undo_set_string();
-}
-
#if 0
/*