mf.usermenu

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

Re: mf.usermenu

Post by Smitis » Thu 29 Aug, 2013 14:03

Latest post of the previous page:

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

П.С.
http://bugs.farmanager.com/view.php?id=2270
Attachments
menutitle.diff.7z
(1.41 KiB) Downloaded 68 times
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 11240
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

mf.usermenu

Post by John Doe » Tue 11 Nov, 2014 11:19

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

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

User avatar
John Doe
Бюрократ
Posts: 11240
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

mf.usermenu

Post by John Doe » Tue 11 Nov, 2014 11:36

Для работы с такими меню удобно назначить ассоциацию
Маска: *.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: 728
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 37 times
Been thanked: 5 times

mf.usermenu

Post by sToLp » Thu 13 Nov, 2014 14:27

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: 11240
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

mf.usermenu

Post by John Doe » Thu 13 Nov, 2014 15:13

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

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

Smitis
Posts: 1467
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

mf.usermenu

Post by Smitis » Thu 20 Nov, 2014 15:00

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


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

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

User avatar
John Doe
Бюрократ
Posts: 11240
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

mf.usermenu

Post by John Doe » Thu 20 Nov, 2014 15:52

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

Smitis
Posts: 1467
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

mf.usermenu

Post by Smitis » Thu 20 Nov, 2014 16:00

John Doe wrote:Файлы ведь создаются не кем попало, а этим самым пользователем, поэтому вероятность можно считать нулевой.
Это не совсем верное утверждение. Файлы создаёт не только один единственный пользователь и не только пользователи. Не моё дело, конечно, но так придётся постоянно держать в голове ограничение на использование скрипта, чтобы не нарваться на неправильное имя. Но зачем?
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 11240
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

mf.usermenu

Post by John Doe » Thu 20 Nov, 2014 16:11

Smitis wrote: Но зачем?
Для простоты )
Вообще квадратные скобки тут исключительно для того, что в пути бывают слеши.
Можно избавиться от скобок, если предварительно устанавливать текущий путь.

Smitis
Posts: 1467
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

mf.usermenu

Post by Smitis » Thu 20 Nov, 2014 17:36

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

User avatar
John Doe
Бюрократ
Posts: 11240
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

mf.usermenu

Post by John Doe » Fri 21 Nov, 2014 09:02

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

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

IgorZ
Posts: 461
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

mf.usermenu

Post by IgorZ » Thu 05 May, 2016 06:13

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

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

mf.usermenu

Post by Shmuel » Thu 05 May, 2016 07:54

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

IgorZ
Posts: 461
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

mf.usermenu

Post by IgorZ » Sun 08 May, 2016 19:35

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

Post Reply

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