Здесь обсуждается всё, что касается макросов.
John Doe
Бюрократ
Posts: 12537 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 237 times
Post
by John Doe » Sun 20 Apr, 2014 23:49
Начиная с билда 3878 Far 3 поддерживает в макросах
MoonScript — язык программирования, транслируемый в Lua.
Это позволяет писать более компактный и хорошо читаемый код (то же самое для JavaScript делает CoffeeScript).
Документация по языку:
Плагин
LuaMacro автоматически загружает как *.lua, так и *.moon файлы.
Поддерживается также выполнение moon-скриптов из командной строки, см. документацию.
В
дистрибутиве на официальном сайте дополнительно присутствуют утилиты moon.exe и moonc.exe (пример использования см.
тут )
Онлайн-компилятор тут:
http://moonscript.org/compiler/
John Doe
zg
zero-gravity
Posts: 5661 Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 115 times
Contact:
Post
by zg » Sun 11 May, 2014 00:12
Latest post of the previous page:
вот такой макрос вызывает ошибку в фаре:
Code: Select all
C:\Program Files\far\Plugins\luamacro\moonscript.lua:677: too many pending calls/choices
официальный moon.exe выполняет без проблем.
update: lpeg.dll с luapower тоже не имеет вышеуказанной проблемы.
Attachments
test2.moon.7z
(184 Bytes) Downloaded 119 times
zg
zg
zero-gravity
Posts: 5661 Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 115 times
Contact:
Post
by zg » Sun 11 May, 2014 01:00
для истории: проявлялось на любой длл после macro:load.
zg
John Doe
Бюрократ
Posts: 12537 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 237 times
Post
by John Doe » Sun 11 May, 2014 20:05
Неудобно, что сообщение, выводимое при ошибке в moon файле, не содержит имени файла
Code: Select all
╔═══ MoonScript ═══╗
║ Failed to parse: ║
║ [84] >> ║
╟──────────────────╢
║ { OK } ║
╚══════════════════╝
John Doe
zg
zero-gravity
Posts: 5661 Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 115 times
Contact:
Post
by zg » Tue 13 May, 2014 02:41
package.moonpath пустой из-за вот этого:
do -- force MoonScript to load lpeg.dll residing in %farhome%
в принципе можно и самим заполнить, не?
zg
John Doe
Бюрократ
Posts: 12537 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 237 times
Post
by John Doe » Mon 26 May, 2014 09:45
В логах вижу:
.
Но
выше говорилось, что эти версии несовместимы.
Как это возможно?
John Doe
zg
zero-gravity
Posts: 5661 Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 115 times
Contact:
Post
by zg » Mon 26 May, 2014 09:50
John Doe wrote: Как это возможно?
там минорные несовместимости, monnscript с 0.12 работает.
zg
Shmuel
Posts: 5924 Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 233 times
Post
by Shmuel » Mon 26 May, 2014 09:56
John Doe wrote: Но
выше говорилось, что эти версии несовместимы.
Как это возможно?
MoonScript совместим как с LPeg 0.10, так и с 0.12. Это можно видеть
здесь (см. таблицу "dependencies").
zg wrote: там минорные несовместимости, monnscript с 0.12 работает.
Отнюдь не минорные. Полагаю, что половина программ, массивно использующих LPeg 0.10, поломаются с 0.12.
Shmuel
zg
zero-gravity
Posts: 5661 Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 115 times
Contact:
Post
by zg » Mon 26 May, 2014 21:15
Shmuel wrote: zg wrote: там минорные несовместимости, monnscript с 0.12 работает.
Отнюдь не минорные. Полагаю, что половина программ, массивно использующих LPeg 0.10, поломаются с 0.12.
под минорностью можно конечно понимать разное, но если судить по test.lua, все изменения косметические, кроме lpeg.B, а lpeg.B:
(This is an experimental feature. There is a good chance it will change in future versions.)
zg
Shmuel
Posts: 5924 Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 233 times
Post
by Shmuel » Tue 27 May, 2014 06:22
zg wrote: под минорностью можно конечно понимать разное
Вот именно. Одного изменения в lpeg.B хватает, чтобы поломать кучу программ.
Чинить, например, стороннюю библиотеку lxsh, используемую при компиляции мануалов, у меня нет времени - гораздо проще продолжать использовать для этого LPeg 0.10.
Shmuel
John Doe
Бюрократ
Posts: 12537 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 237 times
Post
by John Doe » Thu 05 Jun, 2014 15:00
Macro Browser при нажатии F4 на макросе из moon-файла неправильно позиционирует редактор.
И это понятно, ведь фактически исполняется не этот файл, а тот, что получается после трансляции в lua.
Вероятно следует в случае moon вообще не надо пытаться устанавливать позицию.
P.S.
Из этого также следует невозможность использования отладчиков в MoonScript...
John Doe
NightRoman
Posts: 5911 Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:
Post
by NightRoman » Thu 05 Jun, 2014 15:20
А нельзя в Lua макросах завести опциональные данные, описывающие реальный сорс? В нормальных макросах в этом нужды нет, где они заданы, там и есть их сорс. Но при трансляции из Moon эти данные заполнять реальным сорсом в Moon скрипте.
(офф) С чем-то похожим недавно столкнулся в своей утилите Invoke-Build. Ввел там возможность расширять некую стандартную сущность task с помощью оберток. Все хорошо, но поехали сообщения об ошибках (файл, строка не те). Решил именно так, как выше описано - в task добавил параметр Source, который никогда не используется в нормальной жизни явно. Но обертками используется всегда, они формируют там "логически" правильные данные с точки зрения пользователя.
NightRoman
zg
zero-gravity
Posts: 5661 Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 115 times
Contact:
Post
by zg » Thu 05 Jun, 2014 15:27
John Doe wrote: Вероятно следует в случае moon вообще не надо пытаться устанавливать позицию.
почему? оригинальную строку получить вообще элементарно:
local line_tables= require ( "moonscript.line_tables" )
local errors= require ( "moonscript.errors" )
local cache= { }
local fname= [[C:\Program Files\far\Profile\Macros\scripts\test.moon]]
local tbl= line_tables[ fname]
if tbl then
far. Show( errors. reverse_line_number( fname, tbl, 113 , cache) )
end
zg
John Doe
Бюрократ
Posts: 12537 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 237 times
Post
by John Doe » Thu 05 Jun, 2014 15:57
Спасибо. Значит несложно будет доработать и mbrowser.lua
P.S.
Попробовал переводить
local reverse_line_number do
local line_tables= require ( "moonscript.line_tables" )
local errors= require ( "moonscript.errors" )
local cache= { }
reverse_line_number= function ( fname, n)
local tbl= line_tables[ fname]
if tbl then return errors. reverse_line_number( fname, tbl, n, cache) end
end
end
, строка получается с точностью +/- 1
John Doe
zg
zero-gravity
Posts: 5661 Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 115 times
Contact:
Post
by zg » Thu 05 Jun, 2014 16:25
макробровсер — поправил.
John Doe wrote: Попробовал переводить, строка получается с точностью +/- 1
нормально, я думаю.
zg
John Doe
Бюрократ
Posts: 12537 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 237 times
Post
by John Doe » Thu 05 Jun, 2014 16:27
Функции LuaMacro служащие для вывода ошибок тоже бы доработать.
Например пытаюсь загрузить макрофайл с ошибкой, получаю сообщение:
Code: Select all
[string "C:\APPs\Far3\Profile\Macros\scripts\Macro\Mac..."]:13: attempt to call global 'as' (a nil value)
Во-первых имя файла не видно. Во-вторых строку надо скорректировать.
John Doe