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

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

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

Post by IgorZ »

Данный скрипт содержит следующие макросы:
  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.5210+.

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

Attachments
LuaManager.5.1.1.7z
(58.36 KiB) Downloaded 70 times
LuaManager.5.0.6.7z
Последняя опубликованная версия, поддерживающая Far 3.0.0.4000 и выше
(59.02 KiB) Downloaded 111 times
LuaManager.3.1.11.7z
Последняя версия, выполненная не в виде модуля
(50.56 KiB) Downloaded 305 times
Last edited by IgorZ on Mon 18 May, 2020 06:26, edited 15 times in total.
IgorZ
Posts: 708
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 67 times

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

Post by IgorZ »

Latest post of the previous page:

John Doe wrote:Падать всё равно ведь не стоит
Не стоит. Но был уверен, что полностью исключил возможность этой ошибки. Хотелось бы знать, какой вариант я не предусмотрел.
IgorZ
Posts: 708
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 67 times

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

Post by IgorZ »

Выловил немного свободного времени, так что
Версия 3.1.10 - Мелкие правки, в основном предотвращение ошибок, которых, по идее, не могло случиться, но они есть.
IgorZ
Posts: 708
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 67 times

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

Post by IgorZ »

Сразу две версии.
Версия 3.1.11 - Рефакторинг. Мелкие правки.
Версия 4.0.0 - Основная логика скрипта вынесена в отдельный модуль. Макрос стал просто обвязкой к нему. (решил сделать приятное John Doe :) ).
Функционально обе версии идентичны.
IgorZ
Posts: 708
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 67 times

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

Post by IgorZ »

Версия 4.0.1 - Поддерживаются многострочные описания. В дистрибутив вложен файл с тестовым макросом, для примера. Исправлена ошибка с редактированием скрипта из открытого файла.
Last edited by IgorZ on Wed 25 Oct, 2017 06:25, edited 1 time in total.
IgorZ
Posts: 708
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 67 times

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

Post by IgorZ »

Версия 4.0.2 - Добавлены области Grabber и Desktop. Область HMenu не добавлена, поскольку, похоже, не добавлена и в Far. Добавлена ограниченная поддержка пакетов скриптов (regscript). Пока можно только отфильтровать содержимое пакета. Изменена логика работы с многострочными описаниями. Добавлен один режим вывода описаний. Мелкие правки.
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

  1. Code: Select all

    <0  - Ширина поля описаний в символах. Если содержимое строки не вмещается, остаток обрезается.
          Многострочные описания выводятся построчно.
    Из описания не очевидно, что "не вмещается" относится не к заданному значению ширины, а к фактической ширине экрана.
  2. Для значений 0 и -1 "короткие" строки добиваются до максимальной ширины пробелами, но возможно это так и задумано.
  3. IgorZ wrote: Mon 30 Oct, 2017 06:51Изменена логика работы с многострочными описаниями. Добавлен один режим вывода описаний.
    Правильно ли я понимаю, что (пока?) не предусмотрено возможности оперативно переключать режим отображения таких описаний?

    Кроме того, не хватает индикации того, что многострочное описание вообще присутствует. Имхо достаточно будет завершить строку символом переноса.
    И если уж поддерживать многострочный описания, то по F3 они тоже должны отображаться многострочно.
P.S.
По F3 заметил такую информацию: Condition: │<Absent or failed to find>.
Разве нет возможности достоверно определить задано ли условие?
И в каких случаях вообще бывает failed to find? Имхо и в них можно было бы выводить что-то более содержательное.

Ещё предлагаю не выводить значения вида <Default>, пустая строка достаточно очевидна, и выглядела бы чище.
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

IgorZ wrote: Mon 30 Oct, 2017 06:51 Добавлена ограниченная поддержка пакетов скриптов (regscript). Пока можно только отфильтровать содержимое пакета.
Вероятно речь о CtrlS.
Стоит добавить в справку определение понятия "пакет", и дать соответствующие ссылки.
И реализовать соответствующий фильтр для апи модуля.

И пока рылся в справке нашёл незаконченное предложение:

P.S.
Стоит добавить в справку определение [...], и дать соответствующие ссылки.
То же в отношении rebind.
Last edited by John Doe on Mon 30 Oct, 2017 12:05, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

Баг!
После просмотра информации о макросе по F3 в глобальном окружении появляется функция Macro (init.lua:376).

Проблема в строке 379:

Code: Select all

  local e = getfenv() -- получим окружение
При загрузке модуля окружение у нас == _G.

Вероятно должно быть так:

Code: Select all

local e = getfenv(lf)
Edit
Нет, так тоже ерунда, getfenv тут вообще не надо, а должно быть что-то подобное:

Code: Select all

  local e = setmetatable({},{__index=_G})
  setfenv(lf,e)
