Менеджер Lua-скриптов для Farа

Здесь выкладываются готовые к использованию макросы и скрипты.
Post Reply
IgorZ
Posts: 609
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 42 times

Менеджер Lua-скриптов для Farа

Post by IgorZ » Thu 25 Apr, 2013 04:00

Данный скрипт содержит следующие макросы:
  1. Выводит список всех Lua-скриптов Farа и позволяет манипулировать ими.

    Клавиша вызова по умолчанию: AltShiftF11.
  2. Вставка Lua/Moon скрипта (с выбором, какого типа) в редактируемый .lua/.moon файл.
    Клавиша вызова по умолчанию: LCtrlF11.
  3. Вставка Lua/Moon Macro в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  4. Вставка Lua/Moon Event в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  5. Вставка Lua/Moon MenuItem в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  6. Вставка Lua/Moon CommandLine в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  7. Вставка Lua/Moon PanelModule в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  8. Редактирование Lua/Moon скрипта из редактируемого файла.
    Клавиша вызова по умолчанию: CtrlF12.
  9. Вставка строки guid в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlU.
  10. Перезагрузка всех скриптов.
    Клавиша вызова по умолчанию: CtrlF9.
Требуемая версия Far 3.0.4000+.

Начиная с версии 4.0, скрипт выполнен в виде модуля и набора вызывающих макросов.

Attachments
LuaManager.5.0.5.7z
(59 KiB) Downloaded 29 times
LuaManager.3.1.11.7z
Последняя версия, выполненная не в виде модуля
(50.56 KiB) Downloaded 243 times
Last edited by IgorZ on Fri 08 Nov, 2019 06:49, edited 11 times in total.

tstr
Posts: 529
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 8 times
Been thanked: 7 times

Re: Менеджер Lua-скриптов для Fara

Post by tstr » Wed 01 May, 2013 16:05

Latest post of the previous page:

Shmuel wrote:Попробуйте два скрипта

Code: Select all

lm:post ("%999s"):format"a" msgbox"ok"

Code: Select all

lm:post ("%1000s"):format"a" msgbox"ok"
В первом случае должно быть ок, во втором - ошибка.
именно так.
Shmuel wrote:Если у вас не так, значит luafar3.dll - левая.
Если так - сабж виноват.
таки не сабж.
в моём случае заполняем формат значениями key_w =107, desc_w =99, ошибка возникает, при precision более двух чисел,
напр.

Code: Select all

lm:post ("%999.101s"):format"a" msgbox"ok"
- ошибка,

Code: Select all

lm:post ("%999.99s"):format"a" msgbox"ok"
- без ошибки.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: Менеджер Lua-скриптов для Fara

Post by Shmuel » Wed 01 May, 2013 16:22

tstr wrote: таки не сабж.
в моём случае заполняем формат значениями key_w =107, desc_w =99, ошибка возникает, при precision более двух чисел,
напр.

Code: Select all

lm:post ("%999.101s"):format"a" msgbox"ok"
- ошибка
Ну так объясните, зачем здесь precision 101.
Обработка precision в luafar3.dll не менялась (и не будет меняться, скорее всего).

tstr
Posts: 529
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 8 times
Been thanked: 7 times

Re: Менеджер Lua-скриптов для Fara

Post by tstr » Wed 01 May, 2013 16:47

Shmuel wrote:
tstr wrote: таки не сабж.
в моём случае заполняем формат значениями key_w =107, desc_w =99, ошибка возникает, при precision более двух чисел,
напр.

Code: Select all

lm:post ("%999.101s"):format"a" msgbox"ok"
- ошибка
Ну так объясните, зачем здесь precision 101.
теперь понятен источник ошибки, благодарю за помощь. а за реализацию - лучше у автора объяснений попросить.
(речь, уточню, идёт о

Code: Select all

items[#items].text = (" %s %s │ %-"..key_w.."."..key_w.."s%s│ %-"..desc_w.."."..desc_w.."s%s"):format(...
)
Обработка precision в luafar3.dll не менялась (и не будет меняться, скорее всего).
я уверен что вы или приняли, или примете взвешенное решение. ;)

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: Менеджер Lua-скриптов для Fara

Post by Shmuel » Thu 02 May, 2013 07:22

Если добавить макрос

Code: Select all

lm:post far.MacroAdd ("MACROAREA_SHELL", nil, "CtrlF3", "msgbox('added on the fly')")
запустить LuaManager1.0.3 и нажать F4 на данном макросе, получим ошибку:

