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

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

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

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

IgorZ
Posts: 689
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 60 times

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

Post by IgorZ »

Latest post of the previous page:

zg wrote:
Fri 13 Dec, 2019 11:54
в GetOpenPanelInfo возвращаете соответствующие флаги, в зависимости от них будет или не будет вызываться GetFiles.
Это я знаю. Я хочу из своего GetFiles, в зависимости от того, что пришло, или самому обработать, или вернуть Far, чтобы работал он. Задача - копирование/перенос делать самому, а всё остальное Far и без меня отлично обрабатывает. С удалением всё просто - оно GetFiles не касается, там свой обработчик. А вот Enter,PgDn,CtrlQ...
Я, конечно, с момента предыдущего поста не сидел на месте и уже сваял обход через ProcessPanelInput. Но он мне не совсем нравится. Да и разобраться до конца с нюансами работы с GetFiles хотелось бы, на будущее.

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

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

Post by zg »

IgorZ wrote:
Mon 16 Dec, 2019 06:43
Я хочу из своего GetFiles, в зависимости от того, что пришло, или самому обработать, или вернуть Far, чтобы работал он.
нет такой возможности.

buniak_a_h
Posts: 1859
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 118 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

IgorZ wrote:
Mon 16 Dec, 2019 06:43
копирование/перенос делать самому, а всё остальное Far и без меня отлично обрабатывает
Если Вы имеете в виду панель для показа результатов поиска, то не согласен:
1. Удаление ФАР не делает, надо реализовывать экспортируемую функцию;
2. Отметку ([Ins] на строке с "корневым" каталогом) - хочется, чтоб отмечались все файлы в этой папке
3. Вас JD просил сделать "внутренние" файлы. Если сделаете (я там, вроде, почти сделал - кроме случая когда архив единственный (ошибка в бинарном поиске)), то просмотр/редактирование тоже придётся делать самому.
Правда, я не знаю, насколько уместно обсуждение Вашего же панельного модуля в этой теме.
Last edited by buniak_a_h on Mon 16 Dec, 2019 15:31, edited 1 time in total.

IgorZ
Posts: 689
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 60 times

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

Post by IgorZ »

zg wrote:
Mon 16 Dec, 2019 12:07
IgorZ wrote:
Mon 16 Dec, 2019 06:43
Я хочу из своего GetFiles, в зависимости от того, что пришло, или самому обработать, или вернуть Far, чтобы работал он.
нет такой возможности.
Жаль. Значит, будет, как сделал. Дополирую и выложу.


buniak_a_h
Posts: 1859
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 118 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

Натолкнулся на то ли недоделку, то ли нелогичность.
Цитирую энциклопедию:
%farhome%\Encyclopedia\FarEncyclopedia.ru.chm:\html\service_functions\dialoginit.html wrote: HANDLE WINAPI DialogInit(
… … … … … … …
FARWINDOWPROC DlgProc,
void *Param
);
В то же время в
%farhome%\Encyclopedia\luafar_manual:\378.html wrote: hDlg = far.DialogInit (Guid,X1,Y1,X2,Y2,HelpTopic,Items,Flags,fDlgProc)
Parameters:
… … … … … … …
fDlgProc: function (dialog event handler), or nil
Что с параметром void *Param?
(а)забыли реализовать в LuaFAR его передачу;
(б) забыли указать в документации
(в) так и задумано
? В случае (в) это как-то трудно объяснимо и зря.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 288 times

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

Post by John Doe »

(д) не посчитали нужным реализовывать

Если у вас есть стоящий юзкейс, то могут и реализовать.
https://t.me/FarManager — Telegram чат

buniak_a_h
Posts: 1859
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 118 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

John Doe wrote:
Thu 07 May, 2020 07:19
Если у вас есть стоящий юзкейс, то могут и реализовать.
Я попробовал. Вызов DM_GETDLGDATA возвращает число. Это не очень полезно. Гле-то написано было any LUA object - если бы туда можно было запихивать таблицу, было бы удобно.
Я в своих скриптах часто пользуюсь таким приёмом: в массиве Items в некоторых элементах использую именованное поле Name (на самом деле - не только Name). В обработчике я либо ищу по этому полю, либо проверяю его. К сожалению, вызов DM_GETDLGITEM не возвращает ничего "лишнего". Поэтому приходится в обработчик передавать исходный массив Items. Хитрость в том, что сам диалог в модуле, а обработчик - в макросе, вызывающем процедуру с диалогом. Наверно, код несколько уменьшился бы, если б я мог получить эту таблицу через DM_GETDLGDATA. Хотя вряд ли это стоит усилий. Я ответ получил; не особо и нужно. ( (д) == (в) )

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 288 times

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

Post by John Doe »

buniak_a_h wrote:
Thu 07 May, 2020 08:53
Хотя вряд ли это стоит усилий
Может стоит, а может нет.
Без кода мне например не очень понятно чего вы хотите.
https://t.me/FarManager — Telegram чат

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

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

Post by Shmuel »

Параметр Param используется в LuaFAR для внутренних нужд.
При необходимости можно его сэмулировать средствами Lua, возможно даже разными способами.
Смутно припоминаю его использование во времена Far1, но сейчас неохота искать в старом коде.

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

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

Post by zg »

buniak_a_h wrote:
Thu 07 May, 2020 00:54
(в) так и задумано
? В случае (в) это как-то трудно объяснимо и зря.
оригинальное апи для C, там по другому сложно передать в функцию состояние, в луа же это делается элементарно far.DialogInit(…,function (...) DlgProc(Param,...) end). поэтому сишные костыли не нужны.
Last edited by zg on Thu 07 May, 2020 15:20, edited 1 time in total.

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

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

Post by Shmuel »

zg, красиво, только наверное надо вставить return перед DlgProc.

Post Reply

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