Last edited by John Doe on Mon 30 Oct, 2017 11:50, edited 1 time in total.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ

При попытке установить фильтр для клавиш макросов (CtrlK + клавишесочетание) вылезла . Методом исключения установил, что её причиной является наличие прилагаемого , по нажатию клавиш цифровой клавиатуры выводящими в комстроку префиксы плагинов. Если оставить этот файл и ваш скрипт единственными в Far`е, то ошибка сводится к .
Attachments
#_{#_вставкиВкомстрокуПрефиксовСлинейкиЦифр(JD)con.lua
(24.16 KiB) Downloaded 110 times
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

IgorZ wrote: Thu 25 Apr, 2013 04:00Добавлены области Grabber и Desktop
Макросы из новых областей по умолчанию "отфильтровываются", поэтому необходимо нажать CtrlM и включить их явно.
Данное поведение неочевидно, лучше бы всё новое было по умолчанию влюченным.
IgorZ
Posts: 708
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 67 times

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

Post by IgorZ »

John Doe wrote: Mon 30 Oct, 2017 09:44
  1. Code: Select all

    <0  - Ширина поля описаний в символах. Если содержимое строки не вмещается, остаток обрезается.
          Многострочные описания выводятся построчно.
    Из описания не очевидно, что "не вмещается" относится не к заданному значению ширины, а к фактической ширине экрана.
Поправлю.
John Doe wrote: Mon 30 Oct, 2017 09:44[*]Для значений 0 и -1 "короткие" строки добиваются до максимальной ширины пробелами, но возможно это так и задумано.
Да, причём так сделано изначально, с версии 1.0.
John Doe wrote: Mon 30 Oct, 2017 09:44[*]
IgorZ wrote: Mon 30 Oct, 2017 06:51Изменена логика работы с многострочными описаниями. Добавлен один режим вывода описаний.
Правильно ли я понимаю, что (пока?) не предусмотрено возможности оперативно переключать режим отображения таких описаний?
Не предусмотрено. Нужно? Могу сделать циклическое переключение режимов, это не особо сложно.
John Doe wrote: Mon 30 Oct, 2017 09:44Кроме того, не хватает индикации того, что многострочное описание вообще присутствует. Имхо достаточно будет завершить строку символом переноса.
Тогда уж символом продолжения.
John Doe wrote: Mon 30 Oct, 2017 09:44И если уж поддерживать многострочный описания, то по F3 они тоже должны отображаться многострочно.
[/list]
Упс, забыл.
John Doe wrote: Mon 30 Oct, 2017 09:44P.S.
По F3 заметил такую информацию: Condition: │<Absent or failed to find>.
Разве нет возможности достоверно определить задано ли условие?
И в каких случаях вообще бывает failed to find? Имхо и в них можно было бы выводить что-то более содержательное.
Сейчас уже не помню: то ли перестраховывался, то ли в самом деле в каком-то случае было невозможно определить. Посмотрю, что там.
John Doe wrote: Mon 30 Oct, 2017 09:44Ещё предлагаю не выводить значения вида <Default>, пустая строка достаточно очевидна, и выглядела бы чище.
"По умолчанию" далеко не всегда == "пустая строка".
John Doe wrote: Mon 30 Oct, 2017 09:53
IgorZ wrote: Mon 30 Oct, 2017 06:51 Добавлена ограниченная поддержка пакетов скриптов (regscript). Пока можно только отфильтровать содержимое пакета.
Вероятно речь о CtrlS.
Стоит добавить в справку определение понятия "пакет", и дать соответствующие ссылки.
И реализовать соответствующий фильтр для апи модуля.
John Doe wrote: Mon 30 Oct, 2017 09:53P.S.
То же в отношении rebind.
Ссылки на regscript и rebind на форуме? Да, разумно.
Начёт апи модуля подумаю. Идея логичная, но так сходу не вижу, как это правильно сделать.
John Doe wrote: Mon 30 Oct, 2017 09:53И пока рылся в справке нашёл незаконченное предложение:
На самом деле фраза законченная. Просто построение не очень удачное.
John Doe wrote: Mon 30 Oct, 2017 11:38 Баг!
После просмотра информации о макросе по F3 в глобальном окружении появляется функция Macro (init.lua:376).

Понял, буду править.
sToLp wrote: Mon 30 Oct, 2017 14:26 IgorZ

При попытке установить фильтр для клавиш макросов (CtrlK + клавишесочетание) вылезла . Методом исключения установил, что её причиной является наличие прилагаемого , по нажатию клавиш цифровой клавиатуры выводящими в комстроку префиксы плагинов. Если оставить этот файл и ваш скрипт единственными в Far`е, то ошибка сводится к .
ОК, посмотрю.
John Doe wrote: Mon 30 Oct, 2017 15:04
IgorZ wrote: Thu 25 Apr, 2013 04:00Добавлены области Grabber и Desktop
Макросы из новых областей по умолчанию "отфильтровываются", поэтому необходимо нажать CtrlM и включить их явно.
Данное поведение неочевидно, лучше бы всё новое было по умолчанию влюченным.
Забыл, поправлю.
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

