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

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

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

Postby 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 скрипта из редактируемого файла.
    Клавиша вызова по умолчанию: CtrlF12.
  8. Вставка строки guid в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlU.
  9. Перезагрузка всех скриптов.
    Клавиша вызова по умолчанию: CtrlF9.

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

Attachments
LuaManager.3.1.9.7z
(50.58 KiB) Downloaded 40 times
Last edited by IgorZ on Fri 07 Apr, 2017 06:20, edited 62 times in total.

User avatar
John Doe
Бюрократ
Posts: 11037
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Tue 09 Aug, 2016 11:47

Latest post of the previous page:

IgorZ wrote:Source of the post В смысле, кто-то попытается обратиться к чисто интерактивному скрипту, по определению запускаемому, когда все остальные скрипты уже загружены, в автозагрузке?
Именно обратиться, а не запустить.
Например если какой-то скрипт будет содержать в начале local luamanager = require "luamanager"

IgorZ wrote:Source of the post Языковые файлы, настройки. Я пробовал. Прикинул, сколько придётся переделывать, и какие костыли лепить, и передумал.
Честный модуль может обращаться к своим файлам через require.
Впрочем, несложно получить и полный путь файла модуля.

Собственно я сейчас не агитирую вас заниматься этим, а лишь обращаю внимание что подход с добавлением собственного загрузчика (и особенно манипуляции по его восстановлению после перезагрузки макросов) это совсем уж overkill

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Tue 09 Aug, 2016 12:44

John Doe wrote:
IgorZ wrote:Source of the post В смысле, кто-то попытается обратиться к чисто интерактивному скрипту, по определению запускаемому, когда все остальные скрипты уже загружены, в автозагрузке?
Именно обратиться, а не запустить.
Например если какой-то скрипт будет содержать в начале local luamanager = require "luamanager"
Ладно, принимается. Буду иметь в виду, что надо бы что-то сделать - вдруг кто-то попробует реализовать и напорется.
John Doe wrote:Собственно я сейчас не агитирую вас заниматься этим, а лишь обращаю внимание что подход с добавлением собственного загрузчика (и особенно манипуляции по его восстановлению после перезагрузки макросов) это совсем уж overkill
Зато было интересно, и я получил новый опыт. :)

aflexus
Posts: 35
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Postby aflexus » Tue 09 Aug, 2016 14:08

IgorZ, а проблему с пропаданием меню под х64 так и не удалось решить?

User avatar
John Doe
Бюрократ
Posts: 11037
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Tue 09 Aug, 2016 14:43

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

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: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Wed 10 Aug, 2016 09:23

aflexus wrote:IgorZ, а проблему с пропаданием меню под х64 так и не удалось решить?
У меня только x32, так что проверить не могу.

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Wed 10 Aug, 2016 09:24

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: 11037
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Wed 10 Aug, 2016 10:08

Ну так научите пользоваться.
Вызываю по инструкции require"LuaManager"{FFilter=script.FileName}

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Wed 10 Aug, 2016 10:46

John Doe wrote:Ну так научите пользоваться.
Вызываю по инструкции require"LuaManager"{FFilter=script.FileName}
Указанные при вызове фильтры не отменяют сохранённых в конфигурации. Надо проверить
  • CtrlM - фильтр областей для макросов;
  • CtrlE - фильтр групп для эвентов;
  • CtrlShiftK - фильтр клавиш для макросов.

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Wed 10 Aug, 2016 11:11

IgorZ wrote:Указанные при вызове фильтры не отменяют сохранённых в конфигурации.
Кстати, надо, наверное, предусмотреть на такой случай поле навроде ResetFilters=true. Запишу себе в планы.

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Fri 12 Aug, 2016 10:08

Версия 3.1.7 - Добавлен модуль-заглушка на случай require"LuaManager" из _macroinit.lua. Если ни один из скриптов не делает require"LuaManager" в процессе загрузки, заглушка не нужна. Если делает, лучше положить её в Macros\modules во избежание ошибок при загрузке макросов. Сам по себе модуль-заглушка может лежать где угодно - он ничего не делает и, соответственно, никому не мешает. Главное, не перепутайте его с настоящим LuaManager.lua! В параметры, передаваемые модулю, включён ResetFilters: если истина, то перед применением параметров включить показ всего и сбросить все фильтры. Применять, если надо игнорировать параметры показа и фильтрации скриптов, сохранённые в БД.

User avatar
John Doe
Бюрократ
Posts: 11037
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Fri 02 Sep, 2016 11:15

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 и других скриптах того же автора
Last edited by John Doe on Fri 02 Sep, 2016 11:27, edited 1 time in total.

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Thu 27 Oct, 2016 08:51

Версия 3.1.8 - Изменён способ получения версии LuaMacro. Теперь можно редактировать несохранённые клавиатурные макросы. Модуль теперь возвращает таблицу функций (старый вариант вызова сохранён). Изменён способ регистрации модуля.

User avatar
John Doe
Бюрократ
Posts: 11037
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Thu 27 Oct, 2016 10:27

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

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;

Хотя нет, скорее так

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;
Last edited by John Doe on Thu 27 Oct, 2016 10:46, edited 2 times in total.

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Fri 28 Oct, 2016 07:05

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


В черновом варианте так и было. Но потом я счёл идейно неверным, если на, скажем, LM.Confif() выдастся "LuaManager not loaded yet". Или того чище: наберёт кто-то LM.KillAllGays(), получит в ответ "LuaManager not loaded yet" и будет уверен, что LuaManager запросто убил бы всех геев, но просто не успел загрузиться. :evil:

User avatar
John Doe
Бюрократ
Posts: 11037
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Fri 28 Oct, 2016 08:59

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

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

Code: Select all

local LMConfig = require"LuaManager".Config

Это не будет работать, ни у вас, ни у меня. Но есть разница.

Ваш код приведёт к тому, что когда скрипт вызовет LMConfig(), то вместо конфига мы получим (не очень корректное) сообщение, скрипт же будет уверен что всё в порядке.
А предложенный мной код приведёт к тому, что ошибка (а именно некорректное использование модуля) вылезет сразу, при попытке индексации, ещё в момент загрузки скрипта.

User avatar
Dennis_Moore
Posts: 101
Joined: Tue 03 Mar, 2015 19:54
Location: Kiev
Has thanked: 2 times

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

Postby Dennis_Moore » Thu 30 Mar, 2017 12:47

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


Shmuel
Posts: 4943
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 123 times

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

Postby Shmuel » Thu 30 Mar, 2017 14:32

Dennis_Moore, это что-то у вас не так. Сейчас специально установил, и оно работает (пробовал из панелей).
Правда картинка странная, с усечёнными текстами.


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

Who is online

Users browsing this forum: No registered users and 2 guests