mf.usermenu

Здесь обсуждается всё, что касается макросов.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: mf.usermenu

Post by Smitis »

Latest post of the previous page:

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

П.С.
http://bugs.farmanager.com/view.php?id=2270
Attachments
menutitle.diff.7z
(1.41 KiB) Downloaded 143 times
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

mf.usermenu

Post by John Doe »

Раз меню теперь можно открыть из любого файла (а не только farmenu.ini), то есть смысл давать файлам некое специфическое расширение.
Предлагаю *.farmenu.

Определившись с расширением, можно добавить маску в соответствующую схему колорера.
Возражения?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

mf.usermenu

Post 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 (и т.п.)
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

mf.usermenu

Post 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"). Что само по себе не плохо. Только это всё же менее удобно чем плагин. По двум позициям. Во-первых, надо следить, чтобы на занятое сочетание клавиш больше на задавались команды. Иначе приходится отвлекаться на лишний выбор и делать лишнее движение пальцами. И, во-вторых, слишком много надо создавать контекстных меню. Практически на каждое мало-мальски часто применяемое расширение. Ведь на разнообразное сочетание расширений файлов, как это сделано в плагине, таким способом контекстное меню не сформируешь, кажется.

Поэтому предпочтительно задавать ассоциации файлов раздельно по каждой команде. Тогда маски можно задавать любыми группами. И формируются практически такие же удобные для пользователя меню как это было в плагине.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

mf.usermenu

Post by John Doe »

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

Недостаток ассоциаций: всего одна строка для команды
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

mf.usermenu

Post by Smitis »

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


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

Ассоциации задаются в виде пунктов пользовательского меню перечислением расширений (с точкой). Если требуется выбор, создаётся подменю. Если расширения нет, меню закрывается. Как вариант, можно не закрывать меню, а сделать первым пункт для неизвестных расширений.
Этот простой способ, не позволяющий задавать маски.
Но можно сделать и с масками, только придётся перед вызовом вместо Menu.Select перебирать пункты меню вручную сравнивая по маске.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

mf.usermenu

Post by John Doe »

Smitis wrote: При использовании ограничителей строк вида [[ ]] существует ненулевая вероятность, что имя файла будет содержать квадратные скобки.
Файлы ведь создаются не кем попало, а этим самым пользователем, поэтому вероятность можно считать нулевой.
А если кто-то из пользователей действительно захочет так назвать файл меню, то тоже не проблема, можно использовать другие ограничители.
lua:mf.usermenu(2,[=[!\!.!]=]), lua:mf.usermenu(2,[==[!\!.!]==]), и т.д.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

mf.usermenu

Post by Smitis »

John Doe wrote:Файлы ведь создаются не кем попало, а этим самым пользователем, поэтому вероятность можно считать нулевой.
Это не совсем верное утверждение. Файлы создаёт не только один единственный пользователь и не только пользователи. Не моё дело, конечно, но так придётся постоянно держать в голове ограничение на использование скрипта, чтобы не нарваться на неправильное имя. Но зачем?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

mf.usermenu

Post by John Doe »

Smitis wrote: Но зачем?
Для простоты )
Вообще квадратные скобки тут исключительно для того, что в пути бывают слеши.
Можно избавиться от скобок, если предварительно устанавливать текущий путь.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

mf.usermenu

Post by Smitis »

John Doe wrote:Вообще квадратные скобки тут исключительно для того, что в пути бывают слеши.
Можно избавиться от скобок, если предварительно устанавливать текущий путь.
Вот поэтому я предпочитаю APanel.Current (можно вместе с APanel.Path и пр.).
Имхо, от метасимволов ФАРа при использовании lua надо избавляться.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

mf.usermenu

Post by John Doe »

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

Но заменить метасимволы не всегда можно так просто.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

mf.usermenu

Post by IgorZ »

Возник вопрос: а можно ли для синхронного вызова добавить возврат результата? Хотелось бы знать, была ли нажата Esc (возврат на уровень выше), ShiftF10 (немедленный выход), или выполненена команда. Такое поведение позволило бы полностью реализовать вложенные меню в виде файлов. А сейчас неясно, закрывать ли меню после вызова вложенного, или вызывать снова.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

mf.usermenu

Post by Shmuel »

IgorZ wrote: можно ли для синхронного вызова добавить возврат результата?
Наверное можно. Поместите виш на мантис.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

mf.usermenu

Post by IgorZ »

Shmuel wrote:
IgorZ wrote: можно ли для синхронного вызова добавить возврат результата?
Наверное можно. Поместите виш на мантис.
Поместил. ID 0003230.
Post Reply

Return to “Обсуждение макросов”