Page 4 of 5

Re: mf.usermenu

Posted: Thu 29 Aug, 2013 14:03
by Smitis

Latest post of the previous page:

Новый diff для 3625
И переоткрою тикет

П.С.
http://bugs.farmanager.com/view.php?id=2270

mf.usermenu

Posted: Tue 11 Nov, 2014 11:19
by John Doe
Раз меню теперь можно открыть из любого файла (а не только farmenu.ini), то есть смысл давать файлам некое специфическое расширение.
Предлагаю *.farmenu.

Определившись с расширением, можно добавить маску в соответствующую схему колорера.
Возражения?

mf.usermenu

Posted: Tue 11 Nov, 2014 11:36
by John Doe
Для работы с такими меню удобно назначить ассоциацию
Маска: *.farmenu,farmenu.ini
Команда по Enter: lua:mf.usermenu(2,[[!\!.!]])

Несложно реализовать и меню в зависимости от формата (по маске).
Например:
Маска: *.exe,*.jpg,*.txt
Команда по Alt+F3 lua:mf.usermenu(3,"!`.farmenu")
В результате для *.exe будет вызван exe.farmenu, для *.jpg — jpg.farmenu, для *.txt — txt.farmenu (и т.п.)

mf.usermenu

Posted: Thu 13 Nov, 2014 14:27
by sToLp
John Doe wrote:Определившись с расширением, можно добавить маску в соответствующую схему колорера.
Использую маску *.farmenu.ini и вроде как и колорер трогать не надо.
Для работы с такими меню удобно назначить ассоциацию
Соответственно, по заданной команде lua:mf.usermenu(3,"!`.farmenu.ini")
для *.exe вызвается exe.farmenu.ini, для *.jpg — jpg.farmenu.ini, для *.txt — txt.farmenu.ini (и т.п.)

И получается почти тоже, что делал анси-плагин "Меню формата" ("Format Menu"). Что само по себе не плохо. Только это всё же менее удобно чем плагин. По двум позициям. Во-первых, надо следить, чтобы на занятое сочетание клавиш больше на задавались команды. Иначе приходится отвлекаться на лишний выбор и делать лишнее движение пальцами. И, во-вторых, слишком много надо создавать контекстных меню. Практически на каждое мало-мальски часто применяемое расширение. Ведь на разнообразное сочетание расширений файлов, как это сделано в плагине, таким способом контекстное меню не сформируешь, кажется.

Поэтому предпочтительно задавать ассоциации файлов раздельно по каждой команде. Тогда маски можно задавать любыми группами. И формируются практически такие же удобные для пользователя меню как это было в плагине.

mf.usermenu

Posted: Thu 13 Nov, 2014 15:13
by John Doe
sToLp wrote: Использую маску *.farmenu.ini и вроде как и колорер трогать не надо.
Действительно.
sToLp wrote: слишком много надо создавать контекстных меню. Практически на каждое мало-мальски часто применяемое расширение.
Если рассматривать как замену Format Menu, то можно прямо из его конфига генерировать все файлы меню.
Но согласен, без меню, одними ассоциациями как-то проще.
В ассоциациях даже есть зачатки "интеллекта": IF EXIST и IF DEFINED

Недостаток ассоциаций: всего одна строка для команды

mf.usermenu

Posted: Thu 20 Nov, 2014 15:00
by Smitis
John Doe wrote:Для работы с такими меню удобно назначить ассоциацию
Маска: *.farmenu,farmenu.ini
Команда по Enter: lua:mf.usermenu(2,[[!\!.!]])
При использовании ограничителей строк вида [[ ]] существует ненулевая вероятность, что имя файла будет содержать квадратные скобки. Имхо, лучше использовать APanel.Current.


Вариант ассоциаций на основе пользовательского меню

Ассоциации задаются в виде пунктов пользовательского меню перечислением расширений (с точкой). Если требуется выбор, создаётся подменю. Если расширения нет, меню закрывается. Как вариант, можно не закрывать меню, а сделать первым пункт для неизвестных расширений.
Этот простой способ, не позволяющий задавать маски.
Но можно сделать и с масками, только придётся перед вызовом вместо Menu.Select перебирать пункты меню вручную сравнивая по маске.

mf.usermenu

Posted: Thu 20 Nov, 2014 15:52
by John Doe
Smitis wrote: При использовании ограничителей строк вида [[ ]] существует ненулевая вероятность, что имя файла будет содержать квадратные скобки.
Файлы ведь создаются не кем попало, а этим самым пользователем, поэтому вероятность можно считать нулевой.
А если кто-то из пользователей действительно захочет так назвать файл меню, то тоже не проблема, можно использовать другие ограничители.
lua:mf.usermenu(2,[=[!\!.!]=]), lua:mf.usermenu(2,[==[!\!.!]==]), и т.д.

mf.usermenu

Posted: Thu 20 Nov, 2014 16:00
by Smitis
John Doe wrote:Файлы ведь создаются не кем попало, а этим самым пользователем, поэтому вероятность можно считать нулевой.
Это не совсем верное утверждение. Файлы создаёт не только один единственный пользователь и не только пользователи. Не моё дело, конечно, но так придётся постоянно держать в голове ограничение на использование скрипта, чтобы не нарваться на неправильное имя. Но зачем?

mf.usermenu

Posted: Thu 20 Nov, 2014 16:11
by John Doe
Smitis wrote: Но зачем?
Для простоты )
Вообще квадратные скобки тут исключительно для того, что в пути бывают слеши.
Можно избавиться от скобок, если предварительно устанавливать текущий путь.

mf.usermenu

Posted: Thu 20 Nov, 2014 17:36
by Smitis
John Doe wrote:Вообще квадратные скобки тут исключительно для того, что в пути бывают слеши.
Можно избавиться от скобок, если предварительно устанавливать текущий путь.
Вот поэтому я предпочитаю APanel.Current (можно вместе с APanel.Path и пр.).
Имхо, от метасимволов ФАРа при использовании lua надо избавляться.

mf.usermenu

Posted: Fri 21 Nov, 2014 09:02
by John Doe
John Doe wrote:Можно избавиться от скобок, если предварительно устанавливать текущий путь.
Собственно при вызове из ассоциаций текущий путь и так устанавливается, поэтому вместо [[!\!.!]] можно смело использовать "!.!".
(С плагиновых панелей запускаться не будет, но это сейчас и с полным путём не работает)
Smitis wrote: Имхо, от метасимволов ФАРа при использовании lua надо избавляться.
APanel.Current в данном случае вполне подойдёт, да.

Но заменить метасимволы не всегда можно так просто.

mf.usermenu

Posted: Thu 05 May, 2016 06:13
by IgorZ
Возник вопрос: а можно ли для синхронного вызова добавить возврат результата? Хотелось бы знать, была ли нажата Esc (возврат на уровень выше), ShiftF10 (немедленный выход), или выполненена команда. Такое поведение позволило бы полностью реализовать вложенные меню в виде файлов. А сейчас неясно, закрывать ли меню после вызова вложенного, или вызывать снова.

mf.usermenu

Posted: Thu 05 May, 2016 07:54
by Shmuel
IgorZ wrote: можно ли для синхронного вызова добавить возврат результата?
Наверное можно. Поместите виш на мантис.

mf.usermenu

Posted: Sun 08 May, 2016 19:35
by IgorZ
Shmuel wrote:
IgorZ wrote: можно ли для синхронного вызова добавить возврат результата?
Наверное можно. Поместите виш на мантис.
Поместил. ID 0003230.