PlugMenu — Расширенное меню плагинов

Здесь можно обсудить ваш любимый плагин.
Acerbic
Posts: 80
Joined: Wed 07 Apr, 2010 12:30
Been thanked: 2 times

Re: PlugMenu — Расширенное меню плагинов

Post by Acerbic »

Latest post of the previous page:

Max, а можно в следующей версии сделать такую опцию, чтобы когда назначаешь горячую клавишу (F4) на плагин в PlugMenu, автоматически такая же клавиша назначалась на тот же плаг и в нативном меню плагинов? Поможет макрописателям, например.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by Max Rusov »

В настоящее время это технически невозможно.
А макросы, кстати, сейчас не используют меню плагинов.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by sToLp »

Нередко, всё же, удобнее бывает макросом или алиасом вызвать тот или иной плагин по-старинке, через PlugMenu, чем возиться с Plugin.Call и гуидами, особенно если надо сварганить макрос (или алиас) побыстрее.

В таких случаях применяю либо анси-плагин KeyIn-FAR-plugin/0.0.3 - он прекрасно работает через враппер:

Code: Select all

lm:post print("kbrd:F11") Keys("Enter") ... 
либо утилиту nircmdc.exe:

Code: Select all

lm:post print("nircmdc.exe sendkey F11 press") Keys("Enter") ... 
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Re: PlugMenu — Расширенное меню плагинов

Post by John Doe »

А что нельзя передать текст lm:post Plugin.Menu(...)
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by sToLp »

Можно, конечно, и нужно когда это уместно, но если требуется поскорее, то:
к примеру, в файле doskey.ini есть строка:

Code: Select all

+=lm:post print("kbrd:F11 Shift=") Keys("Enter") i="вызов плагина Same Folder '+'";

и чтобы назначить алиас вызова Emenu копируем её ниже и видоизменяем:

Code: Select all

-=lm:post print("kbrd:F11 -") Keys("Enter") i="вызов плагина Emenu";
— создание нового алиаса заняло несколько секунд.
А с Plugin.Menu(...), в котором нужно указывать гуиды, как это будет?
xarx
Posts: 123
Joined: Tue 23 Nov, 2010 12:06

Re: PlugMenu — Расширенное меню плагинов

Post by xarx »

Я использую этот плугин вместо стандардного плугин меню (через Common макрос для F11). Для чего вам еще нужно стандардное плугин меню?
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by sToLp »

xarx
Вышеприведённые алиасы как раз и расчитаны на то, что на "F11" навешен макрос, вызывающий Расширенное меню плагинов.

Шорткаты Расширенного меню не совпадают с шорткатами Стандартного меню пока их специально не синхронизируешь.
И поэтому через Keys("F11 +") может быть вызван совсем не тот плагин, который вызывается по шорткату "+" в Расширенном меню, как привык его пользователь.
А вот через "kbrd:F11 +" — тот. Потому что "kbrd:F11" эмулирует нажатие клавиши "F11", и таким образом вызывает макрос, назначенный на неё.
В отличие от функции Keys("F11"), которая вызывает команду, изначально назначенную в Фаре на "F11", а не макрос, навешеный поверх неё.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by Max Rusov »

Ерундой страдаете. Plugin.Menu(ID) - что может быть проще?
PlugMenu, кстати, для запуска плагина само постит этот макрос, т.к. другого способа вызова плагина нет.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by sToLp »

Plugin.Menu(ID) - что может быть проще?
Например шорткат "+" намного проще чем ID "{61684143-9977-4E40-BBB2-79283AEBA1DD}". Особенно когда на другой машине ID того же самого плагина уже "{61684143-9977-4E40-BBB2-79283AE543FF}", что для плагинов, работающих через враппер, вовсе не редкость. И гораздо надёжнее дать совет выставить одинаковые шорткаты, чем идентификаторы. Про шорткаты хоть объяснить легче.

Но в целом и в перспективе, Вы, разумеется, правы.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by Max Rusov »

