Чтобы фар не обрабатывал команду, например.
Также мне смутно помнится, что какие-то хистори-плагины трактуют это как "не помещать в историю".
Улучшение макросов из поставки фара
Posted: Mon 25 May, 2015 17:40
by HaRT
DrKnS, лично мне такие сценарии нужны очень редко, поэтому и не проблема временно отключить или панели, или макросы.
Улучшение макросов из поставки фара
Posted: Tue 26 May, 2015 07:04
by John Doe
DrKnS wrote: Разве что в виде нового макроса.
При желании можно было бы и в одном объединить.
DrKnS wrote: Также мне смутно помнится, что какие-то хистори-плагины трактуют это как "не помещать в историю".
Это для того чтобы не засорять историю командами ассоциаций и т.п., а не для ручного запуска.
Также мне смутно помнится что в какой-то момент фар начал обрезать эти пробелы, и соответственно фича отвалилась.
Приведены к актуальному состоянию (используя только апи макросов).
Если вдруг кому-то не всё равно, то проверьте.
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м.б. даже ко всем строкам кода.
Ко всем точно не надо, но улучшить читаемость можно, используя "говорящие" константы вместо числовых значений.