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

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

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

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

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

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

Post by John Doe » Thu 15 Nov, 2018 08:54

Latest post of the previous page:

Code: Select all

colordata = editor.GetColor(EditorId, StringNumber, ColorItem)
ColorItem нумеруется с 0
Забыт при ломке апи?
Будет ли меняться теперь?

Shmuel
Posts: 5899
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 220 times

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

Post by Shmuel » Thu 15 Nov, 2018 09:33

John Doe wrote:
Thu 15 Nov, 2018 08:54
ColorItem нумеруется с 0
Забыт при ломке апи?
Навряд ли забыт, учитывая, что в мануале явно указано, что нумерация с нуля. Однако сейчас не помню, почему так было сделано.
Поиск по скриптам и LuaFAR-плагинам у меня на диске показал, что эта функция в них не используется.
Если считаете нужным изменить эту ситуацию - на Мантис.
Last edited by Shmuel on Thu 15 Nov, 2018 09:33, edited 1 time in total.

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

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

Post by John Doe » Thu 15 Nov, 2018 13:14

Shmuel wrote:
Thu 15 Nov, 2018 09:33
Если считаете нужным изменить эту ситуацию - на Мантис.
Я не вижу общей картины, поэтому затрудняюсь определить необходимость.
Кажется что в большинстве подобных случаев нумерация в LuaFAR изменена.
Но поскольку здесь база отсчёта документирована в описании функции, то проблемы никакой нет.

Shmuel
Posts: 5899
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 220 times

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

Post by Shmuel » Thu 15 Nov, 2018 13:18

Проблемы нет, но и противопоказаний к изменению как бы не видно (кроме обратной совместимости).

User avatar
SUSim
Posts: 1531
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 9 times

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

Post by SUSim » Sat 17 Nov, 2018 07:33

а по мне 0 это как бы базовый цвет, а потом уже раскраска начинается плагинами/макросами, вроде логично.
SimSU ··· ·· -- ··· ··-

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

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

Post by John Doe » Sat 17 Nov, 2018 09:23

Нет никакого базового цвета, вся раскраска только плагинами, и 0 - это первая раскраска.

User avatar
SUSim
Posts: 1531
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 9 times

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

Post by SUSim » Sun 18 Nov, 2018 08:36

Ну как хотите, если менять, то щас (чем раньше тем лучше) пока макросов определяющих цвет мало!
Last edited by SUSim on Sun 18 Nov, 2018 08:36, edited 1 time in total.
SimSU ··· ·· -- ··· ··-

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

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

Post by IgorZ » Mon 14 Jan, 2019 07:27

Столкнулся с непонятным поведением обработчика событий просмотрщика Far.
  1. Event{
  2.   group="ViewerEvent";
  3.   condition=function(_,Event) return Event==F.VE_READ or Event==F.VE_CLOSE end;
  4.   action=function(Id) far.Show(viewer.GetFileName(Id)) end;
  5. }
Данный обработчик событий показывает имя файла при открытии и закрытии. Если открыть файл в просмотрщике, имя файла возвращается правильно и при открытии, и при закрытии. Если же открыть файл в быстром просмотре, при открытии имя файла возвращается правильно, а при закрытии возвращается nil. Такое различие - нормально или ошибка?
Far 3.0.5351 x86, Windows XP SP3.

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

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

Post by John Doe » Mon 14 Jan, 2019 08:13


2useven10
Posts: 3967
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 168 times

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

Post by 2useven10 » Mon 14 Jan, 2019 08:17

IgorZ wrote:
Mon 14 Jan, 2019 07:27
Такое различие - нормально или ошибка?
Не знаю правильно это или нет.
Если переключиться на окно просмотра (Tab) скорее всего имя файла будет правильным.
Похоже Viewer.FileName непустое только если текущая область просмотрщик.
В нормальном просмотре, если окно нективно (F12 ...) - Viewer.FileName тоже пустое.

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

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

Post by John Doe » Mon 14 Jan, 2019 08:43

> Viewer.FileName

Поведение ожидаемое, но выше речь не о нём, а о плагиновом апи.

2useven10
Posts: 3967
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 168 times

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

Post by 2useven10 » Mon 14 Jan, 2019 09:28

