Page 32 of 35

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

Posted: Mon 16 Jul, 2012 13:44
by John Doe
Проект Spring (обсуждение) влился в стабильную версию Far Manager 3.0.

Таким образом, в макросах сейчас доступны:
  • Стандартные функции и библиотеки Lua.
  • В фаре используется LuaJIT (обсуждение), что (в частности) даёт доступ к библиотеке FFI (обсуждение).
  • "Надстройка" над Lua: MoonScript (Подробности и обсуждение)
  • Функции API плагинов, посредством библиотеки LuaFAR (см. luafar_manual.chm)
  • Функции старого макроязыка (API макросов) (Обновление)
    Актуальный мануал, отражающий после перехода на Lua: macroapi_manual.ru.chm.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:

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

Posted: Wed 09 Aug, 2017 21:39
by HaRT

Latest post of the previous page:

Shmuel wrote:
Wed 09 Aug, 2017 21:29
Предложите лучшую формулировку
Например, KeyName does not match 'ConfigArea.SettingName'. Лично меня вообще сбило с толку то, что ошибка как бы происходит внутри ф-ии error(), но это, как я понимаю, мы вряд ли исправим.

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

Posted: Wed 09 Aug, 2017 22:24
by Shmuel
HaRT, я не уверен, что ваша формулировка лучше (это субъективно, да). Так что пока остаётся как есть.

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

Posted: Wed 09 Aug, 2017 22:31
by HaRT
Shmuel wrote:
Wed 09 Aug, 2017 22:24
я не уверен, что ваша формулировка лучше (это субъективно, да)
Согласны ли Вы с тем, что формулировка, которая явно указывает ожидаемый формат, полезнее, чем та, которая только заявляет несоответствие (но не говорит, что нарушено)? Это как „Вы нарушили Правила Дорожного Движения!“ и „Вы нарушили пункт такой-то статьи такой-то ПДД.“
А ещё на самом деле неплохо бы указать, какая именно строка не соответствует ожидаемому формату, — чтобы читатель сразу понял, что эта ошибка имеет прямое отношение к написанному им коду.

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

Posted: Wed 09 Aug, 2017 22:37
by Shmuel
Ну что ж, мысли здравые высказываете.
Если вам это не безразлично, заведите тикет на мантисе (я серьёзно).

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

Posted: Wed 09 Aug, 2017 22:54
by HaRT
Shmuel wrote:
Wed 09 Aug, 2017 22:37
заведите тикет
#3467

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

Posted: Sun 27 Aug, 2017 09:18
by John Doe

Code: Select all

lua:@empty.lua qwerty.asdf
После этого не гаснет индикатор работы макроса в левом верхнем углу.

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

Posted: Sun 27 Aug, 2017 10:01
by Shmuel
John Doe wrote:
Sun 27 Aug, 2017 09:18
После этого не гаснет индикатор работы макроса в левом верхнем углу.
Эта неисправность более серьёзна, чем просто индикатор. Надо разбираться.

Update: исправлено в LuaMacro, build 616.

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

Posted: Wed 06 Sep, 2017 21:22
by SUSim
А зачем в макросах кроме поля ib народ добавляет/использует uid или это разные вещи?
Насколько критично вообще присутствие такого поля в макросе? Я конечно добавил вас свои макросы id...
Кстати макро броузер ид не показывает! Сам добил пару строк а нужно ли это?

Запятой на планшете нет или я ее не нашел!

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

Posted: Wed 06 Sep, 2017 21:28
by Shmuel
uid использовал John Doe, когда "официального" id ещё не было.
Не критично, но некоторые утилиты вышеупомянутого автора лучше работают, если есть.
В штатный браузер добавить можно, но не уверен, что нужно.

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

Posted: Sat 21 Oct, 2017 11:45
by John Doe
Загадочная ошибка
Есть файл "D:\Мои документы\zxcvbnmas\qwrty_io\poiua\2015\1.lua", содержимое которого с любой ошибкой, например единственный символ -.
Запускаю lua:@1.lua, вижу это:

Code: Select all

╔════════════════════════════════════════ LuaMacro ═════════════════════════════════════════╗
║ ...ё документы\zxcvbnmas\qwrty_io\poiua\2015\1.lua:1: unexpected symbol near '-' ║
╟───────────────────────────────────────────────────────────────────────────────────────────╢
║                                          { OK }                                           ║
╚═══════════════════════════════════════════════════════════════════════════════════════════╝
Тот же файл, находящийся папкой выше, таких проблем не вызывает:

Code: Select all