Code: Select all

...LuaManager1.0.3.lua:477:attempt to index local 'hfile' (a nil value)

User avatar
DrKnS
Posts: 5397
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 227 times

Re: Менеджер Lua-скриптов для Fara

Post by DrKnS » Thu 02 May, 2013 09:41

А почему при отсутствии description не работают F3 и F4?

F3:
LuaManager1.0.3.lua:162: attempt to index a nil value
stack traceback:
LuaManager1.0.3.lua:162: in function 'ShowInfo'
LuaManager1.0.3.lua:967: in function <LuaManager1.0.3.lua:837>
F4:
Macro id=4 is not found. May be area or key is nonstandard set

xarx
Posts: 123
Joined: Tue 23 Nov, 2010 12:06

Re: Lua Менеджер ломает код

Post by xarx » Wed 29 May, 2013 17:21

Lua Manager 1.0.3 ломает строки (string) содержащие "--". Например такой код

Code: Select all

  action = function()
    msg = "\n----- abc -----\n"..
      "c--df\n"
  end;
}
изменяет на

Code: Select all

  action = function()
    msg = "\n
      "c
  end
После сохранения сломанный и файл.

IgorZ
Posts: 609
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 42 times

Re: Менеджер Lua-скриптов для Fara

Post by IgorZ » Fri 27 Sep, 2013 03:53

После долгой творческой комы, вызванной совокупностью объективных и субъективных факторов, возвращаюсь и выкладываю новую версию. Изменений накопилось много, так что прошу тестировать потщательнее. Подробности, как всегда, в заглавном посте темы.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: Менеджер Lua-скриптов для Fara

Post by Shmuel » Fri 27 Sep, 2013 10:31

IgorZ wrote:Изменений накопилось много, так что прошу тестировать потщательнее.
Ну, те проблемы, что я раньше рапортовал, так и не исправлены:
1. http://forum.farmanager.com/viewtopic.p ... 68#p109168
2. http://forum.farmanager.com/viewtopic.p ... 29#p109229

До кучи: нажатие F3 на макросе приводит к ошибке, если у макроса не определена функция condition:
...LuaManager.lua:238: bad argument #1 to 'getinfo' (function or level expected)

Игорь Юдинцев
Posts: 725
Joined: Sun 03 Apr, 2005 22:00
Location: Казань
Been thanked: 1 time

Re: Менеджер Lua-скриптов для Fara

Post by Игорь Юдинцев » Fri 27 Sep, 2013 11:44

invalid format по-прежнему на месте, build 3683, Lua Manager 1.2.1.

IgorZ
Posts: 609
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 42 times

Re: Менеджер Lua-скриптов для Fara

Post by IgorZ » Mon 30 Sep, 2013 10:56

Новая версия в первом посте.
Shmuel wrote:Области и группы в LuaMacro - регистроНЕзависимые.
Можно указать area="eDiTor" или group="eXitFaR", и будет нормально работать.
Теперь должно работать.
Shmuel wrote:Если добавить макрос

Code: Select all

lm:post far.MacroAdd ("MACROAREA_SHELL", nil, "CtrlF3", "msgbox('added on the fly')")
запустить LuaManager1.0.3 и нажать F4 на данном макросе, получим ошибку:

Code: Select all

...LuaManager1.0.3.lua:477:attempt to index local 'hfile' (a nil value)
Учёл ввариант с временными макросами. Кстати, вопрос: без файла может быть только клавиатурный макрос? А то я на всякий случай учинил глобальный контроль для всех видов макросов и событий, возможно, зря.
Shmuel wrote:До кучи: нажатие F3 на макросе приводит к ошибке, если у макроса не определена функция condition:
...LuaManager.lua:238: bad argument #1 to 'getinfo' (function or level expected)
Досадная опечатка. Вместо item.action было обращение к item.condition. Исправлено.
Игорь Юдинцев wrote:invalid format по-прежнему на месте, build 3683, Lua Manager 1.2.1.
Вроде, поправил. Проблема в том, что конструкция %N.Ns вызывает ошибку, если N>=100. То есть, %999.99s ещё работает, а %999.100s уже слетает.

Да и вообще, format ведёт себя странно. К примеру:
В первом варианте format всё делает правильно: обрезает выводимое значение до максимальной ширины, и дополняет до указанной ширины поля пробелами. В третьем тоже, как ему и сказали, просто обрезает до максимального ограничения. А вот во втором короткую строку дополняет пробелами, как ему и положено, а длинную - нет, хотя должен. Сижу вот, смотрю на это чудо и думаю: то ли я чего-то недопонял, то ли в консерватории непорядок. Не хотелось бы переписывать этот код без format-а, но, возможно, придётся.

