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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 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
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Latest post of the previous page:

Не согласен, я ведь процитировал документацию LuaFAR, и там о третьей возможности ни слова.

Если же открыть документацию фара, то там тоже только 2 варианта: 0 или 1
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:Не согласен, я ведь процитировал документацию LuaFAR, и там о третьей возможности ни слова.
Процитировали, теперь перечитайте.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Запуск макросов по событиям (build 3157+)

Post by John Doe »

Вы правы, всё согласно документации.

Но хочется разобраться что же именно происходит в фаре.

Событие такое: if Event == F.DE_DLGPROCINIT and FarDialogEvent.Msg == F.DN_CLOSE
Варианты поведения:
- nil/false: обработка событий продолжается
- 0: обработка событий прекращается, диалог остаётся открытым
- число отличное от 0: обработка событий прекращается, диалог закрывается (не выполняя действия)
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

Смотрите справку Фара по DN_CLOSE.
Если от ProcessDialogEvent поступил 0 (FALSE по терминологии Энциклопедии) - работа диалога продолжается.
Если от ProcessDialogEvent поступило число != 0 (TRUE по терминологии Энциклопедии) - "согласен с выходом из диалога". Это видимо значит немедленный выход, и родной обработчик Фара уже не получит управления. Документация Фара здесь тоже не однозначна.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Ага, немного разобрались.
Документация фара тут на мой взгляд как раз однозначна.

В данном случае есть 2 независимых действия:
- продолжать ли обработку событий (за это отвечает Возвращаемое значение ProcessDialogEventW)
- выходить ли из диалога (значение ProcessDialogEventInfo.FarDialogEvent.Result определяет действие DN_CLOSE)

Сложность тут в том, что значение возвращаемое функцией LuaFAR всего одно, и оно должно соответствовать двум разных значениям FAR Plugin API.
Вроде бы всё совмещается, но в LuaFAR manual надо хотя бы подчеркнуть, что FALSE соответствует "0", а TRUE соответствует "не 0".
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:Сложность тут в том, что значение возвращаемое функцией LuaFAR всего одно, и оно должно соответствовать двум разных значениям FAR Plugin API.
Вроде бы всё совмещается, но в LuaFAR manual надо хотя бы подчеркнуть, что под NULL соответствует "0", а TRUE соответствует "не 0".
Это всё не так. LuaFAR возвращает число. А дальше разбирайтесь, какое число вам надо.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Вот это "разбирайтесь" и нуждается в пояснении, потому что
- правду приходится искать в стороннем источнике - Энциклопедии, а в ней фигурируют TRUE и FALSE
- приведение типов в C и Lua работает по разному, например 0 это true в Lua, и FALSE в Энциклопедии.
Акцентировать этот момент стоит.

И второе.
"and ret will then be used as the return value of the dialog event handler"
Из этого фрагмента не ясно, что значение будет использовано не только как "return value", но и в ProcessDialogEventInfo.FarDialogEvent.Result.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

Вот поэтому-то я и предлагал вам доступ к мануалам на запись (дважды). А то критиковать вы горазды.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

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

Я не критикую, я пытаюсь разобраться, и как видите самостоятельно этого сделать пока не могу.
А не разобравшись как же править?

И даже разобравшись (я надеюсь сейчас-то мы разобрались) ещё надо крепко подумать над формулировками, чего я сам сделать тоже пока не могу, т.к. довольно слабо представляю себе функционирование диалогового API в LuaFAR (а тем более в FAR Plugin API).
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:Не стоит воспринимать это как критику.
В одном мануале только более 400 страниц, про исходный код библиотеки LuaFAR я молчу.
Понятно, что неточности могут быть.
Когда я занимался только луафаром и своими плагинами, у меня хватало времени и на документацию. Сейчас - не хватает (или я плохо организован; или не могу себя заставить взяться за неё). Поэтому, если есть небезразличные к этой документации люди - помогайте делом. Иначе - не думайте, что мне больше всех надо.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Делаю пока что могу.
1. Проясняю непонятные моменты.
2. Собираю в шапке. (вроде ничего не упустил)
3. Там же выложу линкифицированную версию мануала
IgorZ
Posts: 792
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Запустим следующий в любом каталоге, где есть файлы с описаниями. Например, в %FARHOME%\Addons\Colors\Custom Highlighting. Видно, что для каждого файла в поле Description возвращается nil, хотя у всех файлов в данном каталоге описания существует. Этот ошибка, или я делаю что-то не так? Мне надо получать описания всех файлов. Far 3.0.3298
P. S. ChangeTime и NumberOfLinks тоже, вроде бы, не должны возвращать 0.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

Кроме far.GetDirList ещё есть far.RecursiveSearch и panel.GetPanelItem.

-- Description никто из них не возвращает.
-- ChangeTime разное почему-то у far.RecursiveSearch и panel.GetPanelItem.
-- NumberOfLinks возвращается только от panel.GetPanelItem.

LuaFAR использует для заполнения таблицы одну и ту же внутреннюю функцию во всех трёх случаях. Следовательно, что Фар передаёт, то и видим.
IgorZ
Posts: 792
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Занятно. При этом свои панели Far заполняет корректно. Попробовать посмотреть в исходниках, как он это делает? Боюсь, моих навыков на это может не хватить. Но попробую.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

Shmuel wrote:-- Description никто из них не возвращает.
-- ChangeTime разное почему-то у far.RecursiveSearch и panel.GetPanelItem.
-- NumberOfLinks возвращается только от panel.GetPanelItem.
NumberOfLinks и Description и не должны заполняться в GetDirList и RecursiveSearch.
Description возвращается в GetPanelItem, если на панели включен режим описаний.

Про разный ChangeTime в RecursiveSearch и GetPanelItem давай подробнее.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

DrKnS wrote:Про разный ChangeTime в RecursiveSearch и GetPanelItem давай подробнее.
Приложены скрипты, которыми я смотрел.
Attachments
test.7z
(600 Bytes) Downloaded 88 times
Post Reply

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