Code: Select all
-- Макросы для работы с плагином LuaFAR Search (shmuel) в редакторе
-- https://plugring.farmanager.com/plugin.php?pid=858&l=ru
-- 2018.12.05
-- Автоматический показ ключей запуска макросов в конце строк меню выбора макроса
-- реализован через MMacro авторства John Doe от Tue 04 Dec 2018 10:59
-- https://forum.farmanager.com/viewtopic.php?p=151937#p151937
-- для автоматического вывода в меню ключей запуска макросов необходимо к определениям (т.е. к 'Macro'),
-- содержание поля description которых нужно завершить обозначением ключа, добавить спереди ещё одну букву 'M',
-- т.е. переименовать их в 'MMacro'.
local width = 54 -- ширина максимально длинного содержимого поля description в меню, формируемом данными макросами,
-- (в символах между кавычками) плюс 1 символ
local descr_fmt = "%-"..width.."s %s"
-- выравнивание строк меню выбора макроса производится по левому краю (флагом "%-")
-- для выравнивания правой колонки меню по правому краю нужно добавить в поле key перед крайним справа ключом нужное
-- количество дополнительный знаков пробелов
local cas_re = regex.new" (.+)?$" -- регекс определяет крайний справа ключ в поле key
-- он рассчитан на то, что в поле key 2 ключа: первый - общий для всех макросов меню, а второй, крайний справа ключ,
-- конкретный для данного макроса; а если в поле key окажется больше ключей, то "лишние" также будут показаны в меню,
-- и это на данный момент представляется удобным, поскольку сигнализирует о возможной необходимости внесения коррекции
local function MMacro(m)
local cas = cas_re:match(m.key)
if key~="none" then
m.description = descr_fmt:format(m.description,cas)
end
return Macro(m)
end
local Guid = "8E11EA75-0303-4374-AC60-D1E38F865449" -- гуид плагина
local function LFS_Editor(...) Plugin.Call(Guid, "own", "editor", ...) end
--local function LFS_Panels(...) Plugin.Call(Guid, "own", "panels", ...) end
local function LFS_Exist() return Plugin.Exist(Guid) end
MMacro {
--description="LuaFAR Search: Editor &Find-поиск (shmuel) AltShiftF";
description="LuaFAR Search: Editor &Find-поиск (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftF";
-- для выравнивания правой колонки меню выбора по правому краю нужно добавить в поле key перед крайним справа
-- ключом нужное количество знаков пробелов
condition=LFS_condition;
action = function() LFS_Editor "search" end
}
MMacro {
--description="LuaFAR Search: Editor &Replace-замена (shmuel) AltShiftR";
description="LuaFAR Search: Editor &Replace-замена (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftR";
condition=LFS_condition;
action = function() LFS_Editor "replace" end
}
MMacro {
--description="LuaFAR Search: Editor Rep&Eat-повторить (shmuel) AltShiftE";
description="LuaFAR Search: Editor Rep&Eat-повторить (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftE";
condition=LFS_condition;
action = function() LFS_Editor "repeat" end
}
MMacro {
--description="LuaFAR Search: Editor Repeat re&Verse (shmuel) AltShiftV";
description="LuaFAR Search: Editor Repeat re&Verse (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftV";
condition=LFS_condition;
action = function() LFS_Editor "repeat_rev" end
}
MMacro {
--description="LuaFAR Search: Editor искать &Word-слово (shmuel) AltShiftW";
description="LuaFAR Search: Editor искать &Word-слово (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftW";
condition=LFS_condition;
action = function() LFS_Editor "searchword" end
}
MMacro {
--description="LuaFAR Search: Editor искать w&Ord назад (shmuel) AltShiftO";
description="LuaFAR Search: Editor искать w&Ord назад (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftO";
condition=LFS_condition;
action = function() LFS_Editor "searchword_rev" end
}
-- Uncomment this macro if it is needed.
-- Раскомментировать этот макрос нет необходимости, поскольку макрос переключения подсветку тоже сбрасывает
--MMacro {
----description="LuaFAR Search: Reset Highlight (shmuel) CtrlShiftH";
--description="LuaFAR Search: сбросить подсветку (shmuel)";
-- area="Editor"; key="AltShiftS CtrlShiftH"; condition=LFS_Exist;
-- action = function() LFS_Editor "resethighlight" end
--}
MMacro {
--description="LuaFAR Search: Toggle Highlight (shmuel) AltShiftH";
--description="LuaFAR Search: вкл/выкл доп&Highlight (shmuel) AltShiftH";
description="LuaFAR Search: вкл/выкл доп&Highlight (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftH";
condition=LFS_condition;
action = function() LFS_Editor "togglehighlight" end
}
MMacro {
--description="LuaFAR Search: Editor Multi-&Line replace (shmuel) AltShiftL";
description="LuaFAR Search: Editor Multi-&Line replace (shmuel)";
area="Editor"; filemask="*.*|*.tmpg"; key="AltShiftS AltShiftL"; --key="AltShiftS AltShiftL";
condition=LFS_condition;
action = function() LFS_Editor "mreplace" end
}
-- следующий макрос переделан из макроса, ранее взятого из сборки Victor_VG на руборде
-- http://forum.ru-board.com/topic.cgi?forum=5&topic=49572&start=0&limit=1&m=2#1
MMacro {
--description="LuaFAR Search: Editor МЕНЮ& ПЛАГИНА AltShiftS";--77без&
description="LuaFAR Search: Editor МЕНЮ& ПЛАГИНА";--77без&
area="Editor"; key="AltShiftS AltShiftS"; selected=true;
condition=LFS_condition;
action=function() Plugin.Menu(Guid) end;
}
-- ПОДВАЛьные макросы:
--сначала блок из двух макросов работы с результатами Грепа авторства Алексис21
--Alexyz21 16:41 09-11-2018 http://forum.ru-board.com/topic.cgi?forum=5&topic=49572&start=1200#16
local F = far.Flags
local function GetFileName(l) return regex.match(l,'^(?:\\[\\d+?\\] )?([A-Z]:.+?)(?::|$)') end
local function GInfo()
local ei=editor.GetInfo(-1)
local y,x,p = ei.CurLine,ei.CurPos,ei.LeftPos
local l,i,f = editor.GetString(-1,y).StringText,y
local n,s = l:match('^(%d-)[-:](.+)$')
repeat
i,f = i-1,GetFileName(editor.GetString(-1,i).StringText)
until f or i==-1
return f,l,y,x,p,n,s
end
local function FileSave(t)
editor.Editor(t[1][1],_,_,_,_,_,bit64.bor(F.EF_NONMODAL,F.EF_IMMEDIATERETURN,F.EF_OPENMODE_USEEXISTING))
for j=2,#t do editor.SetString(-1,t[j][1],t[j][2]) end
if not editor.SaveFile(-1) then msgbox("Warning! File is not saved - blocked?",t[1][1]) else editor.Quit(-1) end
end
MMacro {
area="Editor"; --filemask="*.tmpg";
key="AltShiftS AltShiftA"; flags=""; sortpriority=6; priority=40;
--description="RESearch: 2. Grep Save line";
--description="edi: Grep &A): сохранить изменённую строку (Alexyz21) AltShiftA"; --78c&
description="edi: Grep &A): сохранить изменённую строку (Alexyz21)"; --53c&
--condition=function() return editor.GetInfo(-1).FileName:match('\\%w-%.tmp$') end;
--комментарий sToLp: пользователь вправе сохранить результаты грепа в любой файл и поэтому ограничивать работу макроса
--только .tmp-файлами излишне
action=function()
local f,l,y,x,p,n,s = GInfo()
if n then
editor.SetPosition(-1,y,x,_,_,p)
if f then
editor.Editor(f,_,_,_,_,_,bit64.bor(F.EF_NONMODAL,F.EF_IMMEDIATERETURN,F.EF_OPENMODE_USEEXISTING),tonumber(n),x-#n-1)
editor.SetString(-1,n,s)
if not editor.SaveFile(-1) then msgbox("Warning! File is not saved - blocked?",f) else editor.Quit(-1) end
end
end
end;
}
MMacro {
area="Editor"; --filemask="*.tmpg";
key="AltShiftS AltShiftB"; flags=""; sortpriority=5; priority=40;
--description="RESearch: 3. Grep Save All";
--description="edi: Grep &B): сохранить все изменения (Alexyz21) AltShiftB"; --78c&
description="edi: Grep &B): сохранить все изменения (Alexyz21)"; --78c&
--condition=function() return editor.GetInfo(-1).FileName:match('\\%w-%.tmp$') end;
--комментарий sToLp: пользователь вправе сохранить результаты грепа в любой файл и поэтому ограничивать работу макроса
--только .tmp-файлами излишне
action=function()
local t={}
for i=1,editor.GetInfo(-1).TotalLines do
local l=editor.GetString(-1,i).StringText
local y,s = l:match('^(%d-)[-:](.+)$')
if y and s and #t>=1
then table.insert(t,{y,s})
else
local f=GetFileName(l)
if f then
if #t>1 then FileSave(t) t={} end
t[1]={f,nil}
end
end
end
if #t>1 then FileSave(t) end
end;
}
--это макрос-индикатор наличия нативной команды Far`а, назначенной на ключ, общий для всех маросов данной подборки:
MMacro {
area="Editor"; key="AltShiftS AltShiftS"; priority=40;
--description="&Native: внутренняя команда Far не назначена AltShiftS";
description="&Native: внутренняя команда Far не назначена";
id="11000C83-734C-4A71-8F2D-04BA2D747541"; sortpriority=1;
flags="NoPluginPanels EmptyCommandLine";
action=function()
local cmd = far.Message(
"Нативная (внутренняя) команда Far на ключ AltShiftS не назначена.\n\nДа -- продолжить. Нет -- вернуться в меню.",
"ВНИМАНИЕ !",";YesNo")
if cmd==1 then Keys("AltShiftS")
end
if cmd==2 then eval("Editor/AltShiftS",2)
end
end;
}