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

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

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

Post by Shmuel »

Latest post of the previous page:

Предложите лучшую формулировку, я исправлю.
Аргумент Far.Config должен иметь вид типа xxxx.yyyy (например, Viewer.ShowKeyBar), в данном случае он не соответствует требуемому шаблону (формату).
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Shmuel wrote: Wed 09 Aug, 2017 21:29Предложите лучшую формулировку
Например, KeyName does not match 'ConfigArea.SettingName'. Лично меня вообще сбило с толку то, что ошибка как бы происходит внутри ф-ии error(), но это, как я понимаю, мы вряд ли исправим.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

HaRT, я не уверен, что ваша формулировка лучше (это субъективно, да). Так что пока остаётся как есть.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Shmuel wrote: Wed 09 Aug, 2017 22:24я не уверен, что ваша формулировка лучше (это субъективно, да)
Согласны ли Вы с тем, что формулировка, которая явно указывает ожидаемый формат, полезнее, чем та, которая только заявляет несоответствие (но не говорит, что нарушено)? Это как „Вы нарушили Правила Дорожного Движения!“ и „Вы нарушили пункт такой-то статьи такой-то ПДД.“
А ещё на самом деле неплохо бы указать, какая именно строка не соответствует ожидаемому формату, — чтобы читатель сразу понял, что эта ошибка имеет прямое отношение к написанному им коду.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Ну что ж, мысли здравые высказываете.
Если вам это не безразлично, заведите тикет на мантисе (я серьёзно).
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Shmuel wrote: Wed 09 Aug, 2017 22:37заведите тикет
#3467
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Code: Select all

lua:@empty.lua qwerty.asdf
После этого не гаснет индикатор работы макроса в левом верхнем углу.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

Update: исправлено в LuaMacro, build 616.
Last edited by Shmuel on Sun 27 Aug, 2017 13:12, edited 1 time in total.
User avatar
SUSim
Posts: 1633
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 25 times

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

Post by SUSim »

А зачем в макросах кроме поля ib народ добавляет/использует uid или это разные вещи?
Насколько критично вообще присутствие такого поля в макросе? Я конечно добавил вас свои макросы id...
Кстати макро броузер ид не показывает! Сам добил пару строк а нужно ли это?

Запятой на планшете нет или я ее не нашел!
Last edited by SUSim on Wed 06 Sep, 2017 21:23, edited 1 time in total.
SimSU ··· ·· -- ··· ··-
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

uid использовал John Doe, когда "официального" id ещё не было.
Не критично, но некоторые утилиты вышеупомянутого автора лучше работают, если есть.
В штатный браузер добавить можно, но не уверен, что нужно.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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 }                                     ║
╚═══════════════════════════════════════════════════════════════════════════════╝
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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
Помещу на мантис.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Можно добавить сюда, можно и отдельно.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Добавлю позже, уж очень тормозит сайт..

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

Не знаю возможно ли идеальное решение, но улучшить наверняка можно.
1. Различать синтаксические ошибки при загрузке, и ошибки времени исполнения. Для первых эвристика не нужна.
2. Независимо от строки сообщения, traceback всегда в utf8, значит надо их обрабатывать отдельно.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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-выражения).
Но наверно и к лучшему.
Попробую погонять.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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
Last edited by John Doe on Mon 30 Oct, 2017 10:11, edited 1 time in total.
Post Reply

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