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

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

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.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Latest post of the previous page:

SUSim wrote: Wed 14 Nov, 2018 16:46 Не понял, а где тут аргумент не-строка?
Если PPanel.FilePanel==false, то значение 2-го аргумента = false (то есть булевая величина).
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

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

Post by Denis »

В свете последних изменений сломался https://github.com/trexinc/evil-programmers LuaEditorSettingsCore,
это попытка включить подсветку diff и промотать к концу файла:

Code: Select all

╔══════════════════════════════════════════════════ Error ══════════════════════════════════════════════════╗
║ C:\MyUsers\programs\Far\x64\Plugins\Standard\luamacro\LuaMacro.dll:                                       ║
║ ...s\Far\x64\Profile\Macros\scripts\editorsettingscore.moon:511: bad argument #1 to 'len' (string         ║
║ expected, got nil)                                                                                        ║
║ stack traceback:                                                                                          ║
║    [builtin:len]: in function 'len'                                                                       ║
║    ...s\Far\x64\Profile\Macros\scripts\editorsettingscore.moon:511: in function 'Highlite'                ║
║    ...s\Far\x64\Profile\Macros\scripts\editorsettingscore.moon:834: in function 'action'                  ║
║    ...ers\programs\Far\x64\Plugins\Standard\luamacro\utils.lua:210: in function <...ers\programs\Far\x64\ ║
║ Plugins\Standard\luamacro\utils.lua:183>                                                                  ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                                                  { OK }                                                   ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Last edited by Denis on Sun 01 Sep, 2019 18:45, edited 1 time in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

С moonscript проблема - показывает ошибку на 511-й строке, а всего в файле 474 строки.
Полагаю, автор быстрее меня разберётся.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Code: Select all

shmuel 19.10.2019 18:22:32 +0200 - build 5490

1. Panel.Item(X,Idx,8) и Panel.Item(X,Idx,10) при невалидном Idx возвращали 0, теперь false.
https://api.farmanager.com/ru/macro/macrocmd/prop_func/panels.html wrote:

Code: Select all

8	Number	"Выделен?"
10	Number	SortGroup
8 - невалиндный Idx теперь не отличается от состояния "не выделен"
10 - тут аналогично, плюс ещё вопрос: физический смысл значения кто-то может объяснить?
(в документации number, а по факту boolean, но вероятно так надо)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Code: Select all

22	Var	Значение Custom-колонки
Всегда пустая строка, вероятно не адаптировано для текущего апи колонок.
Last edited by John Doe on Mon 21 Oct, 2019 08:55, edited 1 time in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Mon 21 Oct, 2019 08:21 8 - невалиндный Idx теперь не отличается от состояния "не выделен"
Это так, но это был недокументированный артефакт, поддерживать который только для свойства номер 8 (ибо для прочих свойств такой особенности нет) не имело смысла.
John Doe wrote: Mon 21 Oct, 2019 08:21 10 - тут аналогично, плюс ещё вопрос: физический смысл значения кто-то может объяснить?
(в документации number, а по факту boolean, но вероятно так надо)
Уже снова number (билд 5493). То, что раньше было boolean - это моя давнишняя ошибка, вследствие невникания или спешки. Удивительно, что в течение 7 лет это никому не мешало.
John Doe wrote: Mon 21 Oct, 2019 08:51 Код: Выделить всё

22 Var Значение Custom-колонки

Всегда пустая строка, вероятно не адаптировано для текущего апи колонок.
Это на мантис. Сейчас нет времени разбираться.
Last edited by Shmuel on Mon 21 Oct, 2019 10:06, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Shmuel wrote: Mon 21 Oct, 2019 09:56 Это так, но это был недокументированный артефакт, поддерживать который только для свойства номер 8 (ибо для прочих свойств такой особенности нет) не имело смысла.
Т.е. это исправлять не планируется? (Например nil возвращать вместо false)
Shmuel wrote: Mon 21 Oct, 2019 09:56 Уже снова number
А что это за значение? Номер группы?
Shmuel wrote: Mon 21 Oct, 2019 09:56 Это на мантис. Сейчас нет времени разбираться.
https://bugs.farmanager.com/view.php?id=3746
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

mf.serialize wrote:

Code: Select all

	При сохранении таблиц будут сохраняться:
	- ключи типов: `number`, `string`, `boolean`, `table`
	- значения типов: `number`, `string`, `boolean`, `table`, `int64`
Неподдерживаемые ключи/значения игнорируются.
Имхо в большинстве случаев было бы правильнее падать с ошибкой.
И для тех гипотетических случаев, когда действительно допустимо молча игнорировать - можно добавить флажок к аргументам.

Edit:
msave - аналогично.

И мне кажется допустимо несколько упростить документацию, если в статьях msave/mload вместо подробного описания сослаться на serialize/deserialize

https://bugs.farmanager.com/view.php?id=3747
Last edited by John Doe on Mon 21 Oct, 2019 10:17, edited 2 times in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Mon 21 Oct, 2019 10:07 Т.е. это исправлять не планируется? (Например nil возвращать вместо false)
Невалидный Idx (и другие невалидные ситуации) могут быть для всех значений 3-го параметра. Какой смысл вводить эту фичу только для свойства 8 ?
И кроме того, "политика" такова, что развитием макро-API я не занимаюсь, а только исправлением багов. Хотя из этого правила могут быть исключения.
John Doe wrote: Mon 21 Oct, 2019 10:11 mf.serialize писал(а):
Мантис.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Mon 21 Oct, 2019 10:07 А что это за значение? Номер группы?
Это надо у Валентина спрашивать. Я поигрался, там могут быть значения 0,1...,10000,10001 - похоже, что выделено несколько диапазонов. Вы тоже можете поиграться.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

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

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: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 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: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Судя по стеку, да, падает LuaFAR, но он получает от NetBox'а указатель на строку, который указывает на память, не принадлежащую NetBox'у (то есть "мусорный" указатель). LuaFAR проверяет указатель на NULL, но у него нет средств отличить мусорный указатель от валидного.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 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)
Post Reply

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