Аналог плагина Format Menu для x64

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

64-битная версия плагина Format Menu

Post by Smitis »

Latest post of the previous page:

SlashNet wrote: Fri 17 Mar, 2023 20:35 Запихивать в пользовательское меню? Тоже не то. Список команд без фильтра для определённого типа файла, по использованию ещё неудобнее использования многочисленных ассоциаций.
Я не так давно тоже заморочился с дополнительными ассоциациями. В результате получился скрипт добавляющий пару префиксов (assoc и assocm), через которые делаются обычные ассоциации ФАРа, но общим списком (иногда длинным), команда на всех одна, типа assoc: "!.!" А можно обойтись даже без этого и повесить всё на отдельный макрос.
Первый префикс (assoc) формирует меню в зависимости от совпадения имени файла по маске. Меню простое, через Menu.Show.
Второй префикс (assocm) показывает пользовательское меню, но не просто так, а открывает подменю, в пункте которого присутствует расширение файла.
Через пользовательское меню в чём-то даже удобнее: горячие клавиши задаются более гибко, можно оперативно подправить меню и тут же открыть файл. А неудобно то, что многие программы (пакеты программ, например, Libre Office, Microsoft Office, SoftMaker Office) по расширениям пересекаются частично и приходится либо плодить кучу подменю, либо забить, но тогда на каком-нибудь файле tmdx (SoftMaker Office) будет в списке Microsoft Office.
Скрипт не выкладываю, так как он не закончен ("вечная альфа"), дописывается по мере необходимости. Но если есть желание ковыряться, выложу "как есть".
Разум когда-нибудь победит.
User avatar
SlashNet
Posts: 638
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 16 times
Been thanked: 16 times

64-битная версия плагина Format Menu

Post by SlashNet »

Smitis, было бы интересно взглянуть на ваш вариант.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

64-битная версия плагина Format Menu

Post by Smitis »

SlashNet wrote: Tue 28 Mar, 2023 09:24 Smitis, было бы интересно взглянуть на ваш вариант.
Сначала "декламер": скрипт выкладываю практически практически как есть, только выкинул экспериментальное и сократил ассоциации (оставил кое-что для примера). Доработки идут постоянно по мере необходимости. На runx не обращайте внимания, это из другого скрипта, задавайте свои ассоциации, по сути, это просто пример, как можно сделать под себя.
Скрипт добавляет два префикса assoc и assocm. Первый для создания меню из списка ассоциаций, которые заданы прямо в скрипте таблицей. Второй для открытия пользовательского меню и подменю, в заголовке которого есть расширение файла.

Некоторые замечания.

Имхо, формирование меню через assoc не даёт каких-либо принципиальных преимуществ по сравнению с обычными ассоциациями. Отличия и особенности:
  • Меню будет показано всегда, даже если в списке одна команда и даже если список будет пустой (так и задумывалось).
  • В ФАРовских ассоциациях все расширения можно задать одной строкой.
  • Можно не добавлять это в ФАРовские ассоциации, а вызывать макросом, из пользовательского меню, из командной строки.
  • В принципе, можно доработать, создать несколько разных списков под разные макросы (или один список списков).
  • Команда вызывается через командную строку ФАРа, чтобы попасть в историю. Можно сделать по другому.
  • Недостаток - при вызове через ассоциации в историю попадёт невнятная команда «assoc: файл», но это особенность ФАРа, как исправить не знаю.
