Простой макрос исполняет текущую строку или выделенный блок в редакторе как команду windows. Из недостатков - выхлоп команды нельзя скопировать, и он теряется после закрытия User Screen. Если кто-нибудь предложит как решить это - буду благодарен.
Macro
{
description="Execute current row"; area="Editor"; key="F9";
condition= function()
return Editor.FileName:lower():find('%.txt$')
end;
action=function()
local Str = Object.Selected and Editor.SelValue or Editor.Value
if Str == "" then
return
end
panel.GetUserScreen()
io.write("\n\n> " .. win.Utf8ToOem(Str) .. "\n\n")
-- os.execute( Str )
win.system(Str)
panel.SetUserScreen()
Keys("CtrlO") -- Чтобы можно было сделать AltIns
-- mf.waitkey()
end;
}
UPD. Уже сам допер. Надо добавить SetUserScreen()
Исполнение скриптов из редактора
Posted: Thu 19 Feb, 2015 11:04
by Shmuel
1. Вместо ф-ции AnsiToOEM можно использовать встроенную win.Utf8ToOEM.
2. Вместо condition (где в регексе не хватает $ в конце, а также есть нежелательная регистрозависимость) лучше использовать filemask.
Исполнение скриптов из редактора
Posted: Thu 19 Feb, 2015 11:14
by John Doe
Max Rusov wrote: return Editor.FileName:find('%.txt') and true or false
Достаточно return Editor.FileName:find('%.txt') (это вообще, а конкретно тут конечно надо воспользоваться filemask)
CtrlO все-таки пригодился. Может правильнее как то иначе, но и так вроде работает...
Исполнение скриптов из редактора
Posted: Sat 03 Jun, 2017 17:25
by Dennis_Moore
Не работал AltIns и я взял код из другого макроса (Невозможно использовать грабер на десктопе) для решения этой проблемы. Добавил код из action в конец, Keys("СtrlO") заменил на Keys("F12 0"). Вроде-бы все работает теперь как нужо.
--[[
Простой макрос исполняет текущую строку или выделенный блок в редакторе
как команду windows.
--]]
Macro
{
description="Execute current row"; area="Editor"; key="F9";
condition= function()
return Editor.FileName:lower():find('%.txt$')
end;
action=function()
local Str = Object.Selected and Editor.SelValue or Editor.Value
if Str == "" then
return
end
panel.GetUserScreen()
io.write("\n\n> " .. win.Utf8ToOem(Str) .. "\n\n")
-- os.execute( Str )
win.system(Str)
panel.SetUserScreen()
Keys("F12 0") -- Чтобы можно было сделать AltIns
-- mf.waitkey()
-----------------------------
local F=far.Flags
local id
id=far.MacroAdd(F.MACROAREA_OTHER,0,"CtrlO",'if false then end',"",function()
far.MacroDelete(id)
panel.SetUserScreen()
return true
end)
if id then panel.GetUserScreen() end
end;
}
P.S. С названием темы на которую даю ссылку явно что-то не так. Или обновленный движок чудит?