LuaFAR — библиотека для создания плагинов на языке Lua

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Библиотека LuaFAR делает возможным написание плагинов на языке Lua, предоставляя им адаптированную версию FAR API.

Входит в состав FAR manager (начиная с 3.0 build 2851), и доступна для использования в макросах.

Справка по функциям библиотеки — luafar_manual.chm (в дистрибутиве, папка Encyclopedia).
Мануал весьма лаконичен, предполагает что вы ориентируетесь в FAR Plugins API (FarEncyclopedia.ru.chm, в дистрибутиве)

Дополнения к мануалу:

Полезное по теме: См. также:
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

Latest post of the previous page:

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

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Smitis »

far.Message при параметре Button=="" сразу возвращает управление lua:far.Message("1","TEST","") far.Message("2","TEST")
Логичнее было бы дождаться Enter/Esc (Как при ";Ok", только без рисования кнопки).
А если вот так lua:far.Message("ERROR","TEST","") на экране остаётся фантомное изображение сообщения.

Возможно, это глюк не luafar, а функции Message.
Разум когда-нибудь победит.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

Smitis wrote: Возможно, это глюк не luafar, а функции Message.
far.Message в основном не меняет поведение ф-ции Message (несколько расширяет её возможности). То, что вы привели как глюк, это не глюк, это фича ф-ции Message. Вызывающая ф-ция ответственна за очищение экрана в этом случае.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Smitis »

Понял. Из справки было не совсем понятно поведение при пустой строке кнопок. Надо было смотреть справку по Message.
Разум когда-нибудь победит.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

LuaMacro — Lua как язык макросов

Post by IgorZ »

Возникло у меня некоторое недопонимание в процессе работы.
  1. local guid = "742910F1-02ED-4542-851F-DEE37C2E13B2" -- EMenu
  2.  
  3. local path = far.GetPluginInformation(far.FindPlugin(far.Flags.PFM_GUID,win.Uuid(guid))).ModuleName:match("^(.*)\\[^\\]*$")
  4.  
  5. far.ShowHelp(path          ,nil,far.Flags.FHELP_CUSTOMPATH) -- работает
  6.  
  7. far.ShowHelp(win.Uuid(guid),nil,far.Flags.FHELP_GUID) -- не работает
  8.  
  9. far.ShowHelp(guid          ,nil,far.Flags.FHELP_GUID) -- не работает
Почему первый вариант работает, а второй нет (третий я уже на всякий случай попробовал)?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaMacro — Lua как язык макросов

Post by Shmuel »

Исправлено, спасибо за репорт.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

В статье о far.SendDlgMessage сказано, что для DM_LISTSETCURPOS возвращаемое значение имеет тип Integer, а о смысле возвращаемого значения ничего, т.е. отсылает к Энциклопедии, где сказано:

Code: Select all

Скорректированная позиция курсора в списке с учётом разделительных линий и недоступных пунктов. 
И вот тут всплывает, что позиция курсора считается в luafar c 1, а не с 0.
Вопрос: так и задумано, возвращать значение без корректировки?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

вряд ли.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

Спасибо за репорт, исправлено.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Code: Select all

lua:=far.Menu({},{{}},"Esc")
При нажатии Esc возвращается позиция 1.
Теперь ещё раз, но список отфильтровать так, чтобы в нём не осталось элементов (RAlt a Esc).
Возвращается 0.

Смотрю на статью в Энциклопедии, и не уверен, что понимаю, откуда вообще мог взяться 0, ведь LuaFar приводит значения к базе 1 (т.е. добавляет единицу).

Что же тогда для этого случая возвращается в C API?
-1 не может быть, ведь означает отмену меню.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

John Doe wrote: Mon 30 Oct, 2017 14:43-1 не может быть, ведь означает отмену меню.
Тем не менее, это так.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Выходит LuaFAR ориентируется не только на документированное значение возврата, но и на BreakCode.
Но если в вышеприведённом примере нажать Enter, то получем nil, как будто произошла отмена меню.
Т.е. в этом случае эвристика LuaFAR бессильна.

Вероятно есть смысл запостить на багтрекер пожелание о том, чтобы задокументировать этот случай, и для зафильтрованного списка возвращать значение -2.
И наверно запретить закрытие по Enter (ничего же не выбрано).
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

John Doe wrote: Mon 30 Oct, 2017 16:50Выходит LuaFAR ориентируется не только на документированное значение возврата, но и на BreakCode.
Но если в вышеприведённом примере нажать Enter, то получем nil, как будто произошла отмена меню.
Т.е. в этом случае эвристика LuaFAR бессильна.
Никакой эвристики, зачем фантазировать, код ведь открыт.
Второе возвращаемое значение far.Menu всегда равно значению от Фара + 1, за исключением случая отмены меню.
Last edited by Shmuel on Mon 30 Oct, 2017 17:01, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Возможно слово неудачное, но "эвристикой" я назвал то, что LuaFAR анализирует BreakCode даже когда функция Menu возвращает -1.
В любом случае я вижу недостаток в апи плагинов, а не в LuaFAR.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

Вот мне непонятно, к чему всё это выяснение. Вы специально сочинили пример, где BreakKey==Esc, и от этого пляшете. Но ни один нормальный программист не поставит Esc в качестве BreakKey, просто потому что у Esc есть общепринятое назначение.
На этом данная дискуссия с моей стороны прекращается.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Shmuel wrote: Mon 30 Oct, 2017 17:32Вы специально сочинили пример, где BreakKey==Esc
Увы, это как раз пример из реального скрипта, и смысл указывать эту клавишу заключается в том, чтобы иметь возможность перед закрытием меню запомнить позицию.

Но соль ведь совсем в другом: позиция (в этом частном случае) возвращается несуществующая, что не было предусмотрено в моём скрипте (поскольку данный случай нигде не документирован), и приводило к падению.
В рамках данной темы дискутировать не о чем, да.
Post Reply

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