IgorZ wrote: Tue 31 Oct, 2017 06:17Могу сделать циклическое переключение режимов, это не особо сложно.
А каких режимов? Сейчас же нет такого понятия.
IgorZ wrote: Tue 31 Oct, 2017 06:17Тогда уж символом продолжения.
Имхо лучше если будет отличие между многострочным текстом и просто длинной строкой.
Но это просто общие соображения, мне например пока не ясно, полезны ли вообще эти многострочные описания макросов.
IgorZ wrote: Tue 31 Oct, 2017 06:17"По умолчанию" далеко не всегда == "пустая строка".
А где у нас пустые строки?
Если надо их отличать, то можно кавычками.
А "по умолчанию" пусто.
IgorZ wrote: Tue 31 Oct, 2017 06:17Ссылки на regscript и rebind на форуме?
Имхо лучше создать в справке раздел с внешними ссылками, где вкратце описать lua explorer, rebind и regscript.
IgorZ wrote: Tue 31 Oct, 2017 06:17Начёт апи модуля подумаю. Идея логичная, но так сходу не вижу, как это правильно сделать.
А в чём сложность? Аналогично фильтру по файлу (понятно, что отсутствует смысл использовать оба этих фильтра одновременно).
IgorZ wrote: Tue 31 Oct, 2017 06:17На самом деле фраза законченная. Просто построение не очень удачное.
Напомните что значит "отключить модуль".
IgorZ
Posts: 708
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 67 times

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

Post by IgorZ »

sToLp wrote: Mon 30 Oct, 2017 14:26 IgorZ

