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

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

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

Post by John Doe » Wed 29 Jul, 2009 21:41

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

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

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

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

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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Thu 11 Feb, 2016 07:44

Latest post of the previous page:

IgorZ wrote: Вероятно, обнаружена ошибка в CommandLine. Или в документации.
Скорее неполнота документации.
Общее правило таково, что т.н. "функции с ограничением в использовании" могут работать только из функции action макроса. Все прочие варианты пролетают (Event, CommandLine, MenuItem, condition).

IgorZ
Posts: 459
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

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

Post by IgorZ » Thu 11 Feb, 2016 12:42

Shmuel wrote:Скорее неполнота документации.
Общее правило таково, что т.н. "функции с ограничением в использовании" могут работать только из функции action макроса. Все прочие варианты пролетают (Event, CommandLine, MenuItem, condition).
OK. Тогда хотелось бы поправки документации. Даже не столько для себя - я раз нарвался, теперь, скорее всего, буду помнить - для остальных.
Last edited by IgorZ on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Удалён оверквотинг

Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sun 06 Mar, 2016 18:26

Получилась некоторая избыточность с DeleteRegKeyEx и DeleteRegKey. Может лучше одну DeleteRegKey из которой сначала попытаться вызвать DeleteRegKeyExW, а если не получилось, то DeleteRegKeyW игнорируя AccessMask? А то для DeleteRegKeyEx сейчас возврат непонятный, то ли просто удалить не удалось (раздела нет), то ли функция не поддерживается и надо вызывать DeleteRegKey.
Разум когда-нибудь победит.

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 06 Mar, 2016 19:07

Smitis
Две функции сделаны, чтобы не изменять логику старой. Обе останутся.
Что касается win.DeleteRegKeyEx, то можно дифференцировать причину неудачи вторым возвращаемым значением, например числом 1 или 2. Можно и кодом ошибки Windows (кажется он всегда неотрицательный) и -1.
Высказывайтесь.

Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sun 06 Mar, 2016 19:35

Намутили MS с этим WOW :facepalm:

Может для DeleteRegKeyEx в случае невозможности вызвать DeleteRegKeyExW возвращать nil?
Разум когда-нибудь победит.

Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sun 06 Mar, 2016 19:44

Shmuel wrote:Можно и кодом ошибки Windows (кажется он всегда неотрицательный) и -1.
Код ошибки только для одной функции как-то нелогично. Тогда уж для всех :) Например, переменная win.LastError
Разум когда-нибудь победит.

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 06 Mar, 2016 19:48

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

Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sun 06 Mar, 2016 19:59

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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 06 Mar, 2016 20:03

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

Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sun 06 Mar, 2016 20:30

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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 06 Mar, 2016 20:41

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

User avatar
DrKnS
Posts: 4589
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 116 times
Contact:

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

Post by DrKnS » Sun 06 Mar, 2016 22:12

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

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

Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sun 06 Mar, 2016 22:59

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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 06 Mar, 2016 23:01

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: 5252
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Sun 06 Mar, 2016 23:51

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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sun 06 Mar, 2016 23:55

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

User avatar
DrKnS
Posts: 4589
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 116 times
Contact:

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

Post by DrKnS » Mon 07 Mar, 2016 01:03

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

Post Reply

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