Есть старая тема F11 - выделение в меню плагинов предыдущего выбранного.
Набросал по мотивам макрос, используя возможности обработчика диалоговых событий.
При открытии заданных меню устанавливает курсор на пункт меню, запомненный при предыдущем выборе
Можно настроить для работы в любых списках, для примера заданы три: меню плагинов, меню конфигурации плагинов, список far:about.
Предусмотрен параметр onCancel, управляющий поведением в случае когда выбор в меню не был подтверждён (меню было закрыто по Esc и т.п.)
= "save" - запоминать пункт меню даже если выбор отменён
= "keeplast" - не запоминать при отмене, оставлять последний подтвержённый
= "reset" - при отмене выбора сбрасывать запомненный пункт
Возможно этот параметр стоило бы настраивать для каждого меню отдельно, но пока я даже не знаю в каких ещё списках вообще может быть полезен данный макрос.
Автовыделение последнего выполненного пункта меню
Posted: Mon 03 Feb, 2014 00:48
by John Doe
Возможно не все знают, но для главного меню фара данная возможность предусмотрена штатно:
local allPanels = "Shell QView Tree Info Search"
Macro { description="Selects last executed menu item";
area=allPanels; key="F9";
id="CEB71CD3-0507-4390-825C-64E86B07F376";
action=function()
Keys"ShiftF10"
end;
}
Macro { description="Main Menu";
area=allPanels; key="ShiftF10";
id="6FD80F82-CF7D-4BBB-A466-B36BA8A66597";
action=function()
Keys"F9"
end;
}
Macro { description="Close MainMenu";
area="MainMenu"; key="F9";
id="872925D8-D234-4A8A-AB80-A65E9352F6E9";
action=function()
while Area.MainMenu do Keys"F10" end
end;
}
Автовыделение последнего выполненного пункта меню
Posted: Tue 20 Jun, 2017 23:32
by Dennis_Moore
Если в меню плагинов нажать RAlt и набрать что-то что-бы список стал пустым, а затем нажать Esc или Enter то упадет LuaMacro. FAR 86/64 4973
╔══════════════════════════ Exception occurred ══════════════════════════╗
║ Exception: : menu index out of range (at VMenu::at, vmenu.cpp:2743)) ║
║ Address: 0x76C8C54F RaiseException ║
║ Function: ProcessDialogEventW ║
║ Module: C:\Program Files\Far3\Plugins\~LuaMacro\LuaMacro.dll ║
╟────────────────────────────────────────────────────────────────────────╢
║ { Unload plugin } [ Stack ] [ Minidump ] [ Ignore ] ║
╚════════════════════════════════════════════════════════════════════════╝
Без макроса Esc/Enter как и ожидается закрывают меню.
Автовыделение последнего выполненного пункта меню
Posted: Wed 21 Jun, 2017 07:13
by Shmuel
Dennis_Moore wrote: ↑Tue 20 Jun, 2017 23:32Если в меню плагинов нажать RAlt и набрать что-то что-бы список стал пустым, а затем нажать Esc или Enter то упадет LuaMacro
Падает на самом деле Фар, а не LuaMacro. Исключение возникает при попытке получить текст несуществующего пункта меню. На мой взгляд, чем падать, лучше бы DM_GETTEXT и прочие возвращали бы, например, -1 как признак неудачи.
Автовыделение последнего выполненного пункта меню
Posted: Wed 21 Jun, 2017 07:32
by DrKnS
Dennis_Moore, это Far. 4976.
Автовыделение последнего выполненного пункта меню
Posted: Thu 13 Sep, 2018 18:28
by sToLp
На руборде уважаемый Shmuel обнародовал свой вариант макроса по текущей теме. На мой взгляд, этот вариант ещё более удачно раскрывает тему и поэтому заслуживает и более широкой публикации.
Воспользовавшись тем, что данный вариант макроса более доступно для моего понимания структурирован и в нём также содержатся и необходимые мне пояснения, я его несколько дополнил. Вдобавок к заложенному в нём автовыделению последнего выполненного пункта в меню плагинов, в меню настроек плагинов и в far:config я включил в него также обработку меню "Ассоциации для файлов (File associations)" и "Раскраска файлов (Files highlighting)". И в такой форме он прилагается в аттаче.
Добавлено:
На том же руборде опубликован альтернативный вариант макроса Shmuel`я, авторства Alexyz21. Автор анонсировал особенности этого варианта макроса следующим образом: "просто добавляем в таблицу гуиды нужных меню без необходимости редактировать код возврата GetKey() + добавлено меню фильтров". Макрос дополнен в аттач поста.