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

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

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

Post by John Doe »

Проект Spring (обсуждение) влился в стабильную версию Far Manager 3.0.

Таким образом, в макросах сейчас доступны:
  • Стандартные функции и библиотеки Lua.
  • В фаре используется LuaJIT (обсуждение), что (в частности) даёт доступ к библиотеке FFI (обсуждение).
  • "Надстройка" над Lua: MoonScript (Подробности и обсуждение)
  • Функции API плагинов, посредством библиотеки LuaFAR (см. luafar_manual.chm)
  • Функции старого макроязыка (API макросов) (Обновление)
    Актуальный мануал, отражающий после перехода на Lua: macroapi_manual.ru.chm.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:
User avatar
John Doe
Бюрократ
Posts: 13199
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 45 times
Been thanked: 334 times

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

Post by John Doe »

Latest post of the previous page:

Shmuel wrote: Mon 21 Oct, 2019 10:17 Невалидный Idx (и другие невалидные ситуации) могут быть для всех значений 3-го параметра. Какой смысл вводить эту фичу только для свойства 8 ?
Необязательно только для 8.
Можно в таких случах возвращать nil для всех.

https://bugs.farmanager.com/view.php?id=3748
Last edited by John Doe on Mon 21 Oct, 2019 10:55, edited 1 time in total.
Shmuel
Posts: 6304
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 386 times

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

Post by Shmuel »

John Doe wrote: Mon 21 Oct, 2019 10:23 Необязательно только для 8.
Можно в таких случах возвращать nil для всех.
Вы правы, для этого есть Мантис.
User avatar
John Doe
Бюрократ
Posts: 13199
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 45 times
Been thanked: 334 times

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

Post by John Doe »

Code: Select all

lua:Plugin.Call("42E4AEB1-A230-44F4-B33C-F195BB654931")
Гуид принадлежит NetBox.

Очевидно плагин не рассчитан на такой вызов, но может быть возможно защитить luamacro от падения?

Code: Select all

Exception:    0xC0000005 - EXCEPTION_ACCESS_VIOLATION
Details:      Memory at F05A7F35 could not be read
errno:        0x00000000 - No error
LastError:    0x00000012 - There are no more files.
NTSTATUS:     0x80000006 - {No More Files}  No more files were found which match the file specification.
Address:      0x74F0C0A0 - KERNELBASE.dll!WideCharToMultiByte
Source:       
Function:     OpenW
Module:       C:\APPs\Far3\Plugins\LuaMacro\luamacro.dll
Version:      3.0.0.5546 x86 (acb68af)
OS:           10.0.17763.2.0.0.256.1 (version 1809, OS build 17763.973)

0x74F0C0A0 KERNELBASE.dll!WideCharToMultiByte
0x63E12838 luafar3.dll!luaopen_luafar3
0x63E12908 luafar3.dll!luaopen_luafar3
0x63DFA7F4 luafar3.dll!LF_SetFindList
Shmuel
Posts: 6304
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 386 times

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

Post by Shmuel »

Это падает NetBox (несмотря на то, что в сообщении указано LuaMacro).

Впрочем, будем посмотреть.
Last edited by Shmuel on Tue 21 Jan, 2020 14:59, edited 1 time in total.
Shmuel
Posts: 6304
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 386 times

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

Post by Shmuel »

Судя по стеку, да, падает LuaFAR, но он получает от NetBox'а указатель на строку, который указывает на память, не принадлежащую NetBox'у (то есть "мусорный" указатель). LuaFAR проверяет указатель на NULL, но у него нет средств отличить мусорный указатель от валидного.
Shmuel
Posts: 6304
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 386 times

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

Post by Shmuel »

John Doe, вот патч, который предотвращает падение. Там 2 бранча на гитхабе, патч, естественно, для Far3.

Code: Select all

--- Old\FarPlugin.cpp	Sun Jul 21 08:58:38 2019
+++ New\FarPlugin.cpp	Wed Jan 22 20:39:33 2020
@@ -309,6 +309,8 @@
 
   try
   {
+    if (Info->OpenFrom == OPEN_FROMMACRO)
+      return nullptr;
     ResetCachedInfo();
     intptr_t Item = 0;
     if (*Info->Guid == MenuCommandsGuid)
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

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

Post by zg »

сделайте пул-реквест, у Алекса права есть.
Shmuel
Posts: 6304
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 386 times

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

Post by Shmuel »

zg wrote: Fri 24 Jan, 2020 00:02сделайте пул-реквест
Сделаю в ближайшие дни.
IgorZ
Posts: 731
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 79 times

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

Post by IgorZ »

Дошли руки посмотреть ContentColumns на предмет добавления в LuaManager. В результате родилось два предложения и пожелание (наверное, даже, скорее, мечта).
  1. Доработать в utils.lua функцию следующим образом: .
    Это добавит к ContentColumns имя файла, что позволит более корректно находить исходный код (код функций, в общем случае, может быть и в другом файле), а также даст возможность описывать, что именно позволяют выводить данные колонки.
  2. Добавить в macroapi_manual.*.chm соответствующие изменения в описание и пример ContentColumns.
  3. Хотелось бы, конечно, иметь возможность получать стандартным образом список имён колонок, которые обрабатывает данный скрипт. Но, похоже, для этого надо пилить АПИ самого Фар-а. Я за это точно не возьмусь.
User avatar
John Doe
Бюрократ
Posts: 13199
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 45 times
Been thanked: 334 times

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

Post by John Doe »

Edit: считаю предложенные изменения полезными, т.к. они способствуют консистентности.

1. Надо бы посмотреть где ещё не хватает информации об исходном файле, и описания.
2. Вероятно не помешает id, возможно что-то ещё.
Last edited by John Doe on Fri 11 Jun, 2021 09:26, edited 1 time in total.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13199
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 45 times
Been thanked: 334 times

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

Post by John Doe »

IgorZ wrote: Fri 11 Jun, 2021 05:29 Добавить в macroapi_manual.*.chm соответствующие изменения в описание и пример ContentColumns.
А вот тут совсем не уверен: кажется преждевременным документировать поля, которые невозможно никак получить (через оф. апи).

Возможно стоит начать с https://bugs.farmanager.com/view.php?id=3536
https://t.me/FarManager — Telegram чат
Post Reply

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