From 18b1ac8cd1fe81af721ed903c23813f568630d9c Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 25 Feb 2013 00:49:27 +0100 Subject: EM...$ command to read macro from file and execute immediately (just like "M") * useful for using macro libraries --- src/parser.cpp | 1 + src/qregisters.cpp | 13 +++++++++++++ src/qregisters.h | 6 ++++++ src/symbols-extract.tes | 2 +- teco.ini | 2 +- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/parser.cpp b/src/parser.cpp index 729e718..7a534e6 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1296,6 +1296,7 @@ StateECommand::StateECommand() : State() { transitions['\0'] = this; transitions['B'] = &States::editfile; + transitions['M'] = &States::macro_file; transitions['S'] = &States::scintilla_symbols; transitions['Q'] = &States::eqcommand; transitions['W'] = &States::savefile; diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 17be046..e65365d 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -49,6 +49,7 @@ namespace States { StateSetQRegInteger setqreginteger; StateIncreaseQReg increaseqreg; StateMacro macro; + StateMacroFile macro_file; StateCopyToQReg copytoqreg; } @@ -590,6 +591,18 @@ StateMacro::got_register(QRegister ®) throw (Error, ReplaceCmdline) return &States::start; } +State * +StateMacroFile::done(const gchar *str) throw (Error) +{ + BEGIN_EXEC(&States::start); + + /* don't create new local Q-Registers if colon modifier is given */ + if (!Execute::file(str, !eval_colon())) + throw Error("Cannot execute macro from file \"%s\"", str); + + return &States::start; +} + State * StateCopyToQReg::got_register(QRegister ®) throw (Error) { diff --git a/src/qregisters.h b/src/qregisters.h index c212fc9..58451ed 100644 --- a/src/qregisters.h +++ b/src/qregisters.h @@ -380,6 +380,11 @@ private: State *got_register(QRegister ®) throw (Error, ReplaceCmdline); }; +class StateMacroFile : public StateExpectString { +private: + State *done(const gchar *str) throw (Error); +}; + class StateCopyToQReg : public StateExpectQReg { public: StateCopyToQReg() : StateExpectQReg(true) {} @@ -400,6 +405,7 @@ namespace States { extern StateSetQRegInteger setqreginteger; extern StateIncreaseQReg increaseqreg; extern StateMacro macro; + extern StateMacroFile macro_file; extern StateCopyToQReg copytoqreg; } diff --git a/src/symbols-extract.tes b/src/symbols-extract.tes index 6e09380..8a47ede 100755 --- a/src/symbols-extract.tes +++ b/src/symbols-extract.tes @@ -1,7 +1,7 @@ #!./sciteco-minimal -m ! ./symbols-extract.tes ! -[.m EQ.mQ{$SCITECOPATH}/string.tes M.m ].m +EMQ{$SCITECOPATH}/string.tes ! read commandline arguments ! LR 0X#in 2LR 0X#ou 2LR 0X#pa 2LR 0X#na HK diff --git a/teco.ini b/teco.ini index 142ad69..a7e1861 100644 --- a/teco.ini +++ b/teco.ini @@ -7,7 +7,7 @@ EQ0Q{$SCITECOPATH}/lexer.tes ED#32ED ! Keyboard macros ! -[.m EQ.mQ{$SCITECOPATH}/fnkeys.tes M.m ].m +EMQ{$SCITECOPATH}/fnkeys.tes ! Uncomment to enable default keyboard macros ! ! ED#64ED ! -- cgit v1.2.3