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

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

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

Post by IgorZ »

Выводит список всех Lua-скриптов Farа и позволяет манипулировать ими.









Требуемая версия Far 3.0.5210+.

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

Attachments
LuaManager.6.0.2.7z
Версия для Far 3.0.0.5934+
(65.47 KiB) Downloaded 88 times
LuaManager.5.2.0.7z
Версия для Far 3.0.0.5210+
(58.78 KiB) Downloaded 219 times
LuaManager.5.0.6.7z
Последняя опубликованная версия, поддерживающая Far 3.0.0.4000 и выше
(59.02 KiB) Downloaded 350 times
LuaManager.3.1.11.7z
Последняя версия, выполненная не в виде модуля
(50.56 KiB) Downloaded 515 times
Last edited by IgorZ on Wed 25 Oct, 2023 10:02, edited 24 times in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

IgorZ wrote: Изменён способ регистрации модуля.
Для данного случая более корректным будет такой модуль:

Code: Select all

--nfo skipped
--...
return setmetatable({},{
  __call = function(self,...) return self.Main(...) end;
  __index = function() far.Message("LuaManager not loaded yet") end;
})
Смысл: индексировать таблицу до фактической загрузки LuaManager нельзя, поэтому правильнее выводить сообщение об ошибке сразу, а не при попытке использования dummy-функции.

P.S.
Код иллюстрирует идею, и не тестировался, вероятно лучше что-то типа:

Code: Select all

  __index = function() return function() far.Message("LuaManager not loaded yet") end end;
[/s]
Хотя нет, скорее так

Code: Select all

  __index = function() error("LuaManager not loaded yet") end;
или так

Code: Select all

  __index = function() far.Message("LuaManager not loaded yet"); return function() end end;
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

John Doe wrote:
IgorZ wrote: Изменён способ регистрации модуля.
Для данного случая более корректным будет такой модуль:
В черновом варианте так и было. Но потом я счёл идейно неверным, если на, скажем, LM.Confif() выдастся "LuaManager not loaded yet". Или того чище: наберёт кто-то LM.KillAllGays(), получит в ответ "LuaManager not loaded yet" и будет уверен, что LuaManager запросто убил бы всех геев, но просто не успел загрузиться. :evil:
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

IgorZ wrote: Но потом я счёл идейно неверным, если на, скажем, LM.Confif() выдастся "LuaManager not loaded yet".
Так в вашем варианте как раз это и будет! Именно от этого я и предлагаю уйти.

Возьмём для примера такой код.

Code: Select all

local LMConfig = require"LuaManager".Config
Это не будет работать, ни у вас, ни у меня. Но есть разница.

Ваш код приведёт к тому, что когда скрипт вызовет LMConfig(), то вместо конфига мы получим (не очень корректное) сообщение, скрипт же будет уверен что всё в порядке.
А предложенный мной код приведёт к тому, что ошибка (а именно некорректное использование модуля) вылезет сразу, при попытке индексации, ещё в момент загрузки скрипта.
User avatar
Dennis_Moore
Posts: 295
Joined: Tue 03 Mar, 2015 19:54
Location: Kiev
Has thanked: 6 times
Been thanked: 17 times

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

Post by Dennis_Moore »

Похоже что скрипт не работает. При вызове получаю следующее (FAR3 b4927):

Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Dennis_Moore, это что-то у вас не так. Сейчас специально установил, и оно работает (пробовал из панелей).
Правда картинка странная, с усечёнными текстами.
User avatar
Dennis_Moore
Posts: 295
Joined: Tue 03 Mar, 2015 19:54
Location: Kiev
Has thanked: 6 times
Been thanked: 17 times

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

Post by Dennis_Moore »

Shmuel wrote:Dennis_Moore, это что-то у вас не так. Сейчас специально установил, и оно работает (пробовал из панелей).
Правда картинка странная, с усечёнными текстами.
С этого дня обещаю всегда проверять все на чистом FAR перед тем как писать. Да, на чистой работает. Ошибка появляется если в scripts лежит um_adapter.lua и мне кажется что проблема все-таки в LuaManager т.ч. не буду пока писать в тему UM Adapter.

P.S. У меня на билде 4927 тексты не усечены
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Dennis_Moore wrote:Похоже что скрипт не работает. При вызове получаю следующее (FAR3 b4927):

