Page 1 of 40

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.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:

Re: Spring — внедрение Lua в качестве макроязыка

Posted: Mon 01 Oct, 2012 20:19
by SUSim
Ребят! так нельзя принимать решения!
Я даже, не успел спросить зачем mf, и почему именно "mf"


Re: Spring — внедрение Lua в качестве макроязыка

Posted: Mon 01 Oct, 2012 20:55
by Shmuel
SUSim wrote:Ребят! так нельзя принимать решения!
Я даже, не успел спросить зачем mf, и почему именно "mf"

mf = "macrofunctions"
Вариантов сделать этот API есть бесчисленное множество, и тот, что выбран - не самый худший. А если устроить публичное обсуждение, навряд ли придём к консенсусу. Тем не менее, покуда ещё слом всего не закончен (до конца месяца?), можно и это ломать, наверное. Открывайте отдельную тему, и пусть все желающие высказываются.

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 19:25
by SUSim
Насчет Keys:
как-то нелогично,на мой взгляд, то нужен eval, то Keys - объединить бы их...

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 19:36
by Shmuel
SUSim wrote:Насчет Keys:
как-то нелогично,на мой взгляд, то нужен eval, то Keys - объединить бы их...
Это совершенно разные вещи, зачем их объединять?

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 20:04
by SUSim
Почему совершенно разные?
Раньше eval("F1") вызывал помощь, а теперь Keys("F1") делает тоже самое!
eval как-то привычнее, может его разломать=апгрейдить?... пока всё и так ломается...
и всё таки почему некоторы функции в mf., а некоторые напрямую? (тот же print а не mf.print) в чём логика?

кажется не в той теме обсуждение я завёл...

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 20:16
by Shmuel
SUSim wrote:Почему совершенно разные?
Раньше eval("F1") вызывал помощь, а теперь Keys("F1") делает тоже самое!
eval как-то привычнее, может его разломать=апгрейдить?... пока всё и так ломается...
То, что было раньше, теперь неважно. eval и Keys не имеют ничего общего. Ломать eval потому, что когда-то раньше он был единственным способом послать клавишу из переменной, а теперь этого уже не надо, поскольку есть специальная ф-ция Keys, было бы весьма странно.
SUSim wrote:и всё таки почему некоторы функции в mf., а некоторые напрямую? (тот же print а не mf.print) в чём логика?
Глобальными ф-циями сделаны наиболее часто употребительные (на мой субъективный взгляд). Делать все функции глобальными = засорять глобальное пространство.

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 20:46
by SUSim
по п.1
eval("Keys(\"F1\")") криво не находите? - подумаю ещё как логичнее (в принципе, меня и так как есть устраивает, я почти все свои макросы перепилил под lua, вот только куда их выкладывать? сюда или в тему макросы???)

по п.2
очень субъективно получилось, приходится задумываться писать, например, msgbox() или mf.msgbox()
может всё сделать, или mf.zzz, или просто zzz (глобальных функций не так уж и много), а еще можно и глобальные функции разделить:
типа user.msgbox, user.prompt, string.len и т.п.

Ламерский вопрос: а можно ли както предобявить библиотеку - чтобы не писать каждый раз имя таблицы,
чтобы math.sin(math.pi) выглядело как sin(Pi) и т.п.

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 20:56
by Shmuel
SUSim wrote:по п.1
eval("Keys(\"F1\")") криво не находите? - подумаю ещё как логичнее (в принципе, меня и так как есть устраивает, я почти все свои макросы перепилил под lua, вот только куда их выкладывать? сюда или в тему макросы???)
Зачем eval("Keys(\"F1\")"), почему не просто Keys("F1") ? Может я чего-то не понимаю?
SUSim wrote:по п.2
очень субъективно получилось, приходится задумываться написать, например, msgbox() или mf.msgbox()
может всё сделать, или mf.zzz, или просто zzz (глобальных функций не так уж и много), а еще можно и глобальные функции разделить:
типа user.msgbox, user prompt, string.len и т.п.
Глобальных величин уже полным-полно:
1. Lua API
2. LuaFAR API
3. Macro API

А задумываться - да, придётся, нынешняя система куда шире предыдущей. Можно и в справку поглядывать.

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 21:42
by DrKnS
Shmuel wrote:
SUSim wrote:и всё таки почему некоторы функции в mf., а некоторые напрямую? (тот же print а не mf.print) в чём логика?
Глобальными ф-циями сделаны наиболее часто употребительные (на мой субъективный взгляд). Делать все функции глобальными = засорять глобальное пространство.
Для единообразия лучше все функции сделать доступными через mf., а для наиболее часто встречающихся завести алиасы в глобальном пространстве.

Манипуляции пространствами в стиле "using namespace mf;" или "using mf::print;" в lua есть?

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Thu 04 Oct, 2012 21:55
by Shmuel
DrKnS wrote:Для единообразия лучше все функции сделать доступными через mf., а для наиболее часто встречающихся завести алиасы в глобальном пространстве.
Это хорошая идея.
DrKnS wrote:Манипуляции пространствами в стиле "using namespace mf;" или "using mf::print;" в lua есть?
Есть, но делается через метатаблицы - не стоит на данном этапе, это не для начинающих, сначала пусть люди освоят более простые вещи.

P.S.
"using mf::print;" делается так (в верхней части скрипта, т.е. до первого использования):

Code: Select all

local print=mf.print

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Fri 05 Oct, 2012 00:38
by zg
Shmuel wrote:Зачем eval("Keys(\"F1\")")
eval("Keys('F1')")

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Fri 05 Oct, 2012 01:05
by Shmuel
zg wrote:eval("Keys('F1')")
Дело не в кавычках, мне непонятно, зачем использовать eval, а не просто Keys("F1").

Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Posted: Fri 05 Oct, 2012 01:47
by zg
Shmuel wrote:Дело не в кавычках, мне непонятно, зачем использовать eval, а не просто Keys("F1").

Code: Select all

local a="Keys('"..(cond and "F1" or "F2").."')"
eval(a)
пример синтетический и вполне вероятно, что на луа любой реальный пример с eval можно переписать без eval.

Примечание модератора: продолжение

Re: Spring — внедрение Lua в качестве макроязыка

Posted: Mon 08 Oct, 2012 16:25
by SUSim
У вас тут конечно высокие материи :), но у меня вопрос по текущему состоянию.
в хелпе сказано:

Code: Select all

Editor - таблица со следующими полями:
Свойства:
  CurLine:   number
  ...
Функции:
  DelLine
  ...
так вот при

Code: Select all

s=""; 
for k,v in pairs(Editor) do 
  s=s..k.."\n"; 
end;
в s у меня попадают только фунуции, а что Свойства полями не являются? или я что-то не так делаю? (pairs(_G) есть и свойства и функции и библиотеки-таблицы)