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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11144
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 73 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: 8049
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

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

Post by HaRT » Wed 10 May, 2017 16:19

Latest post of the previous page:

Shmuel wrote: Для запуска файла-скрипта есть синтаксис lua:@filename, описанный в мануале.
Хотелось бы, чтобы при вызове lua: (без параметров) в том или ином виде (например, в виде окошка с сообщением прямо в Фаре) выводилась краткая справка по синтаксису — подобно тому, как это сделано для view:/edit:.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Wed 10 May, 2017 16:53

HaRT wrote: Хотелось бы, чтобы при вызове lua: (без параметров) в том или ином виде (например, в виде окошка с сообщением прямо в Фаре) выводилась краткая справка по синтаксису — подобно тому, как это сделано для view:/edit:.
Нормальный виш для мантиса.

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

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

Post by HaRT » Wed 10 May, 2017 17:02

Shmuel wrote: виш для мантиса
#3432
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by John Doe » Thu 03 Aug, 2017 13:43

utils.lua:759

Code: Select all

      paths = DirMacros.."\\scripts"
utils:lua:783

Code: Select all

    far.RecursiveSearch (DirMacros.."\\internal", "*.lua", LoadRecordedFile, 0)
DirMacros уже содержит завершающий бэкслэш, поэтому в результате конкатенации получаем его удвоение.

Следствие: загружаемые скрипты получают первым параметром путь с удвоенным слэшем, например:
C:\APPs\Far3\Profile\Macros\\scripts\_macroinit.lua

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Thu 03 Aug, 2017 14:20

John Doe, спасибо. Исправлено.

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

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

Post by John Doe » Sat 05 Aug, 2017 12:37

И ещё один вопрос касающийся нормализации передаваемых путей с помощью far.ConvertPath.
При загрузке макрофайлов используется CPM_FULL (utils.lua:772), а при исполнении файлов (через lua:@) используется CPM_NATIVE (luamacro.lua:180).

Было бы удобнее в обоих случаях CPM_FULL (если конечно это различие существует не преднамерено).

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sat 05 Aug, 2017 13:33

CPM_FULL не работает с очень длинными путями.
CPM_NATIVE даёт не очень дружественное имя файла.
То есть сделано это преднамеренно. Но это не значит, что нельзя обсуждать и трогать.

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

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

Post by John Doe » Sat 05 Aug, 2017 13:52

Shmuel wrote:
Sat 05 Aug, 2017 13:33
CPM_FULL не работает с очень длинными путями.
Как это увидеть?

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sat 05 Aug, 2017 14:00

John Doe wrote:
Sat 05 Aug, 2017 13:52
Как это увидеть?
Замените в luamacro.lua CPM_NATIVE на CPM_FULL. Перезагрузите Фар. Скопируйте в буфер обмена строку из 100 единиц. 10 раз создавайте по F7 вложенные папки, копируя из буфера. Положите любой Lua-файл в самую вложенную папку и попробуйте запустить его через lua:@<filename>.

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

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

Post by John Doe » Sat 05 Aug, 2017 14:09

А если профиль фара расположен в такой вот папке, то при загрузке макросов проблем нет?

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Sat 05 Aug, 2017 14:11

John Doe wrote:
Sat 05 Aug, 2017 14:09
А если профиль фара расположен в такой вот папке, то при загрузке макросов проблем нет?
Думаю, что есть, но до сих пор никто не жаловался.

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

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

Post by John Doe » Sat 05 Aug, 2017 14:52

Проверил, lm:load . в такой папке действительно приводит к ошибке.
Впрочем, я не утверждаю, что надо исправлять, просто хотелось разобраться.

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

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

Post by John Doe » Mon 07 Aug, 2017 11:55

Полагаю, что всё-таки правильнее ориентироваться на то, как поступает с путями сам фар, то есть:
— обращается к системным функциям всегда используя префиксы
— в собственное апи префиксы не передаёт

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Mon 07 Aug, 2017 14:41

John Doe wrote:
Mon 07 Aug, 2017 11:55
Полагаю, что всё-таки правильнее ориентироваться на то, как поступает с путями сам фар
Если есть конкретные предложения, можно поместить на мантис.

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

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

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

Вызываю lua: = Far.GetConfig('ShowKeyBar') (ключ ошибочный) — получаю .
Наверно, это не то, что было задумано в такой ситуации?

P.S.
читал.
Last edited by HaRT on Wed 09 Aug, 2017 21:22, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Wed 09 Aug, 2017 21:29

Предложите лучшую формулировку, я исправлю.
Аргумент Far.Config должен иметь вид типа xxxx.yyyy (например, Viewer.ShowKeyBar), в данном случае он не соответствует требуемому шаблону (формату).

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

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

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

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

Post Reply

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