Page 1 of 1

Автовыделение последнего выполненного пункта меню

Posted: Sun 02 Feb, 2014 23:59
by John Doe
Есть старая тема F11 - выделение в меню плагинов предыдущего выбранного.
Набросал по мотивам макрос, используя возможности обработчика диалоговых событий.
При открытии заданных меню устанавливает курсор на пункт меню, запомненный при предыдущем выборе



Можно настроить для работы в любых списках, для примера заданы три: меню плагинов, меню конфигурации плагинов, список far:about.
Предусмотрен параметр onCancel, управляющий поведением в случае когда выбор в меню не был подтверждён (меню было закрыто по Esc и т.п.)
= "save" - запоминать пункт меню даже если выбор отменён
= "keeplast" - не запоминать при отмене, оставлять последний подтвержённый
= "reset" - при отмене выбора сбрасывать запомненный пункт

Возможно этот параметр стоило бы настраивать для каждого меню отдельно, но пока я даже не знаю в каких ещё списках вообще может быть полезен данный макрос.

Автовыделение последнего выполненного пункта меню

Posted: Mon 03 Feb, 2014 00:48
by John Doe
Возможно не все знают, но для главного меню фара данная возможность предусмотрена штатно:
FarRus.hlf wrote:

Code: Select all

Выбрать последний выполненный пункт меню                 Shift-F10
Для себя я даже поменял местами значения клавиш F9/ShiftF10:

Code: Select all

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



Без макроса 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() + добавлено меню фильтров". Макрос дополнен в аттач поста.