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

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

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

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

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

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

Post by zg »

Latest post of the previous page:

Shmuel wrote:Не знаю, как в LuaJIT, а в Lua 5.1 - зависит:
в lua — да, используется ispunct, он от локали
Shmuel wrote:Ковыряться в исходниках LuaJIT для того, чтобы что-то доказывать, нет времени.
я имя файла с таблицей привёл — это конец. начало в lib_string.c:singlematch.

Shmuel
Posts: 5963
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 24 times
Been thanked: 256 times

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

Post by Shmuel »

zg wrote:я имя файла с таблицей привёл — это конец. начало в lib_string.c:singlematch.
Поверю на слово. (Я не пользуюсь %p, поэтому меня это не слишком интересует.)

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

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

Post by zg »

Shmuel wrote:Поверю на слово. (Я не пользуюсь %p, поэтому меня это не слишком интересует.)
да я тоже не использую, просто хотел посмотреть металуа, а они там операторы матчат через двоеточие — не работает. вот разбирался почему.

Shmuel
Posts: 5963
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 24 times
Been thanked: 256 times

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

Post by Shmuel »

zg wrote:просто хотел посмотреть металуа
Хотелось добавить Metalua в Фар?

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

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

Post by zg »

Shmuel wrote:Хотелось добавить Metalua в Фар?
пока ещё всё не на такой стадии, но кто знает :)

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

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

Post by hoopoe »

Shmuel wrote:msgbox - глобальная функция. Читайте уже упомянутый macroapi_manual.ru.chm.
стараюсь ;)
очень сложно переключить мышление на скриптовый плуг... как заново ходить учусь :)

я правильно понимаю что полноценно зарегестрировать свою команду из Event'а невозможно?

вы бы сделали пару самплов (zip файлов с подсказкой куда положить, типа hello world) и доками внутри - это была б отличная стартовая точка для начинающих, ведь для написания скриптовый плугов нужен только текстовый редактор, потенциально порог вхождения можно сильно уронить, но данные очень сильно размазаны по форуму :)

ткните носом еще в скриптовый плуг, что-ли... есть какая-нибудь dll, которая бы подняла рядом с собой lua файл и зарегестрировала его как полноценный плагин?

Shmuel
Posts: 5963
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 24 times
Been thanked: 256 times

Re: Событие CommandLine — макросы для командной строки

Post by Shmuel »

hoopoe
Зарегистрировать свою команду на данный момент нельзя, но можно первый аргумент после lm:user использовать как свою команду.

Зачем вам писать скриптовый плуг? Это можно, конечно, но в 95% случаев вполне достаточно макроса (Macro) или обработчика события (Event). Не надо никаких dll, плагин LuaMacro обрабатывает макросы и эвенты сам.

Если же вам действительно почему-то надо LuaFAR-плагин, то LuaMacro таковым и является. Вы можете скопировать его dll в другую папку, переименовать, создать одноимённый Lua-файл, добавить _globalinfo.lua (измените там все поля таблицы "под себя") - и вперёд.

Документацию никакую дополнительную делать не буду. Существующей достаточно, читайте её, а на вопросы вам отвечу или другие ответят.

User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Re: Событие CommandLine — макросы для командной строки

Post by hoopoe »

Shmuel wrote:Если же вам действительно почему-то надо LuaFAR-плагин, то LuaMacro таковым и является
а вот за этот совет низкий поклон... посмотрел как устроена инфраструктура Lua в фаре, стало многое понятно (в том числе и то, что с префиксами в макросах все печально)

будем копать 8)

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

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

Post by John Doe »

Проблема с far.MacroDelete.
Так работает:

Code: Select all

local id=far.MacroAdd ("MACROAREA_SHELL", nil, "CtrlF3", "msgbox('added on the fly')")
far.MacroDelete(id)
Но если этот id получить из таблицы макроса , то получаем ошибку: bad argument #1 to 'MacroDelete' (FarAddMacroData expected, got userdata)
При этом визуально id полученный обоими способами не отличается (напр. userdata: 0x0480c3f8)

Shmuel
Posts: 5963
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 24 times
Been thanked: 256 times

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

Post by Shmuel »

John Doe wrote:Проблема с far.MacroDelete.
В макросе хранится указатель, полученный от Фар (light userdata), а не оригинальный full userdata. Нигде не указано, что можно его использовать как аргумент для far.MacroDelete, поскольку он не является оригинальной величиной, возвращённой far.MacroAdd.

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

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

Post by John Doe »

Строго говоря, нигде не написано, что с данными из таблицы возвращаемой mf.GetMacroCopy можно хоть что-то делать, я это понимаю.
Однако раньше всё работало.

Вот только что ещё раз убедился в этом, проверял в Far30b3769.x86.20140114.7z.

P.S.
Я просто хочу убедиться, что нигде нет ошибки.
Если вы решили что так больше нельзя, то приму к сведению.

Shmuel
Posts: 5963
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 24 times
Been thanked: 256 times

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

Post by Shmuel »

John Doe wrote:Однако раньше всё работало.
[......]
Я просто хочу убедиться, что нигде нет ошибки.
Это работало раньше, вплоть до
shmuel 25.06.2014 13:37:44 +0200 - build 382
1. LuaFAR: far.MacroAdd и far.MacroDelete могут работать не только из основного lua_State, но и из дополнительных.
То, что far.MacroDelete раньше работал с CallbackId, взятым из таблицы макроса, можно рассматривать просто как случайность, следствие той имплементации, которая была.

IgorZ
Posts: 660
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 12 times
Been thanked: 52 times

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

Post by IgorZ »

Это, кажется ошибка.
  1. far.Show(("abcde123"):match("()123"),("абвгд123"):match("()123"))
выдаёт

Code: Select all

  ╔════════════════╗
  ║  1│ 6          ║
  ║  2│ 11         ║
  ╚═ 2 arguments ══╝
А должен, по идее 6,6. Ведь все строковые функции, кроме find, юникодные.

Shmuel
Posts: 5963
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 24 times
Been thanked: 256 times

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

Post by Shmuel »

IgorZ wrote:Это, кажется ошибка.
[......]
Ведь все строковые функции, кроме find, юникодные.
1. Это не ошибка. Позиционный capture в этой библиотеке всегда в байтах, в любой функции.
2. Функция find тоже юникодная, но смещения выдаёт в байтах.

Так устроена эта библиотека. Полученные байтовые смещения можно с успехом применить в функции string.sub, или в тех же unicode.utf8.find/match, входные смещения которых воспринимаются именно в байтах.

Возможно сделать врапперы на Lua, которые всё это исправят, но производительность при этом сильно пострадает.

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

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

Post by John Doe »

Имея смещение в байтах, как оптимальным образом получить смещение в символах?

User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

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

Post by Aidar »

John Doe wrote:Имея смещение в байтах, как оптимальным образом получить смещение в символах?
Наверное, так:
  1. local s, n = "АБВ", 4
  2. local m = string.sub(s, 1, n):len()
  3. far.Show(s, n, m)
Если, конечно, байтовая позиция символа корректная.

Post Reply

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