Пропущенная при тестировании граничная ошибка. Разбор описания на подстроки неправильно работал, если у префикса командной строки не указано описание. Для исправления в строку 2396 надо исправить с

Code: Select all

      items[#items+1] = {from=p,grayed=not Area.Shell,text=("%-"..PrPrefW.."s │ %s"):format(p.prefix,D[1])}
на

Code: Select all

      items[#items+1] = {from=p,grayed=not Area.Shell,text=("%-"..PrPrefW.."s │ %s"):format(p.prefix,D[1] or "")}
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Shmuel wrote:Dennis_Moore, это что-то у вас не так. Сейчас специально установил, и оно работает (пробовал из панелей).
Правда картинка странная, с усечёнными текстами.
В своё время я поменял интерпретацию настроек длины описаний и клавиш. А значения по умолчанию, как оказалось, забыл. Конечно, есть и вариант, что в БД остались старые значения, если Вы когда-то уже использовали LuaManager, но лечение в обоих случаях одинаковое. F9 в окне скрипта, и поменять два -1 на два 0 для лечения. А мне и это поправить в следующей версии.
User avatar
Dennis_Moore
Posts: 295
Joined: Tue 03 Mar, 2015 19:54
Location: Kiev
Has thanked: 6 times
Been thanked: 17 times

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

Post by Dennis_Moore »

IgorZ wrote:Пропущенная при тестировании граничная ошибка. Разбор описания на подстроки неправильно работал, если у префикса командной строки не указано описание. Для исправления в строку 2396 надо исправить с ... на ....
Спасибо! Теперь работает.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Накопилось много исправлений, так что выкладываю очередную версию под девизом "работа над ошибками (старые убираем, новые создаём)".
Версия 3.1.9 - Немного изменён способ регистрации модуля. Рефакторинг. Разбор описания на подстроки неправильно работал, если у префикса командной строки не указано описание. Исправлена ошибка с фильтром модулей по умолчанию, появившаяся в 3.1.7. (не пойму, зачем я в той версии решил уже имеющийся совершенно корректный фильтр по умолчанию перезаписывать на все абсолютно пути поиска модулей; я вообще не помню, как это делал :? ). Мелкие правки.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

То что у меня список макросов выглядит так

Code: Select all

l                                                                          g
   ╔═══════ Macros. Events *. Modules. MenuItems. CommandLines.  ═══════╗
   ╟────────────────────────────── Macros ──────────────────────────────▲
   ║  ·················C │ A»│ Con»                                     ▓
   ║  ·················C │ A»│ Cal»                                     ▓
   ║  ·················C │ a»│ &Se»                                     ▓
   ║  ·················C │ a»│ Pr&»                                     ▓
   ║  ·················C │ A»│ Man»                                     ▓
   ║  ·················C │ A»│ Imp»                                     ▓
   ║  ·················C │ A»│ Imp»                                     ▓
   ║  ·················C │ A»│ Con»                                     ▓
   ║  ·················C │ C»│ Get»                                     ▓
   ║  ·················C │ C»│ Win»                                     ▓
   ║  ·················C │ C»│ Win»                                     ▓
   ║  ·················C │ C»│ Win»                                     ▓
   ║  ·················C │ C»│ Con»                                     ▓
   ║  ·················C │ C»│ Lua»                                     ▓
   ║  ·················C │ C»│ Lua»                                     ▓
   ║  ·················C │ C»│ Con»                                     ▓
   ║  ·················C │ C»│ Cli»                                     ▓
   ║  ·················C │ C»│ Cal»                                     ░
   ║  ·················C │ C»│ Cal»                                     ░
Это так и задумано?
Может надо что-то здесь поправить

Code: Select all

                  │      │        │     ║║

    ╔═══════════════════════════════ Config ═══════════════════════════════╗
    ║ Max field width:            key - -1       , description - -1        ║
    ╟──────────────────────────────── Show ────────────────────────────────╢
    ║ Macros:  [x] Regular,      [x] Keyboard,     [x] For all areas       ║
    ║ [x] Events      [x] Modules    [x] MenuItems     [x] CommandLines    ║
    ╟─────────────────────────── Sorting order ────────────────────────────╢
    ║ [ Macros ]  [ Events ]  [ Modules ][ MenuItems ]  [ CommandLines ]   ║
    ╟─────────────────────────────── Filter ───────────────────────────────╢
    ║ Filter for keys:                                        [ Change ]   ║
    ║ [ Filter for areas ]    [ Filter for groups ][ Filter for paths ]    ║
    ╟─────────────────────────  Macros start keys ─────────────────────────╢
    ║ 1.'Lua manager'           AltShiftF11                   [ Change ]   ║
    ║ 2.'Insert script'         LCtrlF11                      [ Change ]   ║
    ║ 3.'Insert Macro'          RCtrlF11                      [ Change ]   ║
─   ║ 4.'Insert Event'          RCtrlF11                      [ Change ]   ║
    ║ 5.'Insert MenuItem'       RCtrlF11                      [ Change ]   ║
f   ║ 6.'Insert CommandLine'    RCtrlF11                      [ Change ]   ║
a   ║ 7.'Edit script'           CtrlF12                       [ Change ]   ║
    ║ 8.'Insert guid'           RCtrlU                        [ Change ]   ║
    ║ 9.'Reload scripts'        CtrlF9                        [ Change ]   ║
    ╟──────────────────────────────────────────────────────────────────────╢
a   ║               { Save } [ Apply until exit ] [ Cancel ]               ║
    ╚══════════════════════════════════════════════════════════════════════╝
?
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

gotar wrote:То что у меня список макросов выглядит так Это так и задумано?
Это поправлено в последней версии. Но если Вы уже запускали предыдущую и сохраняли настройки, то надо изменять в настройках.
gotar wrote:Может надо что-то здесь поправить?
Да, поменяйте обе -1 на 0.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

Может подскажите в чем здесь проблема

Code: Select all

   ╔═════════════════════════════════════════════════════════════ Error ═════════════════════════════════════════════════════════════╗
   ║ E:\Dropbox\FarSpring\Plugins\LuaMacro\LuaMacro.dll:                                                                             ║
   ║ ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:450: attempt to perform arithmetic on field 'sstarty' (a nil value) ║
   ║ stack traceback:                                                                                                                ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:450: in function 'PrepareFiles'                                  ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:686: in function 'fun'                                           ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:552: in function 'DoIt'                                          ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:2429: in function 'ManageMacrosEvents'                           ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:2600: in function 'action'                                       ║
   ║    E:\Dropbox\FarSpring\Plugins\LuaMacro\LuaMacro.lua:415: in function <E:\Dropbox\FarSpring\Plugins\LuaMacro\LuaMacro.lua:369> ║
   ╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
   ║                                                             { OK }                                                              ║
   ╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Нажимал F3 втором событии из списка
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

gotar wrote:Может подскажите в чем здесь проблема

Code: Select all

   ╔═════════════════════════════════════════════════════════════ Error ═════════════════════════════════════════════════════════════╗
   ║ E:\Dropbox\FarSpring\Plugins\LuaMacro\LuaMacro.dll:                                                                             ║
   ║ ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:450: attempt to perform arithmetic on field 'sstarty' (a nil value) ║
   ║ stack traceback:                                                                                                                ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:450: in function 'PrepareFiles'                                  ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:686: in function 'fun'                                           ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:552: in function 'DoIt'                                          ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:2429: in function 'ManageMacrosEvents'                           ║
   ║    ...rSpring\Profile\Macros\scripts\LuaManager\LuaManager.lua:2600: in function 'action'                                       ║
   ║    E:\Dropbox\FarSpring\Plugins\LuaMacro\LuaMacro.lua:415: in function <E:\Dropbox\FarSpring\Plugins\LuaMacro\LuaMacro.lua:369> ║
   ╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
   ║                                                             { OK }                                                              ║
   ╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Нажимал F3 втором событии из списка
Скрипт не смог найти тело события в файле, хотя оно там должно быть. Причину без самого файла сказать не могу. Вроде бы, все подобные ситуации, которые сумел отыскать, поборол раньше. Оказывается, нет. Тут, скорее всего, событие определено как-то слишком хитро. Надо смотреть текст.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Падать всё равно ведь не стоит
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

John Doe wrote:Падать всё равно ведь не стоит
Не стоит. Но был уверен, что полностью исключил возможность этой ошибки. Хотелось бы знать, какой вариант я не предусмотрел.
Post Reply

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