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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12652
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 270 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: 12652
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 270 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: 6030
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 27 times
Been thanked: 291 times

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

Post by Shmuel »

John Doe wrote:
Mon 21 Oct, 2019 10:23
Необязательно только для 8.
Можно в таких случах возвращать nil для всех.
Вы правы, для этого есть Мантис.

User avatar
John Doe
Бюрократ
Posts: 12652
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 270 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: 6030
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 27 times
Been thanked: 291 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: 6030
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 27 times
Been thanked: 291 times

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

Post by Shmuel »

Судя по стеку, да, падает LuaFAR, но он получает от NetBox'а указатель на строку, который указывает на память, не принадлежащую NetBox'у (то есть "мусорный" указатель). LuaFAR проверяет указатель на NULL, но у него нет средств отличить мусорный указатель от валидного.

Shmuel
Posts: 6030
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 27 times
Been thanked: 291 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: 5714
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 134 times
Contact:

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

Post by zg »

сделайте пул-реквест, у Алекса права есть.

Shmuel
Posts: 6030
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 27 times
Been thanked: 291 times

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

Post by Shmuel »

zg wrote:
Fri 24 Jan, 2020 00:02
сделайте пул-реквест
Сделаю в ближайшие дни.

Post Reply

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