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

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

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

Post by John Doe » Mon 16 Jul, 2012 13:44

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

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

User avatar
HaRT
Moderator
Posts: 8118
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 68 times
Been thanked: 107 times

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

Post by HaRT » Wed 09 Aug, 2017 21:39

Latest post of the previous page:

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

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Wed 09 Aug, 2017 22:24

HaRT, я не уверен, что ваша формулировка лучше (это субъективно, да). Так что пока остаётся как есть.

User avatar
HaRT
Moderator
Posts: 8118
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 68 times
Been thanked: 107 times

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

Post by HaRT » Wed 09 Aug, 2017 22:31

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

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Wed 09 Aug, 2017 22:37

Ну что ж, мысли здравые высказываете.
Если вам это не безразлично, заведите тикет на мантисе (я серьёзно).

User avatar
HaRT
Moderator
Posts: 8118
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 68 times
Been thanked: 107 times

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

Post by HaRT » Wed 09 Aug, 2017 22:54

Shmuel wrote:
Wed 09 Aug, 2017 22:37
заведите тикет
#3467
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sun 27 Aug, 2017 09:18

Code: Select all

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

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sun 27 Aug, 2017 10:01

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: 1479
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 4 times

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

Post by SUSim » Wed 06 Sep, 2017 21:22

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

Запятой на планшете нет или я ее не нашел!
Last edited by SUSim on Wed 06 Sep, 2017 21:23, edited 1 time in total.
SimSU ··· ·· -- ··· ··-

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Wed 06 Sep, 2017 21:28

uid использовал John Doe, когда "официального" id ещё не было.
Не критично, но некоторые утилиты вышеупомянутого автора лучше работают, если есть.
В штатный браузер добавить можно, но не уверен, что нужно.

User avatar
John Doe
Бюрократ
Posts: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sat 21 Oct, 2017 11:45

Загадочная ошибка
Есть файл "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: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sat 21 Oct, 2017 12:05

Моя интерпретация: путь в сообщении обрезается 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: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sat 21 Oct, 2017 12:20

Можно добавить сюда, можно и отдельно.

User avatar
John Doe
Бюрократ
Posts: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sat 21 Oct, 2017 12:22

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

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

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

User avatar
John Doe
Бюрократ
Posts: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sat 21 Oct, 2017 12:54

А также заметка к 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(CustomErrHandler,handle.coro,...)
      if success then return F.MPRT_ERRORFINISH end
      ret1 = "Error in CustomErrHandler:\n"..errmsg..ret1
    end
    ret1 = debug.traceback(handle.coro, ret1):gsub("\n\t","\n   ")
    ErrMsg(ret1)
    return F.MPRT_ERRORFINISH
Это не затрагивает ошибки при загрузке макросов, и ошибки в параметрах (которые вычисляются как lua-выражения).
Но наверно и к лучшему.
Попробую погонять.

Post Reply

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