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

Здесь можно обсудить ваш любимый плагин.
User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Sun 07 Apr, 2013 08:57

Latest post of the previous page:

В настоящее время это технически невозможно.
А макросы, кстати, сейчас не используют меню плагинов.

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sun 07 Apr, 2013 10:21

Нередко, всё же, удобнее бывает макросом или алиасом вызвать тот или иной плагин по-старинке, через 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: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Sun 07 Apr, 2013 10:39

А что нельзя передать текст lm:post Plugin.Menu(...)

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sun 07 Apr, 2013 11:51

Можно, конечно, и нужно когда это уместно, но если требуется поскорее, то:
к примеру, в файле 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 — Расширенное меню плагинов

Postby xarx » Mon 08 Apr, 2013 10:15

Я использую этот плугин вместо стандардного плугин меню (через Common макрос для F11). Для чего вам еще нужно стандардное плугин меню?

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Tue 09 Apr, 2013 12:43

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

Шорткаты Расширенного меню не совпадают с шорткатами Стандартного меню пока их специально не синхронизируешь.
И поэтому через Keys("F11 +") может быть вызван совсем не тот плагин, который вызывается по шорткату "+" в Расширенном меню, как привык его пользователь.
А вот через "kbrd:F11 +" — тот. Потому что "kbrd:F11" эмулирует нажатие клавиши "F11", и таким образом вызывает макрос, назначенный на неё.
В отличие от функции Keys("F11"), которая вызывает команду, изначально назначенную в Фаре на "F11", а не макрос, навешеный поверх неё.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Tue 09 Apr, 2013 12:54

Ерундой страдаете. Plugin.Menu(ID) - что может быть проще?
PlugMenu, кстати, для запуска плагина само постит этот макрос, т.к. другого способа вызова плагина нет.

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Tue 09 Apr, 2013 13:39

Plugin.Menu(ID) - что может быть проще?

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

Но в целом и в перспективе, Вы, разумеется, правы.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Tue 09 Apr, 2013 14:45

Добавь функции:

  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: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Tue 09 Apr, 2013 15:18

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

Code: Select all

FarFTP = Plugin.require("FarFTP")
...
FarFTP.Menu()

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Wed 10 Apr, 2013 20:18

В отношении плагинов, запускаемых через враппер, команда "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: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Wed 10 Apr, 2013 20:29

sToLp wrote:поскольку все они эксплуатируют одно "имя" - "Loader"
Это какой такой враппер?
В том, что мне известно, можно и переименовать dll, и явно присвоить guid

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Wed 10 Apr, 2013 21:10

sToLp wrote:В отношении плагинов, запускаемых через враппер, команда "Plugin.Open(Name)" не подходит (поскольку все они эксплуатируют одно "имя" - "Loader")

Вы сначала попробуйте.

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Thu 11 Apr, 2013 18:19

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

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Thu 11 Apr, 2013 18:34

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

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Thu 11 Apr, 2013 18:38

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

По видимому, я сильно туплю: пробовал и так, и эдак, а получилось только как описал выше.
А как Вы делаете?

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Thu 11 Apr, 2013 18:49

Если Вы посмотрите внимательно, то увидите что функция idByName сначала сравнивает по имени плагина, а потом по имени DLL. А враппер подставляет имя оригинальной DLL в качестве имени плагина. Так что ничего переименовывать не нужно.


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

Who is online

Users browsing this forum: No registered users and 21 guests