John Doe wrote:
Mon 14 Jan, 2019 08:43
Поведение ожидаемое, но выше речь не о нём, а о плагиновом апи.
Да. Просто похоже способ получения имени один и тот же.

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

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

Post by IgorZ » Mon 14 Jan, 2019 09:43

2useven10 wrote:
Mon 14 Jan, 2019 08:17
Если переключиться на окно просмотра (Tab) скорее всего имя файла будет правильным.
Нет, пустое, я проверил сразу. При чтении, кстати, хоть окно и неактивное, имя файла показывается корректно.

P. S. Проверил viewer.GetInfo. Картина идентичная, так что ситуация шире, на самом деле.

P. P. S. Дописал насчёт viewer.GetInfoVCTL_GETINFO на мантиссе.
Last edited by IgorZ on Mon 14 Jan, 2019 09:44, edited 1 time in total.

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

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

Post by zg » Thu 17 Oct, 2019 01:04

из DN_KILLFOCUS можно вернуть индекс элемента, которому надо передать фокус. в текущей версии оно 0-based.

Shmuel
Posts: 5899
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 220 times

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

Post by Shmuel » Thu 17 Oct, 2019 06:47

zg wrote:
Thu 17 Oct, 2019 01:04
из DN_KILLFOCUS можно вернуть индекс элемента, которому надо передать фокус. в текущей версии оно 0-based.
Вроде поправил.

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

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

Post by IgorZ » Wed 06 Nov, 2019 07:22

Всем добрый день. У меня закончилась страда, появилось свободное время, и я начал разбираться с хвостами. Изучая проблему с match, проявившуюся в LuaManager после замены библиотеки string, обнаружил две, как мне кажется, ошибки.

Первая касается встроенной match:

Code: Select all

local txt = ("A\n"):rep(300)
local pati,patr = ".-\n",".*?\n"
local n = 199
far.Show(n,"regex",regex.match(txt,patr:rep(n)))
far.Show(n,"internal",txt:match(pati:rep(n)))
n = 200
far.Show(n,"regex",regex.match(txt,patr:rep(n)))
far.Show(n,"internal",txt:match(pati:rep(n)))
Как видно из примера, совершенно корректный синтаксически паттерн работает, повторённый 199 и менее раз, но вызывает ошибку pattern too complex, повторённый 200 и более раз.

Вторая ошибка относится к regex.match:

Code: Select all

local txt = ("A\n"):rep(300)
local pat1,pat2 = ".*\n",".*?\n"
far.Show("regex",pat1,regex.match(txt,pat1:rep(10)))
far.Show("regex",pat2,regex.match(txt,pat2:rep(10)))
far.Show("internal",pat1,txt:match(pat1:rep(10)))
Как видно из примера, жадный паттерн захватывает тот же фрагмент, что и нежадный. При этом встроенный match отрабатывает жадный паттерн корректно.

P. S. Вероятно, не ошибка, но хотелось бы уточнить у Shmuel: changelog LuaMacro до билда 698 включительно идёт по-русски, а начиная с билда 699 - по-английски. Это так и задумано?

Shmuel
Posts: 5899
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 220 times

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

Post by Shmuel » Wed 06 Nov, 2019 08:32

IgorZ wrote:
Wed 06 Nov, 2019 07:22
Как видно из примера, совершенно корректный синтаксически паттерн работает, повторённый 199 и менее раз, но вызывает ошибку pattern too complex, повторённый 200 и более раз.
Это же поведение у стандартного string.match. Ограничение вводится, чтобы предотвратить экспоненциальный рост времени исполнения с увеличением n.
IgorZ wrote:
Wed 06 Nov, 2019 07:22
Вторая ошибка относится к regex.match:
И это тоже не ошибка. Для того, чтоб regex.match с паттерном "." находил "\n", ему нужно указать флаг "s" (см. документацию).
IgorZ wrote:
Wed 06 Nov, 2019 07:22
changelog LuaMacro до билда 698 включительно идёт по-русски, а начиная с билда 699 - по-английски. Это так и задумано?
Да. По здравому размышлению пришёл к выводу, что так будет правильнее. Английский знают во всём мире, а русский, к сожалению, нет.
Last edited by Shmuel on Wed 06 Nov, 2019 08:41, edited 1 time in total.

Post Reply

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