Ideas for future versions
|Everything written here is a fiction, DO NOT use this as a manual!|
- get rid of copy-pasted code in plugin
- user's macros should be parsed to commands/args when loaded, not when executed
- any block's name may be optional (in the same way as automacro's call may have no fixed name)
- local variables, REAL variable stack
- automacro condition for not running the macro when the stated automacro is (not) running.
E.g: isRunning automacro1 #automacro won't run when automacro1 is already running.
- Point the user that status "dead" and location "map" need to be typed in lowcase.
- get rid of necessity of @eval where it is possible (if, while, but would be good to have it everywhere)
- if/while blocks
- make label in while/end to be optional
# TEXT -- extrapolates variables and @keywords # EXPR -- evaluates perl expression ; -- if it's already here, it should be universal and not command-dependent do TEXT --  log TEXT --  pause EXPR call TEXT EXPR --  (release|lock) (AUTOMACRONAME | all) --  stop set OPTION TEXT --  LVALUE = TEXT  :LABELNAME goto TEXT --  if (EXPR) ... while (EXPR) [as TEXT] end [TEXT] SUBNAME (...)
-  can be made evaluating and falling back, is there any reason? Another way: quote these
-  space is a BAD argument separator
-  this would be a problem like  - currently it can be any text or @eval. But it's kind of stupid to have "$a = @eval ($b + $c)"
The biggest problem with macro syntax is if we want to keep it compatible and use same command names simultaneously.
Another idea: make completely new macro plugin based of evaluation of everything. Commands will be predefined perl subs.
There should be a module to provide API for communication with macroplugin, because user's macros and other code should not mess with macroplugin internals such as varstack.
Needed API calls:
- set macro variable value
- get macro variable value
Needed hooks from macro plugin:
- macro variable changes
There should be possible to run many macros at the same time.
Some system of mutexes will allow:
- compatibility with old macros (just set one mutex for every macros)
- load many macro files at once and set mutex per file
- autodiscover mutexes by parsing macros
- of course, declaring mutexes in macros must be available