При попытке установить фильтр для клавиш макросов (CtrlK + клавишесочетание) вылезла . Методом исключения установил, что её причиной является наличие прилагаемого , по нажатию клавиш цифровой клавиатуры выводящими в комстроку префиксы плагинов. Если оставить этот файл и ваш скрипт единственными в Far`е, то ошибка сводится к .
Ошибку вызывает key="префиксы13/ /" из-за двух "/". Я нашёл способ обойти ошибку, и в следующей версии данная конструкция будет восприниматься без ошибки, но у меня вопрос общего плана: а надо ли тащить в поле key то, чему место в description? Дело в том, что с key="/" (как оно и должно выглядеть, по идее) корректно работает и текущая версия LuaManager, и приведённый макрос.
John Doe wrote: Mon 30 Oct, 2017 15:04
IgorZ wrote: Thu 25 Apr, 2013 04:00Добавлены области Grabber и Desktop
Макросы из новых областей по умолчанию "отфильтровываются", поэтому необходимо нажать CtrlM и включить их явно.
Данное поведение неочевидно, лучше бы всё новое было по умолчанию влюченным.
Посмотрел, у меня всё-таки всё сделано правильно. Фильтруются новые области потому, что в БД уже есть сохранённый набор показываемых областей (переменная IgorZ/LuaManager/AreaFilter). Если эту переменную удалить, будут выводиться все области. Если в настройках (по F9) включить показ новых областей и сохранить параметры, тоже всё будет выводиться.
John Doe wrote: Tue 31 Oct, 2017 08:34
IgorZ wrote: Tue 31 Oct, 2017 06:17Могу сделать циклическое переключение режимов, это не особо сложно.
А каких режимов? Сейчас же нет такого понятия.
Ну, я имел в виду, что на данный момент есть 4 способа вывести описание(+n,0,-1,-n). Их я и назвал режимами. Для их переключения надо заходить в диалог настройки. Можно сделать клавишу, по которой идёт смена режима (+n -> 0 -> -1 -> -n -> +n).
John Doe wrote: Tue 31 Oct, 2017 08:34
IgorZ wrote: Tue 31 Oct, 2017 06:17Тогда уж символом продолжения.
Имхо лучше если будет отличие между многострочным текстом и просто длинной строкой.
Но это просто общие соображения, мне например пока не ясно, полезны ли вообще эти многострочные описания макросов.
Символ продолжения у многострочного текста будет сразу после конца текста, а не в конце строки, так что для короткой строки визуально отличаться будет, а у длинной никакой не будет виден.
Не вредны, во всяком случае, так что пусть будет.
John Doe wrote: Tue 31 Oct, 2017 08:34
IgorZ wrote: Tue 31 Oct, 2017 06:17"По умолчанию" далеко не всегда == "пустая строка".
А где у нас пустые строки?
Если надо их отличать, то можно кавычками.
А "по умолчанию" пусто.
Скажем, если указано priority=50, то это совсем не то же самое, что и отсутствие поля priority. В первом случае пишется "50", во втором более правильно указать "По умолчанию".
John Doe wrote: Tue 31 Oct, 2017 08:34
IgorZ wrote: Tue 31 Oct, 2017 06:17Ссылки на regscript и rebind на форуме?
Имхо лучше создать в справке раздел с внешними ссылками, где вкратце описать lua explorer, rebind и regscript.
Собственно, я это и подразумевал: раздел справки "Используемые внешние модули" соответствующего содержания и ссылки на него.
John Doe wrote: Tue 31 Oct, 2017 08:34
IgorZ wrote: Tue 31 Oct, 2017 06:17Начёт апи модуля подумаю. Идея логичная, но так сходу не вижу, как это правильно сделать.
А в чём сложность? Аналогично фильтру по файлу (понятно, что отсутствует смысл использовать оба этих фильтра одновременно).
Просто сначала я правлю ошибки, и только потом сажусь и начинаю думать, как лучше добавить новые функции. А свои подводные камни есть всегда и везде, как показывает опыт.
John Doe wrote: Tue 31 Oct, 2017 08:34
IgorZ wrote: Tue 31 Oct, 2017 06:17На самом деле фраза законченная. Просто построение не очень удачное.
Напомните что значит "отключить модуль".
Технически файл модуля переименовывается, и загруженный модуль удаляется из package.loaded. При этом LuaManager продолжает видеть его в списке модулей, и по повторному нажатию CtrlD модуль переименовывается обратно, становлясь доступным всем. То есть, реализована та же функциональность, что и для макросов, просто чуть другим способом.
Кстати, фразу я всё-же поправил. в следующй версии, надеюсь, будет звучать более понятно.
User avatar
John Doe
Бюрократ
Posts: 13003
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

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

Post by John Doe »

IgorZ wrote: Tue 31 Oct, 2017 12:06Посмотрел, у меня всё-таки всё сделано правильно. Фильтруются новые области потому, что в БД уже есть сохранённый набор показываемых областей (переменная IgorZ/LuaManager/AreaFilter).
Правильнее с моей точки зрения хранить не список показываемых сущностей, а список отфильтровываемых, таким образом новые сущности по умолчанию будут отображаться.
IgorZ wrote: Tue 31 Oct, 2017 12:06Ну, я имел в виду, что на данный момент есть 4 способа вывести описание(+n,0,-1,-n). Их я и назвал режимами. Для их переключения надо заходить в диалог настройки. Можно сделать клавишу, по которой идёт смена режима (+n -> 0 -> -1 -> -n -> +n).
4 только для описания, а ещё и всё остальное.
Режимы это конечно круто, но не уверен, что надо настолько наворачивать...
IgorZ wrote: Tue 31 Oct, 2017 12:06Скажем, если указано priority=50, то это совсем не то же самое, что и отсутствие поля priority. В первом случае пишется "50", во втором более правильно указать "По умолчанию".
В первом "50", а во втором лучше ничего, что и будет означать "по умолчанию", но чище выглядит, и не отвлекает внимание от значимых параметров.
IgorZ wrote: Tue 31 Oct, 2017 12:06Технически файл модуля переименовывается, и загруженный модуль удаляется из package.loaded.
А какой в этом практический смысл?

P.S.
Поскольку LuaManager сейчас представляет собой модуль, то его удобно разделить по нескольким файлам, которые между собой смогут взаимодействовать с помощью require.
(Во всяком случае мне было бы неудобно работать с файлом, в котором почти 200 кБ)
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Tue 31 Oct, 2017 12:06Ошибку вызывает key="префиксы13/ /" из-за двух "/". Я нашёл способ обойти ошибку, и в следующей версии данная конструкция будет восприниматься без ошибки, но у меня вопрос общего плана: а надо ли тащить в поле key то, чему место в description? Дело в том, что с key="/" (как оно и должно выглядеть, по идее) корректно работает и текущая версия LuaManager, и приведённый макрос.
Теперь уже не актуальные, раньше это были опыты с полем key. Но, в принципе, возможные и сейчас.
После обновления макробраузера посмотрю как это сработает и поправлю.
Благодарю Вас за подробное разъяснение!
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

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

Post by sToLp »

John Doe wrote: Tue 31 Oct, 2017 08:34мне например пока не ясно, полезны ли вообще эти многострочные описания макросов
Полагаю, что если они приживутся, а, похоже, что приживаются, то в глобальную функцию Macro может не потребоваться и добавление дополнительного поля.
Или у Вас насчёт этого другие резоны?
Post Reply

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