╔══════════════════════════════════ LuaMacro ═══════════════════════════════════╗
║ ...Мои документы\zxcvbnmas\qwrty_io\poiua\1.lua:1: unexpected symbol near '-' ║
╟───────────────────────────────────────────────────────────────────────────────╢
║                                    { OK }                                     ║
╚═══════════════════════════════════════════════════════════════════════════════╝

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

Posted: Sat 21 Oct, 2017 12:05
by John Doe
Моя интерпретация: путь в сообщении обрезается luajit побайтно, не учитывая того, что в результате получается некорректная utf8- последовательность.

А в utils.lua вот такой код:

Code: Select all

local ErrMsg = function(msg, title, buttons, flags)
  if type(msg)=="string" and not msg:utf8valid() then
    local wstr = win.MultiByteToWideChar(msg, win.GetACP(), "e")
    msg = wstr and win.Utf16ToUtf8(wstr) or msg
  end
  return far.Message(msg, title or "LuaMacro", buttons, flags or "wl")
end
Помещу на мантис.

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

Posted: Sat 21 Oct, 2017 12:20
by Shmuel
Можно добавить сюда, можно и отдельно.

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

Posted: Sat 21 Oct, 2017 12:22
by John Doe
Добавлю позже, уж очень тормозит сайт..

P.S.
А пока тут оставлю заметку.
Смысл этой эвристики в utils.lua состоит в том, чтобы корректно отображать ошибки, полученные из разнообразных источников (2817, 2388).
Ведь юникодными являются только функции luafar, а сторонние функции с большой долей вероятности возвращают ошибки в ansi.

Не знаю возможно ли идеальное решение, но улучшить наверняка можно.
1. Различать синтаксические ошибки при загрузке, и ошибки времени исполнения. Для первых эвристика не нужна.
2. Независимо от строки сообщения, traceback всегда в utf8, значит надо их обрабатывать отдельно.

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

Posted: Sat 21 Oct, 2017 12:54
by John Doe
А также заметка к 0002416: Возможность вместо сообщений об ошибках вызывать "пользовательскую" lua-функцию.

На первый взгляд для реализации этого пожелания достаточно внести изменения в функцию FixReturn (luamacro.lua).

Code: Select all

    ret1 = type(ret1)=="string" and ret1 or "(error object is not a string)"
    ret1 = debug.traceback(handle.coro, ret1):gsub("\n\t","\n   ")
    ErrMsg(ret1)
    return F.MPRT_ERRORFINISH
Тут может быть что-то вроде этого:

Code: Select all

    ret1 = type(ret1)=="string" and ret1 or "(error object is not a string)"
    if export.CustomErrHandler and type(export.CustomErrHandler)=="function" then
      local success, errmsg = pcall(export.CustomErrHandler,handle.coro,...)
      if success then return F.MPRT_ERRORFINISH end
      ret1 = "Error in CustomErrHandler: "..errmsg.."\n"..ret1
    end
    ret1 = debug.traceback(handle.coro, ret1):gsub("\n\t","\n   ")
    ErrMsg(ret1)
    return F.MPRT_ERRORFINISH
Это не затрагивает ошибки при загрузке макросов, и ошибки в параметрах (которые вычисляются как lua-выражения).
Но наверно и к лучшему.
Попробую погонять.

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

Posted: Sun 29 Oct, 2017 18:58
by John Doe
Заметил неприятную особенность: меню при закрытии может оставаться на экране, если макрос ещё не закончен.
Увидеть можно например так:

Code: Select all

lua:far.Show();win.Sleep(1000)
mmode не влияет.
Специфично именно для меню, с Message такой проблемы нет:

Code: Select all

lua:far.Message("");win.Sleep(1000)
Обойти можно добавив принудительную перерисовку:

Code: Select all

lua:far.Show();far.Text();win.Sleep(1000)
https://bugs.farmanager.com/view.php?id=3541

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

Posted: Sun 29 Oct, 2017 20:05
by Shmuel
John Doe wrote:
Sun 29 Oct, 2017 18:58
Заметил неприятную особенность: меню при закрытии может оставаться на экране, если макрос ещё не закончен.
Макросы тут ни при чём. Запустите через luas: - будет то же самое. И "LuaMacro — Lua как язык макросов" здесь ни при чём.

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

Posted: Mon 20 Nov, 2017 16:25
by John Doe
Изменения API в сравнении с макроязыком

Не упомянуто, что Plugin.Exist возвращает true/false.

Насчёт Plugin.Load/Plugin.Unload вопрос: им бы тоже логично было возвращать логическое значение.

Кстати, в настоящий момент в случае успеха Plugin.Load возвращает не 1, а 25953664