aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-25 00:49:27 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-25 00:49:27 +0100
commit18b1ac8cd1fe81af721ed903c23813f568630d9c (patch)
tree30d73ec98c47862411772fac4df7d4e95682fccc
parente3ea9032f6e3105d9c0a720db8bc413b4a3e016f (diff)
downloadsciteco-18b1ac8cd1fe81af721ed903c23813f568630d9c.tar.gz
EM...$ command to read macro from file and execute immediately (just like "M")
* useful for using macro libraries
-rw-r--r--src/parser.cpp1
-rw-r--r--src/qregisters.cpp13
-rw-r--r--src/qregisters.h6
-rwxr-xr-xsrc/symbols-extract.tes2
-rw-r--r--teco.ini2
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;
}
@@ -591,6 +592,18 @@ StateMacro::got_register(QRegister &reg) throw (Error, ReplaceCmdline)
}
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 &reg) throw (Error)
{
tecoInt from, len;
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 &reg) 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 <input file> <output file> <prefix pattern list> <array name> !
-[.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 !