Через меню пользователя (assocm) немного интересней:
  • Можно также добавить в ФАРовские ассоциации, вызывать макросом, через меню пользователя, из командной строки.
  • Можно запихнуть всё это в главное меню или наоборот, раскидать по разным файлам, навешав вызов на разные макросы (это в планах).
  • Главное отличие - можно оперативно менять открывшееся меню (менять порядок, удалять, добавлять, редактировать, спасибо Кэп) и тут же вызывать "ассоциированную" программу.
  • Недостаток, то что пункт меню выбирается через Menu.Select, что не очень точно, не поддерживает маски и требует более строгое задание строки (например, у меня требуется символ ";" после каждого расширения. Но и это можно доработать, просто пока не требовалось.
Attachments
Associations.7z
Associations
(2.94 KiB) Downloaded 59 times
Last edited by Smitis on Tue 28 Mar, 2023 19:21, edited 3 times in total.
Разум когда-нибудь победит.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

64-битная версия плагина Format Menu

Post by buniak_a_h »

Я тут немного подумал и написал мелкий ивент (скрипт). Суть следующая:
В обычном ФАРовском UserMenu в качестве Label пишется нормальный заголовок пункта МЕНЮ и через разделитель (у меня это - символ ) - "маска" файла, для которого этот пункт актуален. "Маска" тут - это список масок через ;, имена групп масок в угловых скобках <…>, необязательные маски исключения после |, а после ещё одного разделителя (у меня это - >>, как в функции far.RecursiveSearch) - атрибуты.


Если Кого-нить этот скрипт заинтересует, пишите. Я доделаю настройку:
выбор символа-первого разделителя (вместо
показывать ли строки без масок: сейчас сделано, чтоб показывать; логично было бы показывать только если нет ни одного совпадения для "маскируемых" пунктов. Пока мне это уже нравится.
Итак:
FarMenu.ini
Пример FarMenu.ini
(503 Bytes) Downloaded 64 times
UserMenu.lua
Скрипт
(3.08 KiB) Downloaded 62 times
User avatar
Konstantin
Posts: 234
Joined: Wed 14 Jun, 2006 19:29
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 5 times

64-битная версия плагина Format Menu

Post by Konstantin »

buniak_a_h,
Большое Вам спасибо за прекрасную идею! Уже сейчас реализация Вашего скрипта весьма удобна.
Что касается строк без масок, то в идеале бы было, если только это практически возможно, оперативное переключение: "показывать/не показывать".
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

64-битная версия плагина Format Menu

Post by Smitis »

buniak_a_h, к сожалению, этот скрипт работает для ВСЕХ пользовательских меню, даже там, где не надо.
Разум когда-нибудь победит.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

64-битная версия плагина Format Menu

Post by buniak_a_h »

Smitis wrote: Fri 31 Mar, 2023 09:29 buniak_a_h, к сожалению, этот скрипт работает для ВСЕХ пользовательских меню, даже там, где не надо.
  1. Если в пользовательском меню нет пунктов с символом-разделителем (), то скрипт ничего не делает (Ну, может только немного времени тратит). Именно поэтому я попытался придумать самый экзотический символ-разделитель
  2. У диалога UserMenu, к сожалению, нет уникального GUID. Поэтому я не знаю способа отличить одно пользовательское МЕНЮ от другого. Эта тема когда-то поднималась (меня там даже дополнили идеей, что у локального, глобального МЕНЮ и того, что вызывается по mf.usermenu должны быть разные GUID-ы). Увы, идея не нашла поддержки у разработчиков.
  3. Скрипт, по идее, должен работать для любого МЕНЮ, вызываемого по клавише F2 из панелей. И чем это плохо?
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

64-битная версия плагина Format Menu

Post by Smitis »

buniak_a_h
  1. Спецсимволы, имхо, вполне себе нормальные разделители.
  2. Я когда-то предлагал при использовании mf.usermenu задавать произвольный заголовок верхнего уровня вместо стандартного "Local Menu". Тогда можно было бы различать по заголовку. Но тоже не нашло поддержки (хотя там ничего сложного). :(
    А если GUID, значит надо GUID также надо передавать, чтобы не было один на всех.
  3. Так оно и работает. Просто у меня всё фильтровало и пустое показывало. Разобрался - спецсимвол куда-то исчез.
Last edited by Smitis on Fri 31 Mar, 2023 12:39, edited 2 times in total.
Разум когда-нибудь победит.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

64-битная версия плагина Format Menu

Post by buniak_a_h »

Smitis wrote: Fri 31 Mar, 2023 12:31 Спецсимволы, имхо, вполне себе нормальные разделители.
На самом деле в следующей версии я заменил символ-разделитель. Объясняется просто: в таблице ASCII есть символ 0x0013, визуально не отличимый от символа таблицы UTF-8 с кодом 0x203C . Причем первый из них я не смог послать на сайт (рисуется квадратиком)
Last edited by buniak_a_h on Fri 31 Mar, 2023 13:33, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

64-битная версия плагина Format Menu

Post by buniak_a_h »

Konstantin wrote: Fri 31 Mar, 2023 09:27 в идеале бы было, если только это практически возможно, оперативное переключение: "показывать/не показывать".
См. версию 2 (во вложении):
  1. Изначально если есть строки с масками, то строки без масок прячутся.
  2. После того, как МЕНЮ показано, можно по Ctrl+H показать/спрятать строки без масок (в строке-подсказке не упомянуто пока).
  3. Если Вы уже начали пользоваться этим скриптом, то обратите внимание: символ-разделитель заменён на ¡. Обоснование есть выше.
  4. Обновлён FarMenu.ini: изменён символ-разделитель, добавлен пример проверки атрибутов (для папок вызывается dir /b, а для файлов - редактирование Notepad++.
UserMenu.lua
Скрипт, версия 2
(4.87 KiB) Downloaded 67 times
FarMenu.ini
Обновлённый пример пользовательского МЕНЮ
(616 Bytes) Downloaded 65 times
User avatar
Konstantin
Posts: 234
Joined: Wed 14 Jun, 2006 19:29
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 5 times

64-битная версия плагина Format Menu

Post by Konstantin »

buniak_a_h wrote: Fri 31 Mar, 2023 17:27 Изначально если есть строки с масками, то строки без масок прячутся.
Да. Поправка: строки без масок прячутся в любом случае, т.е. даже когда нет строк с масками.
После того, как МЕНЮ показано, можно по Ctrl+H показать/спрятать строки без масок.
Нет, это пока что не работает.
Last edited by Konstantin on Fri 31 Mar, 2023 18:30, edited 1 time in total.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

64-битная версия плагина Format Menu

Post by buniak_a_h »

Konstantin wrote: Fri 31 Mar, 2023 18:24
После того, как МЕНЮ показано, можно по Ctrl+H показать/спрятать строки без масок.
Нет, это пока что не работает.
У меня - работает. Отсюда следует, что надо отлаживаться, искать баг. Если можно - дальнейшее взаимодействие в личке.
  1. Если Вы используете своё МЕНЮ (не тот пример) - хотелось бы его получить.
  2. Я могу повставлять отладочный вывод, Вам надо будет установить DebugView (и для удобства настроить фильтр по вхождению строки BAX). Если готовы поучаствовать - напишите, пож. .
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Аналог плагина Format Menu для x64

Post by HaRT »

 ! Message from: HaRT
Я перенёс и переименовал Тему
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Аналог плагина Format Menu для x64

Post by buniak_a_h »

buniak_a_h wrote: Fri 31 Mar, 2023 18:34 У меня - работает. Отсюда следует, что надо отлаживаться, искать баг.
Вроде, все баги отловлены.
Логика такая:
  • если есть видимые пункты МЕНЮ с маской файла, то пункты МЕНЮ без масок изначально скрыты (возможна настройка), но их можно "вызвать" (показать) по Ctrl+H;
  • пункты МЕНЮ с маской, не соответствующие текущему файлу, скрываются однозначно;
  • если все маскированные пункты МЕНЮ не подходят к текущему файлу, то они скрываются, все немаскированные файлы показываются, и скрыть их нельзя
Скрипт во вложении:
UserMenu.lua
Версия 4
(6.06 KiB) Downloaded 80 times
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Аналог плагина Format Menu для x64

Post by buniak_a_h »

Обнаружена ошибка (скорее всего - не моя, но её можно обойти в скрипте). Возникал краш ФАРа, если вызван пункт МЕНЮ, для которого не указана маска файла, и который изначально скрыт (показать по Ctrl+H, потом вызвать). Маленький тестовый скрипт пошлю в соответствующий раздел форума, а тут - версия №5, обходящая эту неприятность.
UserMenu.lua
Версия 5
(6.14 KiB) Downloaded 87 times
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Аналог плагина Format Menu для x64

Post by zg »

buniak_a_h wrote: Fri 07 Apr, 2023 18:02 скорее всего - не моя, но её можно обойти в скрипте
ваша.
Post Reply

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