Приведены к актуальному состоянию (используя только апи макросов).
Если вдруг кому-то не всё равно, то проверьте.
P.S.
Макрос призванный проиллюстрировать использование eval сейчас абсолютно не актуален.
Полагаю он не нужен там вообще, но если угодно то так (без eval)
-- Требуется по F10 запускать окно проводника для папки на активной панели,
-- содержимое командной строки должно сохраняться.
local Flg_Cmd,CmdCurPos,CmdVal
local function CmdSave()
Flg_Cmd = not CmdLine.Empty
if Flg_Cmd then
CmdCurPos = CmdLine.ItemCount-CmdLine.CurPos+1;
CmdVal = CmdLine.Value
Keys("Esc")
end
end
local function CmdRestore()
if Flg_Cmd then
mf.print(CmdVal)
Keys(CmdCurPos.."*CtrlS")
Flg_Cmd = false
end
end
Macro { description="запускать окно проводника для папки на активной панели";
area="Shell"; key="F10";
condition=function()
return APanel.Folder
and (not APanel.Plugin
or (not APanel.Bof and (band(APanel.OPIFlags,0x20))))
end;
action=function()
CmdSave()
if APanel.Current==".." then
Keys(".")
end
Keys("ShiftEnter")
CmdRestore()
end;
}
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 15:40
by Shmuel
John Doe, осталось сделать ещё один шаг и приложить не просто список макросов, а обновлённый файл macro\examples.html.
Если бы ещё с подсветкой синтаксиса Lua, то было бы вообще хорошо.
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 16:14
by John Doe
Shmuel, это очень легко, но задачу я поставил несколько шире: обновить раздел макросов полностью.
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 16:20
by Shmuel
Это замечательно, но часто бывает, что человек ставит перед собой грандиозную задачу, и оканчивается это ничем. Тогда как продвижение небольшими шагами даёт сразу видимый результат.
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 17:05
by John Doe
Выложу промежуточный результат в соответствующей теме
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 18:34
by John Doe
Макрос, выделяющий 30 следующих/предыдущих файлов очень "хитрый", поскольку был составлен в те времена, когда ещё не было
Panel.Select.
Сейчас в этой хитрости смысла никакого нет.
Вопросы к заинтересованным, как поступить:
- переписать с использованием Panel.Select
- переписать, но оставить и старый вариант, для иллюстрации разных приёмов работы.
Macro { description="выделить/(снять выделение) слово(а) под курсором";
area="Editor"; key="RAlt";
action=function()
Keys(Object.Selected and "CtrlU" or "SelWord")
end;
}
Или же упускаю замысел?
Возможно, у кого-то будут и другие идеи по представленным примерам
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 18:42
by John Doe
P.S.
И ещё вопрос о дублировании.
Например макрос о создании папки с именем-датой сейчас в Энциклопедии в 3х местах, с вариациями.
Самый функциональный в описании панельных функций.
То ли убрать дубль из примеров.
То ли наоборот, переместить макросы из разных разделов в примеры.
<!--
искать тот же файл на другой панели что и на активной
F5 ShiftEnter CtrlIns - применено чтобы получить имя файла вне зависимости
пусто/непусто в cmdline и сколько выделено на панели файлов
-->
<macro
area="Shell"
key="CtrlAltLeft"
flags="DisableOutput"
description="искать тот же файл на другой панели что и на активной"><text>
<![CDATA[
clip(5)
$If (((Bof && APanel.Root) || !Bof) && PPanel.Visible)
$If (fexist(PPanel.Path+@"\\"+APanel.Current) == 1)
F5 ShiftEnter
CtrlIns Esc Tab Home
Alt< ShiftIns Esc
$End
$End
]]></text></macro>
Зачем имея APanel.Current (и используя его!!), в другом месте добывать то же значение из диалога копирования?
Если я ничего не упускаю, то это сейчас надо записать так:
Macro { description="искать тот же файл на другой панели что и на активной";
area="Shell"; key="CtrlAltLeft CtrlAltRight";
action=function()
if (not APanel.Bof or APanel.Root) and PPanel.Visible then
if 0~=Panel.SetPos(1,APanel.Current) then
Keys("Tab")
end
end
end;
}
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 19:32
by sToLp
John Doe wrote: ↑Mon 20 Nov, 2017 18:34- переписать, но оставить и старый вариант, для иллюстрации разных приёмов работы.
На мой взгляд, так было бы полезнее.
John Doe wrote: ↑Mon 20 Nov, 2017 18:34Нормально, если я его заменю на этот:
Macro { description="выделить/(снять выделение) слово(а) под курсором";
area="Editor"; key="RAlt";
action=function()
Keys(Object.Selected and "CtrlU" or "SelWord")
end;
}
Этот работает. Вот и пусть будет примером, имхо.
John Doe wrote: ↑Mon 20 Nov, 2017 18:42P.S.
И ещё вопрос о дублировании.
Например макрос о создании папки с именем-датой сейчас в Энциклопедии в 3х местах, с вариациями.
Самый функциональный в описании панельных функций.
То ли убрать дубль из примеров.
То ли наоборот, переместить макросы из разных разделов в примеры.
По моему субъективному опыту, дублирование нередко бывает полезным. Нежелательны лишь неработающие примеры.
Улучшение макросов из поставки фара
Posted: Mon 20 Nov, 2017 19:41
by zg
John Doe wrote: ↑Mon 20 Nov, 2017 19:22Зачем имея APanel.Current (и используя его!!), в другом месте добывать то же значение из диалога копирования?
возможно, макрос начинался писаться тогда, когда APanel.Current не было. я думаю, большинство других странностей тоже объясняется историческими причинами.
Macro { description="Переход в меню выбора дисков на противоположной панели";
area="Disks"; key="Tab";
action=function()
local left = Drv.ShowPos==1
Keys("Esc F9")
if left==APanel.Left then
Keys("Tab")
end
Keys("Enter End Enter")
end;
}
Переход только между меню, активная панель не меняется, видимость панелей не трогается.
Какой вариант лучше?
Улучшение макросов из поставки фара
Posted: Mon 27 Nov, 2017 22:58
by sToLp
John Doe wrote: ↑Mon 27 Nov, 2017 21:38Какой вариант лучше?
На мой взгляд, альтернативный вариант однозначно лучше.
При этом, поскольку это примеры для новичков в составлении макросов, было бы предпочтительнее привести комментарии м.б. даже ко всем строкам кода. А к строке local left = Drv.ShowPos==1 — в особенности.
Улучшение макросов из поставки фара
Posted: Tue 28 Nov, 2017 08:33
by John Doe
sToLp wrote: ↑Mon 27 Nov, 2017 22:58однозначно лучше
Почему?
sToLp wrote: ↑Mon 27 Nov, 2017 22:58было бы предпочтительнее привести комментарии
Вы можете поучаствовать, если есть желание.
sToLp wrote: ↑Mon 27 Nov, 2017 22:58м.б. даже ко всем строкам кода.
Ко всем точно не надо, но улучшить читаемость можно, используя "говорящие" константы вместо числовых значений.
sToLp wrote: ↑Mon 27 Nov, 2017 22:58однозначно лучше
Почему?
В предыдущей версии макроса погашенная панель может включиться даже если пользователь не намерен этого делать. А просто пощёлкает Tab`ом в меню и, не производя ни каких действий в панелях, выйдет из него.
Альтернативный же макрос включит погашенную панель только в том случае, когда пользователь выберет для данной панели действие, предусмотренное в меню дисков (сменить текущий диск, открыть панель плагина, выполнить помещённый в меню макрос). И это, по-моему, гораздо более дружественное поведение по отношению к пользователю.
Улучшение макросов из поставки фара
Posted: Tue 28 Nov, 2017 18:42
by John Doe
John Doe wrote: ↑Tue 28 Nov, 2017 08:33Ко всем точно не надо, но улучшить читаемость можно, используя "говорящие" константы вместо числовых значений.
local APANEL = 0
local CUR_ITEM = 0
local MOD_TIME = 17
local SELECT = 1
local IDX = 1
Macro { description="выделить все файлы/папки новее текущего";
area="Shell"; key="CtrlShiftAdd";
action=function()
local d = Panel.Item(APANEL,CUR_ITEM,MOD_TIME)
for i=1,APanel.ItemCount do
if Panel.Item(APANEL,i,MOD_TIME)>d then
Panel.Select(APANEL,SELECT,IDX,i)
end
end
end;
}
local APANEL = 0
local FILENAME,ATTRIB,SIZE,SELECTED = 0,2,6,8
local DIRECTORY = 0x00000010
local function isFolder(panel,idx)
return band(DIRECTORY,Panel.Item(panel,idx,ATTRIB))==DIRECTORY
end
local PUT,ADD = 1,2
Macro { description="поместить в Clipboard список отмеченных файлов в формате CSV (имя и размер)";
area="Shell"; key="CtrlShiftIns";
action=function()
mf.clip(PUT,"Name;Size\r\n")
for i=1,APanel.ItemCount do
if not isFolder(APANEL,i) and Panel.Item(APANEL,i,SELECTED) then
mf.clip(ADD,Panel.Item(APANEL,i,FILENAME)..";"..Panel.Item(APANEL,i,SIZE).."\r\n")
end
end
end;
}
Улучшение макросов из поставки фара
Posted: Tue 28 Nov, 2017 19:38
by zg
John Doe wrote: ↑Tue 28 Nov, 2017 17:15Если перейти в панели QView (т.е. она будет на активной панели), и нажать CtrlQ, то панель станет файловой, но макрообласть не изменится!!
линейка функциональных клавиш тоже не изменится. и возможно что-то ещё. пишите на мантис.