Менеджер 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 351 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: В смысле, кто-то попытается обратиться к чисто интерактивному скрипту, по определению запускаемому, когда все остальные скрипты уже загружены, в автозагрузке?
Именно обратиться, а не запустить.
Например если какой-то скрипт будет содержать в начале local luamanager = require "luamanager"
IgorZ wrote: Языковые файлы, настройки. Я пробовал. Прикинул, сколько придётся переделывать, и какие костыли лепить, и передумал.
Честный модуль может обращаться к своим файлам через require.
Впрочем, несложно получить и полный путь файла модуля.

Собственно я сейчас не агитирую вас заниматься этим, а лишь обращаю внимание что подход с добавлением собственного загрузчика (и особенно манипуляции по его восстановлению после перезагрузки макросов) это совсем уж overkill
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: В смысле, кто-то попытается обратиться к чисто интерактивному скрипту, по определению запускаемому, когда все остальные скрипты уже загружены, в автозагрузке?
Именно обратиться, а не запустить.
Например если какой-то скрипт будет содержать в начале local luamanager = require "luamanager"
Ладно, принимается. Буду иметь в виду, что надо бы что-то сделать - вдруг кто-то попробует реализовать и напорется.
John Doe wrote:Собственно я сейчас не агитирую вас заниматься этим, а лишь обращаю внимание что подход с добавлением собственного загрузчика (и особенно манипуляции по его восстановлению после перезагрузки макросов) это совсем уж overkill
Зато было интересно, и я получил новый опыт. :)
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

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

Post by aflexus »

IgorZ, а проблему с пропаданием меню под х64 так и не удалось решить?
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 »

Понадобилось отфильтровать макросы по файлу, но почему-то не работает, список получается пуст

Code: Select all

╔═ Macros *. Events *. MenuItems. CommandLines. Mask: "*\smartsearch.lua". ══╗
╚═════ Enter,Esc,F1,F3,AltF3,F4,Alt/CtrlF4,Ins,Del,CtrlPgDn,CtrlR/D,F9 ══════╝
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

aflexus wrote:IgorZ, а проблему с пропаданием меню под х64 так и не удалось решить?
У меня только x32, так что проверить не могу.
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:Понадобилось отфильтровать макросы по файлу, но почему-то не работает, список получается пуст

Code: Select all

╔═ Macros *. Events *. MenuItems. CommandLines. Mask: "*\smartsearch.lua". ══╗
╚═════ Enter,Esc,F1,F3,AltF3,F4,Alt/CtrlF4,Ins,Del,CtrlPgDn,CtrlR/D,F9 ══════╝
Вижу, там на макросы и эвенты ещё какие-то фильтры стоят. Возможно, это они отсекают содержимое данного файла?
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 »

Ну так научите пользоваться.
Вызываю по инструкции require"LuaManager"{FFilter=script.FileName}
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:Ну так научите пользоваться.
Вызываю по инструкции require"LuaManager"{FFilter=script.FileName}
Указанные при вызове фильтры не отменяют сохранённых в конфигурации. Надо проверить
  • CtrlM - фильтр областей для макросов;
  • CtrlE - фильтр групп для эвентов;
  • CtrlShiftK - фильтр клавиш для макросов.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

IgorZ wrote:Указанные при вызове фильтры не отменяют сохранённых в конфигурации.
Кстати, надо, наверное, предусмотреть на такой случай поле навроде ResetFilters=true. Запишу себе в планы.
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.7 - Добавлен модуль-заглушка на случай require"LuaManager" из _macroinit.lua. Если ни один из скриптов не делает require"LuaManager" в процессе загрузки, заглушка не нужна. Если делает, лучше положить её в Macros\modules во избежание ошибок при загрузке макросов. Сам по себе модуль-заглушка может лежать где угодно - он ничего не делает и, соответственно, никому не мешает. Главное, не перепутайте его с настоящим LuaManager.lua! В параметры, передаваемые модулю, включён ResetFilters: если истина, то перед применением параметров включить показ всего и сбросить все фильтры. Применять, если надо игнорировать параметры показа и фильтрации скриптов, сохранённые в БД.
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 »

Code: Select all

for _,p in ipairs(far.GetPlugins()) do -- переберём все плагины
  local GInfo = far.GetPluginInformation(p).GInfo -- информация о плагине
  if GInfo.Title=="LuaMacro" then LMBuild = GInfo.Version[4] break end -- запомним версию LuaMacro
end
Этот код при определённых условиях вызывает ошибку.

far.GetPlugins может давать дескрипторы и уже выгруженных плагинов, если они выгружены не штатно а по исключению (может баг в фаре).
Поэтому надо проверять результат far.GetPluginInformation, прежде чем индексировать.

P.S.
Аналогичный код есть и в EnvManager и других скриптах того же автора
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.8 - Изменён способ получения версии LuaMacro. Теперь можно редактировать несохранённые клавиатурные макросы. Модуль теперь возвращает таблицу функций (старый вариант вызова сохранён). Изменён способ регистрации модуля.
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: Изменён способ регистрации модуля.
Для данного случая более корректным будет такой модуль:

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):

Post Reply

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