IgorZ
Posts: 609
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 42 times

Re: Менеджер Lua-скриптов для Fara

Post by IgorZ » Mon 30 Sep, 2013 11:15

Сейчас проверил одно подозрение. И точно:
С 99 символами ещё работает нормально, а со 100 уже глючит.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: Менеджер Lua-скриптов для Fara

Post by Shmuel » Mon 30 Sep, 2013 12:28

IgorZ wrote:Кстати, вопрос: без файла может быть только клавиатурный макрос?
1. клавиатурный (созданный, но ещё не сохранённый)
2. добавленный с помощью far.MacroAdd (и вообще MCTL_ADDMACRO)
3. загруженный из файла, но файл был переименован или удалён после загрузки
IgorZ wrote:Сейчас проверил одно подозрение.
[......]
С 99 символами ещё работает нормально, а со 100 уже глючит.
Спасибо за репорт, исправлено.

IgorZ
Posts: 609
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 42 times

Re: Менеджер Lua-скриптов для Fara

Post by IgorZ » Mon 07 Oct, 2013 11:16

Версия 1.2.3 - Исправлена ошибка в преобразовании списка областей в короткий вид, сделан фильтр по нажатию клавиши, в просмотре окружения для condition и action разделены, т. к. теоретически могут быть разные.

Насчёт фильтра по клавишам. Такой вариант оптимален, или нужен строгий именно по нажатой клавише?

Замечено несоответствие. В luafar_manual для far.Menu написано:
Item, Position = far.Menu (Properties, Items [, BreakKeys])

Properties: table
fields of Properties (every field is optional):
...
Id: string (GUID)
На самом деле, Id = win.UUid(string_guid).

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: Менеджер Lua-скриптов для Fara

Post by Shmuel » Mon 07 Oct, 2013 17:27

IgorZ wrote:Замечено несоответствие. В luafar_manual для far.Menu написано:
Id: string (GUID)
На самом деле, Id = win.UUid(string_guid).
Поле Id - на самом деле string и на самом деле GUID. Всё соответствует.

IgorZ
Posts: 609
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 42 times

Re: Менеджер Lua-скриптов для Fara

Post by IgorZ » Tue 08 Oct, 2013 03:59

Вот простой макрос для проверки.
  1. local Guid = "CED3FF32-DCD6-43AD-87B1-E2F8117F440D"
  2. local items = {{text="111"},{text="222"}}
  3.  
  4. Macro{
  5.   area="Menu"; key="Alt3";
  6.   description="Просмотр GUID меню";
  7.   action=function() far.Show(Menu.Id) end;
  8. }
  9.  
  10. Macro{
  11.   area="Common"; key="Alt1";
  12.   description="Меню со строчным GIUD";
  13.   action=function() far.Menu({Title="Строка",Id=Guid},items) end;
  14. }
  15.  
  16. Macro{
  17.   area="Common"; key="Alt2";
  18.   description="Меню с GIUD";
  19.   action=function() far.Menu({Title="GUID",Id=win.Uuid(Guid)},items) end;
  20. }
Alt1, Alt3 - Menu.Id выдаёт строку нулей. Alt2, Alt3 - Menu.Id выдаёт заданный GUID. Хотя, согласно документации, должен работать именно первый вариант.

2useven10
Posts: 3965
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 168 times

Re: Менеджер Lua-скриптов для Fara

Post by 2useven10 » Tue 08 Oct, 2013 06:16

win.Uuid(Guid) делает из одной строки другую (шестнадцатибайтовую).
так что формально в документации всё корректно.

IgorZ
Posts: 609
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 42 times

Re: Менеджер Lua-скриптов для Fara

Post by IgorZ » Tue 08 Oct, 2013 06:31

2useven10 wrote:win.Uuid(Guid) делает из одной строки другую (шестнадцатибайтовую).
так что формально в документации всё корректно.
Но на практике я долго пытался понять, почему GUID не берётся, пока не решил попробовать преобразовать. Всё же это 2 разных формата, а под строкой обычно понимается последовательность символов в кавычках. Как мне кажется, небольшое уточнение в документации было бы очень полезно. Скажем, вместо
Id: string (GUID)
написать
Id: GUID

Post Reply

Return to “Полезные макросы и скрипты”