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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 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.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Latest post of the previous page:

Redisko wrote: Есть ли какой-либо api, для того чтобы не вносить изменения в utils.lua, и не иметь проблем при обновлении пакета LuaMacro?
Такого API нет.
Можно определить свою функцию и поместить её в _macroinit.lua, например:

Code: Select all

local Macro = Macro
function _G.MyMacro(t)
  if t.keys then t.action=function() Keys(t.keys) end; end
  if t.out then t.action=function() print(t.out) end; end
  return Macro(t)
end

Redisko
Posts: 12
Joined: Tue 06 Jul, 2010 13:15
Has thanked: 1 time
Been thanked: 1 time

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

Post by Redisko »

Shmuel wrote:Можно определить свою функцию и поместить её в _macroinit.lua, ...
Спасибо, _macroinit.lua — то что надо :)
А вообще, было бы логично нативно поддержать свойство keys, потому как то, что сейчас создается рекордером макросов выглядит не очень:

Code: Select all

code = "Keys(\"p o i u q w e r\")";
Да и большая часть макросов стала бы лаконичнее и читабельнее.

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

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

Post by John Doe »

Redisko, вот связанное обсуждение http://forum.farmanager.com/viewtopic.php?f=15&t=8704
Redisko wrote: то, что сейчас создается рекордером макросов выглядит не очень:
Какая разница как это выглядит?

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Как насчёт того, чтобы сделать приоритет по умолчанию для общих (Common) макросов таким же, как у прочих (то-есть 50) ?
Моя практика показывает, что давать им по умолчанию приоритет==40 не имеет смысла, а только усложняет систему и документацию.

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

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

Post by John Doe »

При переходе 40 казалось хорошим решением.
Но всё конечно можно вручную отрегулировать при необходимости, для себя не вижу проблемы.

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Кто-нибудь проверяет величину, возвращаемую функцией Macro? Что-нибудь делает с ней?
(Хотелось бы вместо так называемого числа-идентификатора макроса возвращать просто булевое значение).

User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

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

Post by Aidar »

В моих макросах нет такой проверки.

gotar
Posts: 316
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 9 times

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

Post by gotar »

А чем плохо в озвращать Id? Какие пряники от возврата логического значения?

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

gotar wrote: А чем плохо в озвращать Id? Какие пряники от возврата логического значения?
Id - это деталь, особенность реализации (англ. термин - "implementation detail"). Id не должен являться частью интерфейса. Завтра внутренняя реализация плагина может измениться, и вообще не будет никакого Id (или же этот Id станет GUID'ом и т.п.).

Пряников для пользователя в этом изменении не предусмотрено. Это просто исправление ошибки, допущенной при разработке интерфейса.

tstr
Posts: 533
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 9 times
Been thanked: 8 times

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

Post by tstr »

пытаюсь реализовать сортировку элементов меню плагина DiskMenu по имени.

Code: Select all

local plugDiskMenuGUID = "9A12EB3A-6B5C-416A-B755-A21FDD73C7B2";
local F=far.Flags

Event {
  description = "Sort DiskMenu Menu";
  group="DialogEvent";
  action = function(Event, FarDialogEvent)
    if FarDialogEvent.Msg==F.DN_INITDIALOG and Event == F.DE_DLGPROCINIT then
      FarDialogEvent.hDlg:send(F.DM_LISTSORT,1,0)
    end
  end;
}
список сортируется, но выбирая элемент плагин срабатывает на положение элемента до сортировки.
сама идея принципиально неверна, или можно как-то оповестить плагин о изменении отображения?

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Я плагином этим никогда не пользовался, но рискну предположить:
- плагин не знает, что элементы перетасованы
- элементы перетасованы визуально, а внутренний массив плагина остался нетронутым
- плагин при закрытии меню получает только позицию выбранного элемента на момент закрытия
- по полученной позиции выбираются данные из внутреннего массива

Без модификации плагина ничего с этим сделать не получится.

tstr
Posts: 533
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 9 times
Been thanked: 8 times

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

Post by tstr »

так и предполагал, спасибо.

попробую сохранять элементы и при выборе элемента меню по "Return" транслировать на старое расплолжение...

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

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

Post by John Doe »

tstr wrote: попробую сохранять элементы и при выборе элемента меню по "Return" транслировать на старое расплолжение...
:-o

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

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

Post by John Doe »

Code: Select all

shmuel 14.06.2016 12:35:08 +0200 - build 574

1. LuaFAR: LF_ExitFAR(), после вызова export.ExitFAR(), удаляет все незакрытые таймеры (если таковые
   имеются), что предотвращает падения: (1) на выходе из Far и (2) при пересоздании lua_State
   с помощью _G.RecreateLuaState=true.
Хочу уточнить, в какой мере это относится к luamacro.
Ведь здесь событие ExitFAR вызывается также и при перезагрузке макросов.
Соответственно до сих пор для каждого таймера создавал соответствующий обработчик ExitFAR.
Вопрос: необходимо ли это делать сейчас?
Если да, то как вы относитесь к тому чтобы избавить пользователя от такой необходимости?

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

John Doe wrote: Вопрос: необходимо ли это делать сейчас?
Пока что да.
John Doe wrote: как вы относитесь к тому чтобы избавить пользователя от такой необходимости?
Вот это вопрос неоднозначный. Технически это сейчас реализовать легко, а вот нужно ли?

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

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

Post by John Doe »

Shmuel wrote: а вот нужно ли?
Кажется удобным.
И я затрудняются придумать, как применить обратное.

Post Reply

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