Hi,
The hack of the day involves enabling Lua support for OnMacro, and
defining a simple Lua implementation of keystroke macros. Most of the
infrastructure is already there, we just need to get Lua to listen.
I had this in scite-tools for a while, with the full interface of
saving, loading on init, choosing to play them from a dialog box, etc.,
but since it required Ruby/GTK for the dialog, I axed it a week or so
ago after 1.74 came out and I switched scite-tools back to being
extension scripts, not forks of the SciTE binaries. Good to see someone
else is thinking to expand SciTE's capabilities though, heh.
Take care,
-Mitchell;
The source modification:
LuaExtension.h:
add this to the LuaExtension class, just before the }; line:
virtual bool OnMacro(const char *, const char *);
LuaExtension.cpp:
add this to the end of the file:
bool LuaExtension::OnMacro(const char *cmd, const char *arg)
{
char buff[256];
snprintf(buff,sizeof(buff),"%s|%s",cmd,arg);
return CallNamedFunction("OnMacro",buff);
}
macro.lua can then be defined as:
-- macro.lua
-- simple SciTE macros
-- note the standard (tho undocumented) macro key bindings
-- Start Recording Ctrl+F9
-- End Recording Shift+Ctrl+F9
-- Play Macro F9
local append = table.insert
local state,mac
-- you need to add $(status.msg) to the end of your statusbar.text.1
definition
-- to see these messages on the status bar
local function set_state(s)
state = s
props['status.msg'] = state
scite.UpdateStatusBar()
end
function OnMacro(line)
local idx = line:find('|')
local cmd = line:sub(1,idx-1)
local arg = line:sub(idx+1)
if cmd == 'macro:record' then
if state ~= 'recording' then
set_state 'recording'
mac = {}
end
local _,_,msg,wparam,isstr,str = arg:find('(%d+);(%d+);(%d+);(.*)')
if isstr == '0' then str = '' end
append(mac,{MSG=msg,WPARAM=wparam,STR=str})
elseif cmd == 'macro:stoprecord' then
set_state ''
elseif cmd == 'macro:run' then
for i,m in ipairs(mac) do
if m.STR ~= '' then
scite.SendEditor(m.MSG,m.STR)
else
scite.SendEditor(m.MSG,m.wparam)
end
end
end
end
To use, hit ctrl+F9 to start recording, and start entering keystrokes
- you will only see 'recording' on the first key hit. When finished,
stop recording with Shift+Ctrl+F9 and then F9 will play back the
macro.
These shortcuts are not enabled by default for GTK, so you will need
to add this to your properties file:
user.shortcuts=\
Shift+F9|IDM_MACROLIST| \
F9|IDM_MACROPLAY|\
Ctrl+F9|IDM_MACRORECORD| \
Shift+Ctrl+F9|IDM_MACROSTOPRECORD|
Yes, I know: you can't save the macro to file. This is meant for doing
some ad-hoc automation; can save a lot of typing!
steve d.
_______________________________________________
Scite-interest mailing list
Scite-interest@lyra.org
http://mailman.lyra.org/mailman/listinfo/scite-interest