View Issue Details

IDProjectCategoryView StatusLast Update
0003230Wishes.PluginsLuaMacro / Macro Browserpublic2017-10-20 08:08
ReporterIgorZAssigned To 
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status newResolutionopen 
Product Version3.0 
Target VersionFixed in Version 
Summary0003230: Возвращать значение для mf.usermenu() при синхронном вызове
DescriptionПредлагаю добавить функции mf.usermenu() при синхронном вызове возврат результата.

Предполагаемый вариант возвращаемого результата: строка - запущенная команда; число - отказ (к примеру, 0/1 - выход по Esc/ShiftF10); false,error (или nil,error) - ошибка.

Обоснование: в настоящем виде функция mf.usermenu() не позволяет полностью реализовать вложенные файлы меню - невозможно определить, возвращаться в вышестоящее меню после вызова, или нет. Реализация кода возврата позволит использовать в меню Far конструкции вида

S:  Подменю
    lua:if mf.usermenu(0x102,"path\submenu.ini")==0 then mf.usermenu() end

и более сложные.

Ссылка на пост на форуме
TagsNo tags attached.

Activities

shmuel

2016-06-15 11:17

developer   bugnote:0014608

IgorZ wrote

Предполагаемый вариант возвращаемого результата: строка - запущенная команда; число - отказ (к примеру, 0/1 - выход по Esc/ShiftF10); false,error (или nil,error) - ошибка.

  1. Что значит "ошибка"?
  2. Зачем возвращать строку-команду?
  3. Будет ли вам достаточно, если будет возвращаться одно из трёх значений, например "Esc", "ShiftF10", "Command"?
  4. Или даже 2 значения: false (Esc или ShiftF10) и true (команда)?

JohnDoe

2017-10-19 21:13

updater   bugnote:0015714

Someone wrote

Что значит "ошибка"?
Исходя из примера - ошибка это "не удалось открыть меню из указанного файла".
false - ошибка
0 - команда
-1 - отмена

IgorZ

2017-10-20 08:08

reporter   bugnote:0015721

Да уж, так замотался тогда, что и забыл про этот виш. Лучше поздно, чем никогда, так что отвечаю:
shmuel wrote

Что значит "ошибка"?

Проблемы с файлом меню: не найден/нет доступа... - самое очевидное. Возможно, могут быть и другие проблемы.
shmuel wrote

Зачем возвращать строку-команду?

Для более гибкого управления. Скажем, при вызове меню из макроса, в зависимости от исполненной команды можно запускать тот или иной постобработчик. Простой пример: если пользовательское меню вызывается из редактора и часть пунктов меняют путь на панели, то для них лично я предпочёл бы вернуть состояние панелей до запуска меню. В то же время, при вызове данного меню из панелей смена пути будет вполне допустима (а то и желательна), так что посстановление состояния в самих пунктах меню - излишне.
shmuel wrote

Будет ли вам достаточно, если будет возвращаться одно из трёх значений, например "Esc", "ShiftF10", "Command"?

Неясно, как распознать ошибку в таком случае?
shmuel wrote

Или даже 2 значения: false (Esc или ShiftF10) и true (команда)?

Esc и ShiftF10 требуют разной реакции, если реализовывать вложенные меню. По Esc надо перезапускать меню верхнего уровня, по ShiftF10 закрывать всё.

Собственно, для успешной реализации программы-минимум - вложенных пользовательских меню в отдельных файлах - надо различать четыре состояния: ошибка вызова меню, выполнена команда, нажата Esc, нажата ShiftF10. Конкретизация выполненной команды - программа-максимум.

Issue History

Date Modified Username Field Change
2016-05-08 21:28 IgorZ New Issue
2016-06-15 11:17 shmuel Note Added: 0014608
2017-10-19 21:13 JohnDoe Note Added: 0015714
2017-10-20 08:08 IgorZ Note Added: 0015721