From fddab16ebc89386e4311e195361e611a2eee4b96 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Wed, 21 Nov 2012 01:07:31 +0100 Subject: Gq command to insert Q-Register at current DOT --- parser.cpp | 1 + qbuffers.cpp | 23 +++++++++++++++++++++++ qbuffers.h | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/parser.cpp b/parser.cpp index 92e6ac7..49ae1d6 100644 --- a/parser.cpp +++ b/parser.cpp @@ -449,6 +449,7 @@ StateStart::StateStart() : State() transitions['['] = &States::pushqreg; transitions[']'] = &States::popqreg; + transitions['G'] = &States::getqregstring; transitions['Q'] = &States::getqreginteger; transitions['U'] = &States::setqreginteger; transitions['%'] = &States::increaseqreg; diff --git a/qbuffers.cpp b/qbuffers.cpp index a3b4651..26034f2 100644 --- a/qbuffers.cpp +++ b/qbuffers.cpp @@ -31,6 +31,7 @@ namespace States { StateLoadQReg loadqreg; StateCtlUCommand ctlucommand; StateSetQRegString setqregstring; + StateGetQRegString getqregstring; StateGetQRegInteger getqreginteger; StateSetQRegInteger setqreginteger; StateIncreaseQReg increaseqreg; @@ -833,6 +834,28 @@ StateSetQRegString::done(const gchar *str) throw (Error) return &States::start; } +State * +StateGetQRegString::got_register(QRegister *reg) throw (Error) +{ + gchar *str; + + BEGIN_EXEC(&States::start); + + str = reg->get_string(); + if (*str) { + interface.ssm(SCI_BEGINUNDOACTION); + interface.ssm(SCI_ADDTEXT, strlen(str), (sptr_t)str); + interface.ssm(SCI_SCROLLCARET); + interface.ssm(SCI_ENDUNDOACTION); + ring.dirtify(); + + undo.push_msg(SCI_UNDO); + } + g_free(str); + + return &States::start; +} + State * StateGetQRegInteger::got_register(QRegister *reg) throw (Error) { diff --git a/qbuffers.h b/qbuffers.h index 19a95ce..ace3358 100644 --- a/qbuffers.h +++ b/qbuffers.h @@ -452,6 +452,11 @@ private: State *done(const gchar *str) throw (Error); }; +class StateGetQRegString : public StateExpectQReg { +private: + State *got_register(QRegister *reg) throw (Error); +}; + class StateGetQRegInteger : public StateExpectQReg { private: State *got_register(QRegister *reg) throw (Error); @@ -487,6 +492,7 @@ namespace States { extern StateLoadQReg loadqreg; extern StateCtlUCommand ctlucommand; extern StateSetQRegString setqregstring; + extern StateGetQRegString getqregstring; extern StateGetQRegInteger getqreginteger; extern StateSetQRegInteger setqreginteger; extern StateIncreaseQReg increaseqreg; -- cgit v1.2.3