Добавь функции:
  1. function Plugin.idByName(Name)
  2.   Name = Name:lower()
  3.   for _, p in ipairs(far.GetPlugins()) do
  4.     local Info = far.GetPluginInformation(p)
  5.     if (Info.GInfo.Title:lower() == Name) or Info.ModuleName:lower():find(Name.."%.dll$") then
  6.       return win.Uuid(Info.GInfo.Guid):upper()
  7.     end
  8.   end
  9. end
  10.  
  11. function Plugin.Open(NameOrID, ItemID)
  12.   if Plugin.Exist(NameOrID) then
  13.     Plugin.Menu(NameOrID, ItemID)
  14.   else
  15.     local PlugID = Plugin.idByName(NameOrID)
  16.     if PlugID then
  17.       Plugin.Menu(PlugID, ItemID)
  18.     end
  19.   end
  20. end
И вызывай плагин по имени:

Plugin.Open("FarFTP")
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Re: PlugMenu — Расширенное меню плагинов

Post by John Doe »

Замечу, что Plugin.idByName(Name) отсюда, а роль Plugin.Open может точно так же выполнять универсальная функция Plugin.require

Code: Select all

FarFTP = Plugin.require("FarFTP")
...
FarFTP.Menu()
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by sToLp »

В отношении плагинов, запускаемых через враппер, команда "Plugin.Open(Name)" не подходит (поскольку все они эксплуатируют одно "имя" - "Loader"), и вышеозначенные танцы с бубном (то бишь с "kbrd:" или "nircmdc.exe sendkey ..." и шорткатами) вокруг них до их актуализации не отменяет. — см. ниже.

Эта команда действительно гораздо удобнее и чем "Plugin.Menu(ID)", и чем шорткаты!
Поэтому полагаю, что "Plugin.Open(NameOrID,ItemID)" целесообразно было бы включить в Far (LuaMacro).

Max Rusov
John Doe

Благодарю вас за подсказку и пояснение! Это стимулирует к освоению Луа.
Last edited by sToLp on Thu 11 Apr, 2013 18:25, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Re: PlugMenu — Расширенное меню плагинов

Post by John Doe »

sToLp wrote:поскольку все они эксплуатируют одно "имя" - "Loader"
Это какой такой враппер?
В том, что мне известно, можно и переименовать dll, и явно присвоить guid
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by Max Rusov »

sToLp wrote:В отношении плагинов, запускаемых через враппер, команда "Plugin.Open(Name)" не подходит (поскольку все они эксплуатируют одно "имя" - "Loader")
Вы сначала попробуйте.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by sToLp »

Дело в том, что ещё со времён Far2 я использовал враппер простейшим образом: кидал в папку с плагином "Loader.dll", копировал в неё из другой папки "Loader.ini" а в нём в строке "PluginFile=..." напрямую указывал имя плагинной dll`ки и в соответствующих строках — свежесгенрированные гуиды. И всё нормально работало через шорткаты. Такой метод был удобен тем, что при очередном обновлении враппера нужно было лишь обновить "Far3Wrap.dll" в корне Фара и в соответствующих папках все "Loader.dll`ки", не переименовывая ни "родные" dll`ки плагинов, ни dll`ки-лодеры. И я уже почти забыл, что можно сделать и по-другому.

Теперь же, с вашей подачи, сделал так: "родной" файл плагина "UCharMap.dll" переименовал в "UCharMap.dl_", а "Loader.dll" — в "UCharMap3.dll" и создал пустой "UCharMap3.ini". А затем удалил "plugincache32.db" и перезапустил Фар. И так со всеми плагинами, работающими через враппер.

Так "Plugin.Open(Name)" заработала с плагинами, запускаемыми и через враппер. То есть практически с любыми плагинами.
И тогда тем более эту удобнейшую своей наглядностью функцию желательно сделать не факультативной, а общедоступной!
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: PlugMenu — Расширенное меню плагинов

Post by Max Rusov »

Зря мучались - работает и без переименования :)
Post Reply

Return to “Обсуждение плагинов”