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

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

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, в дистрибутиве)

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

Полезное по теме: См. также:

Shmuel
Posts: 6151
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

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

Post by Shmuel »

Latest post of the previous page:

Smitis wrote: Может для DeleteRegKeyEx в случае невозможности вызвать DeleteRegKeyExW возвращать nil?
Не, это изощрение, проверять, что вернулось: nil или false. Путь лучше API будет тяжелее (возвращение двух значений), но прямолинейнее. Тем более, что это функция не частого применения. Ну, а если кого-то будет раздражать "тяжёлое" API, может легко сделать обёртку на Lua.
Smitis wrote: Код ошибки только для одной функции как-то нелогично. Тогда уж для всех
Значит просто 2 варианта второй возвращаемой величины. Ломку/развитие всего API сейчас делать не в планах.

Smitis
Posts: 1624
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 41 times

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

Post by Smitis »

Shmuel wrote:Не, это изощрение, проверять, что вернулось: nil или false.
Ну почему же, от текущего поведения почти не отличается, что nil, что false логически ведут себя одинаково.
Зато можно писать типа if win.DeleteRegKeyEx(RootKey, Key, "KEY_WOW64_64KEY")==nil then win.DeleteRegKey(RootKey, Key) end когда результат не интересует.
Разум когда-нибудь победит.

Shmuel
Posts: 6151
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

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

Post by Shmuel »

Smitis wrote: Ну почему же, от текущего поведения почти не отличается
Потому что так не делает ни одна уважающая себя библиотека. Даже возвращать разные числовые значения (как это делают многие ф-ции Macro API) - и то предпочтительней.

Smitis
Posts: 1624
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 41 times

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

Post by Smitis »

Многие функции из win, конечно, возвращают true или значение в случае удачи и nil+errormessage в случае ошибки, но достаточно и таких, которые этого принципа совершенно не придерживаются.
Но если в планах привести все к одному поведению, то тогда должно быть что-то типа true или nil + "Можно и кодом ошибки Windows (кажется он всегда неотрицательный) и -1."
Разум когда-нибудь победит.

Shmuel
Posts: 6151
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

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

Post by Shmuel »

Smitis wrote: Но если в планах привести все к одному поведению
Я уже сказал чуть выше, что на данный момент таких планов нет. Давайте закроем ф-цию win.DeleteRegKeyEx, остальное не будем трогать.

User avatar
DrKnS
Posts: 5646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 307 times

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

Post by DrKnS »

Те ОС, в которых нет RegDeleteKeyEx, и 64-битными не бывают, поэтому выключать редирект там необходимости нет.

Т. е. внутри вашего win.DeleteRegKeyEx вполне можно при отсутствии RegDeleteKeyEx вызывать RegDeleteKey, игнорируя флаги, это не повлияет на наблюдаемое поведение.

Smitis
Posts: 1624
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 41 times

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

Post by Smitis »

DrKnS wrote:Т. е. внутри вашего win.DeleteRegKeyEx вполне можно при отсутствии RegDeleteKeyEx вызывать RegDeleteKey, игнорируя флаги, это не повлияет на наблюдаемое поведение.
Собственно, это я и предлагал. Тогда необходимость в функции RegDeleteKey отпадёт. Поэтому можно оставить одну функцию RegDeleteKey, в которую перенести весь функционал RegDeleteKeyEx.
Разум когда-нибудь победит.

Shmuel
Posts: 6151
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

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

Post by Shmuel »

DrKnS
А как тогда понимать
Minimum supported client Windows Vista, Windows XP Professional x64 Edition [desktop apps only]
Я не в курсе, а что Windows XP x64 Home Edition не существует?

P.S. Посмотрел в википедии - таки существуют Windows XP x64, в которых нет RegDeleteKeyEx. Другой вопрос, стоит ли их поддержка свеч.

User avatar
zg
zero-gravity
Posts: 5844
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 153 times
Contact:

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

Post by zg »

Shmuel wrote:P.S. Посмотрел в википедии - таки существуют Windows XP x64, в которых нет RegDeleteKeyEx. Другой вопрос, стоит ли их поддержка свеч.
только Windows XP 64-Bit Edition for Itanium systems, Version 2002, не? а фар разве под итаниум собирается?

Shmuel
Posts: 6151
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

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

Post by Shmuel »

zg wrote: а фар разве под итаниум собирается?
Чего не знаю, того не знаю.

User avatar
DrKnS
Posts: 5646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 307 times

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

Post by DrKnS »

zg wrote: а фар разве под итаниум собирается?
Теоретически собрать было возможно, но реально ни одной официальной версии не было (и не будет, т. к. поддержку итаниума в VS > 2010 дропнули).

User avatar
zg
zero-gravity
Posts: 5844
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 153 times
Contact:

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

Post by zg »

я про то, что раньше можно было - знаю, вопрос про итаниум был риторическим.

Smitis
Posts: 1624
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 41 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: 6151
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

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

Post by Shmuel »

Smitis wrote: Возможно, это глюк не luafar, а функции Message.
far.Message в основном не меняет поведение ф-ции Message (несколько расширяет её возможности). То, что вы привели как глюк, это не глюк, это фича ф-ции Message. Вызывающая ф-ция ответственна за очищение экрана в этом случае.

Smitis
Posts: 1624
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 41 times

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

Post by Smitis »

Понял. Из справки было не совсем понятно поведение при пустой строке кнопок. Надо было смотреть справку по Message.
Разум когда-нибудь победит.

IgorZ
Posts: 695
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

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

Post by IgorZ »

Возникло у меня некоторое недопонимание в процессе работы.
  1. local guid = "742910F1-02ED-4542-851F-DEE37C2E13B2" -- EMenu
  2. local path = far.GetPluginInformation(far.FindPlugin(far.Flags.PFM_GUID,win.Uuid(guid))).ModuleName:match("^(.*)\\[^\\]*$")
  3. far.ShowHelp(path          ,nil,far.Flags.FHELP_CUSTOMPATH) -- работает
  4. far.ShowHelp(win.Uuid(guid),nil,far.Flags.FHELP_GUID) -- не работает
  5. far.ShowHelp(guid          ,nil,far.Flags.FHELP_GUID) -- не работает
Почему первый вариант работает, а второй нет (третий я уже на всякий случай попробовал)?

Post Reply

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