aboutsummaryrefslogtreecommitdiffhomepage
path: root/qbuffers.h
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.h
parent9be9fcca0c9ab63180a2e9aeb64e25829034b7a4 (diff)
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.h')
-rw-r--r--qbuffers.h45
1 files changed, 27 insertions, 18 deletions
diff --git a/qbuffers.h b/qbuffers.h
index 2eea797..eae6554 100644
--- a/qbuffers.h
+++ b/qbuffers.h
@@ -41,6 +41,7 @@ public:
QRegister(const gchar *_name)
: name(g_strdup(_name)), integer(0), string(NULL), dot(0) {}
+ virtual
~QRegister()
{
if (string)
@@ -62,24 +63,12 @@ public:
return string;
}
- void set_string(const gchar *str);
- void undo_set_string(void);
- gchar *get_string(void);
+ virtual void set_string(const gchar *str);
+ virtual void undo_set_string(void);
+ virtual gchar *get_string(void);
- inline void
- edit(void)
- {
- interface.ssm(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
- interface.ssm(SCI_GOTOPOS, dot);
- interface.info_update(this);
- }
- inline void
- undo_edit(void)
- {
- interface.undo_info_update(this);
- undo.push_msg(SCI_GOTOPOS, dot);
- undo.push_msg(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
- }
+ virtual void edit(void);
+ virtual void undo_edit(void);
bool load(const gchar *filename);
inline void
@@ -89,6 +78,20 @@ public:
}
};
+class QRegisterBufferInfo : public QRegister {
+public:
+ QRegisterBufferInfo() : QRegister("*")
+ {
+ get_document();
+ }
+
+ void set_string(const gchar *str) {}
+ void undo_set_string(void) {}
+ gchar *get_string(void);
+
+ void edit(void);
+};
+
extern class QRegisterTable : public RBTree {
inline void
initialize_register(const gchar *name)
@@ -283,7 +286,13 @@ public:
bool is_any_dirty(void);
bool edit(const gchar *filename);
- void undo_edit(void);
+ inline void
+ undo_edit(void)
+ {
+ current->dot = interface.ssm(SCI_GETCURRENTPOS);
+ undo.push_var(current);
+ current->undo_edit();
+ }
bool save(const gchar *filename);