diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-11 05:06:07 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-11 05:06:07 +0100 |
commit | 839686f13dc5f4cb65a9d4354b233147583e2770 (patch) | |
tree | 458d59d008e035b89c0de17c1219380b1aa94406 /qbuffers.cpp | |
parent | c88e635842f0d172514d73f17f128dc91e3c65f4 (diff) | |
download | sciteco-839686f13dc5f4cb65a9d4354b233147583e2770.tar.gz |
^Ux...$ command: rubout does not yet work properly
Diffstat (limited to 'qbuffers.cpp')
-rw-r--r-- | qbuffers.cpp | 67 |
1 files changed, 57 insertions, 10 deletions
diff --git a/qbuffers.cpp b/qbuffers.cpp index 9e8b065..be32c96 100644 --- a/qbuffers.cpp +++ b/qbuffers.cpp @@ -16,14 +16,34 @@ #include "qbuffers.h" namespace States { - StateFile file; - StateEQCommand eqcommand; - StateLoadQReg loadqreg; + StateFile file; + StateEQCommand eqcommand; + StateLoadQReg loadqreg; + StateCtlUCommand ctlucommand; + StateSetQRegString setqregstring; } Ring ring; QRegisterTable qregisters; +static QRegister *register_argument = NULL; + +void +QRegister::set_string(const gchar *str) +{ + edit(); + dot = 0; + + editor_msg(SCI_BEGINUNDOACTION); + editor_msg(SCI_SETTEXT, 0, (sptr_t)str); + editor_msg(SCI_ENDUNDOACTION); + + if (ring.current) + ring.current->edit(); + else /* qregisters.current != NULL */ + qregisters.current->edit(); +} + bool QRegister::load(const gchar *filename) { @@ -31,13 +51,17 @@ QRegister::load(const gchar *filename) gsize size; edit(); - editor_msg(SCI_CLEARALL); dot = 0; /* FIXME: prevent excessive allocations by reading file into buffer */ if (!g_file_get_contents(filename, &contents, &size, NULL)) return false; + + editor_msg(SCI_BEGINUNDOACTION); + editor_msg(SCI_CLEARALL); editor_msg(SCI_APPENDTEXT, size, (sptr_t)contents); + editor_msg(SCI_ENDUNDOACTION); + g_free(contents); if (ring.current) @@ -257,15 +281,13 @@ StateFile::done(const gchar *str) return &States::start; } -static QRegister *eq_register = NULL; - State * StateEQCommand::got_register(QRegister *reg) { BEGIN_EXEC(&States::loadqreg); - undo.push_var<QRegister*>(eq_register); - eq_register = reg; + undo.push_var<QRegister*>(register_argument); + register_argument = reg; return &States::loadqreg; } @@ -276,14 +298,39 @@ StateLoadQReg::done(const gchar *str) BEGIN_EXEC(&States::start); if (*str) { - eq_register->load(str); + undo.push_var<gint>(register_argument->dot); + undo.push_msg(SCI_UNDO); + register_argument->load(str); } else { if (ring.current) ring.undo_edit(); else /* qregisters.current != NULL */ qregisters.undo_edit(); - qregisters.edit(eq_register); + qregisters.edit(register_argument); } return &States::start; } + +State * +StateCtlUCommand::got_register(QRegister *reg) +{ + BEGIN_EXEC(&States::setqregstring); + + undo.push_var<QRegister*>(register_argument); + register_argument = reg; + + return &States::setqregstring; +} + +State * +StateSetQRegString::done(const gchar *str) +{ + BEGIN_EXEC(&States::start); + + undo.push_var<gint>(register_argument->dot); + undo.push_msg(SCI_UNDO); + register_argument->set_string(str); + + return &States::start; +} |