Менеджер 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
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

IgorZ wrote: что-то оказалось некорректно. Возможно, в записанном Вами макросе. Точнее не скажу.
Макрос сделал простейший:

Code: Select all

local function qqq()
far.Show('qqq')
end
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
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.1 - Добавлена проверка результатов операций файлового ввода-вывода. При вставке скрипта из меню имя файла назначения показывается и редактируется. Экспериментально: изменена идеология диалога настройки сортировки. По AltL загружается комбинация фильтров, активная на момент закрытия LuaManager в прошлый раз. Рефакторинг. Мелкие правки.
HaRT wrote:
IgorZ wrote: Это потребует полной переделки диалога. Подумаю, но не факт, что возьмусь.
Ну вот примерно "спартанский" вариант и получился. Мне он показался самым удобным в использовании из возможных. Заодно он вышел и очень простым в реализации. Хотя немного обидно за старый вариант: он был настолько изящно реализован...
buniak_a_h wrote:
IgorZ wrote: что-то оказалось некорректно. Возможно, в записанном Вами макросе. Точнее не скажу.
На последней версии всё работает нормально? Если нет, прошу проверить на базовой конфигурации (последний Far без дополнительных плагинов, из макросов только LuaManager) и сообщить мне точную последовательность действий, приводящих к ошибке.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

IgorZ wrote:На последней версии всё работает нормально? Если нет, прошу проверить на базовой конфигурации (последний Far без дополнительных плагинов, из макросов только LuaManager) и сообщить мне точную последовательность действий, приводящих к ошибке.
  1. "Странный список макросов (см. ).
  2. В принципе работает. Но хотелось бы после нажатия на [Ok] макрос сразу был доступен. Это удача, что у меня имеется макрос для перезагрузки ВСЕХ макросов, иначе пришлось бы уходить в панели и набирать команду macro:load.
  3. Не указывать в имени файла LuaManager.lua . Или последний, или сгенерированный Temp, или оставлять строку пустой. И не разрешать создавать макрос, если имя файла не указано.
  4. Некоторые сервисы по контролю введённого:
    1. В сгенерированном файле присутствует uid (пустой); предлагаю, если юзер не задал явно, вставлять туда результат win.Uuid(win.Uuid()).
    2. Следить чтоб после function не вставлялось имя функции (а перед function - слово local). Ведь куда эта функция запишется, пользователь не знает... Ну, т.е. теперь-то знаю, сначала не знал. Возможно, вообще не записывать в пустой шаблон function() end, а добавлять их при сохранении. Чтоб только тело функции вводилось.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

IgorZ
P/S
По поводу "странного" списка макросов. Я настройки ширины столбцов не менял. Правда, запускал предыдущую версию макроса, так что, возможно, что-нить осталось в db (или где Вы там храните настройки). Если скажете, как их сбросить - сделаю. Для чистоты эксперимента.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

buniak_a_h wrote:
  1. Попробуйте зайти, поправить в конфигурации. У меня, например, стоит Максимальная длина поля: клавиш - 0, описания - 1000. У Вас, похоже, -1 и -3 соответственно. Если есть желание исследовать содержимое БД, можно воспольльзоваться, к примеру, редактором баз данных DBEdit (лежит здесь же, в макросах и скриптах).
  2. Поломалось в результате последнего рефакторинга. Если неохота ждать релиза, исправить строку 1676 на if ok then Write(Form[2][10],text,"a") far.MacroLoadAll() end -- отредактировали без ошибок? допишем новый скрипт в конец файла.
  3. Имя файла берётся из элемента под курсором. Если пользователь удалил имя, создаётся новый файл с именем ".lua" в текущем каталоге. Не вижу ничего страшного в таком поведении. Впрочем, могу добавить проверку.
    1. У Вас не установлен модуль Rebind? Тогда это не доставит Вам никаких проблем - uid нужен только для него. Впрочем да, некрасиво. Подумаю, как лучше исправить эту ситуацию.
    2. Давайте полагаться на то, что пользователь обладает мозгами и знает, что пишет. Если это не так, свои мозги я ему всё равно не вставлю. А вариант с принудительным обрамлением неприемлем - значением поля action может быть любое выражение Lua, результатом которого является функция, к примеру, имя функции, описанной в другом месте, вплоть до action=error. Или же, action=pi==4 and require("Мой супер-пупер модуль") or far.MacroLoadAll. Именно это некое выражение и выводится в окне под цифрой 9.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

IgorZ wrote:Давайте полагаться на то, что пользователь обладает мозгами и знает, что пишет.
Когда я первый раз использовал этот сервис, я же не знал, куда попадёт написанный мною код. Естественно было бы, например, предположить, что я напишу некую local function, которая попадёт в файл lua ВНЕ таблицы Macro {...}. А имя этой вновь написанной процедуры попадёт в action=... Естественно, это всё - до первого опыта; теперь-то я знаю, что пишу :-).
На самом деле либо я не дочитал (невнимательно читал) хелп, либо этот момент там не отражён.
есть предложение
Добавьте кнопку "Редактировать" там же, где Ok/Cancel - редактировать полученный (сгенерированный) lua-файл. Просто потому что может понадобиться добавить какие-либо local-переменные и т.д.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
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.2 - При вставке скрипта из меню макросы не перезагружались - исправлено. Если при вставке скрипта поле имени файла пусто и действие - не отмена, диалог не завершается, активируется поле имени файла. Если модуль rebind не установлен, то пустой uid вносится в скрипт как комментарий. Если uid уже был раньше, то не комментируется, чтоб не потеряться.
buniak_a_h wrote: Естественно было бы, например, предположить, что я напишу некую local function, которая попадёт в файл lua ВНЕ таблицы Macro {...}. А имя этой вновь написанной процедуры попадёт в action=...
Ничего естественного. Для такого варианта нужно было бы указывать имя этой функции (или, как минимум, подтверждать случайно сгенерированное), иначе высок риск напороться на конфликт имён. Следовательно, это имя выводилось бы на экране, так или иначе. Раз оно не выводится, значит подобное предположение в корне неверно.
buniak_a_h wrote:На самом деле либо я не дочитал (невнимательно читал) хелп, либо этот момент там не отражён.
Вы действительно невнимательно читали хелп, иначе заметили бы, что справка по редактированию скриптов в диалоге отсутствует вообще. ;)
Возможно, я её добавлю. Но вообще-то до сих пор на её отсутствие никто, кроме Вас, ни прямо, ни косвенно не жаловался.
buniak_a_h wrote:есть предложение
Добавьте кнопку "Редактировать" там же, где Ok/Cancel - редактировать полученный (сгенерированный) lua-файл. Просто потому что может понадобиться добавить какие-либо local-переменные и т.д.
Чем Вас не устраивает AltF4 на вновь заведённом макросе? Если же Вы не изменяли имя файла для нового макроса, можно даже не переходить на новый элемент, а нажать AltF4 на текущей строке и прыгнуть в конец файла.
Last edited by IgorZ on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Спрятан оверквотинг
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 »

Если модуль rebind не установлен, то пустой uid вносится в скрипт как комментарий.
А почему пустой?
(имхо, незачем комментировать, даже при отсутствии rebind)
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

IgorZ wrote:Ничего естественного. Для такого варианта нужно было бы указывать имя этой функции...
Ну, там же есть место для вставки имени функции. А нарваться на конфликт имён при том, что имя файла я вводил сам, странно. Это - МОЙ файл, я знаю, какие там имена... Впрочем, тут уж дело вкуса.
IgorZ wrote:Вы действительно невнимательно читали хелп, иначе заметили бы, что справка по редактированию скриптов в диалоге отсутствует вообще.
Значит, внимательно читал, раз не нашёл того, чего там нету :blum:
IgorZ wrote:Чем Вас не устраивает AltF4 на вновь заведённом макросе? Если же Вы не изменяли имя файла для нового макроса, можно даже не переходить на новый элемент, а нажать AltF4 на текущей строке и прыгнуть в конец файла.
Позволю себе процитировать Вас и показать, для чего.
При вставке скрипта из меню макросы не перезагружались - исправлено.
Теперь представьте: макрос предполагает наличие local-переменных и процедур, которых ещё нету (просто я не нашёл механизма для написания чего-то вне таблицы Macro). Я что-то там написал, нажал <Ok>, макрос загрузился (или НЕ загрузился из-за ошибки!). Ошибочный. Да ещё такой, что может и другим помешать (через глобальные переменные, которые ПОТОМ будут исправлены на локальные).
Ну и ещё одно неудобство Вы сами отметили:
Если же Вы не изменяли имя файла для нового макроса
Если макрос действительно новый, то (неявно) предполагается, что он будет писаться в новый файл. Ведь для редактирования уже имеющихся lua-скриптов имеется другой, более удобный механизм (тот же упомянутый Вами AltF4). А найди этот новый файл потом в Вашем списке... И я писал, что имя файла надо очищать: это - "защита от дурака", чтоб нет попортить чужие файл и макрос. Не говоря уж, что конкретно Ваш переписывает (восстанавливает) себя сам :-) Поверьте, у меня большой опыт работы на неквалифицированных пользователей; Вы даже не представляете, что они могут учудить. Лично мне для написания скриптов вполне хватает встроенного редактора и записи клавиатурного макроса. Так что если Вам это ([ Edit ]) так сложно сделать, можете и не париться.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
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:
Если модуль rebind не установлен, то пустой uid вносится в скрипт как комментарий.
А почему пустой?
(имхо, незачем комментировать, даже при отсутствии rebind)
Почему пустой вносится, или почему пустой комментируется?
Вносится, потому что после диалогового редактирования вообще вносятся все возможные поля, чтобы облегчить последующее вероятное допиливание. Просто те, что не имеют значения, отличного от умолчательного (или пустого, если умолчательное отсутствует), комментируются.
В случае uid, вдобавок, если потом установить rebind, возникают проблемы с такими макросами, у которых есть незакомментированное поле uid="".
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

buniak_a_h wrote:
IgorZ wrote:Ничего естественного. Для такого варианта нужно было бы указывать имя этой функции...
Ну, там же есть место для вставки имени функции. А нарваться на конфликт имён при том, что имя файла я вводил сам, странно. Это - МОЙ файл, я знаю, какие там имена... Впрочем, тут уж дело вкуса.
Похоже, Вы ошибочно считаете, что в одном файле может быть только один макрос. Представьте, что их там десяток, и Вы поймёте, что наличие 20 (condition+action) поименованных функций с лёгкостью обеспечит конфликт имён.
buniak_a_h wrote:
IgorZ wrote:Вы действительно невнимательно читали хелп, иначе заметили бы, что справка по редактированию скриптов в диалоге отсутствует вообще.
Значит, внимательно читал, раз не нашёл того, чего там нету :blum:
Хе-хе...
buniak_a_h wrote:На самом деле либо я не дочитал (невнимательно читал) хелп, либо этот момент там не отражён.
Читал бы внимательно, точно знал бы, что не отражён, а не гадал. :P
buniak_a_h wrote:Теперь представьте: макрос предполагает наличие local-переменных и процедур, которых ещё нету (просто я не нашёл механизма для написания чего-то вне таблицы Macro). Я что-то там написал, нажал <Ok>, макрос загрузился (или НЕ загрузился из-за ошибки!). Ошибочный. Да ещё такой, что может и другим помешать (через глобальные переменные, которые ПОТОМ будут исправлены на локальные).
Раз уж Вы всё равно собираетесь допиливать скрипт в редакторе, то в диалоге впишите функцию в минимальном виде, который загрузится без ошибок. На худой конец временно просто впишите туда затычку, типа return 1.
buniak_a_h wrote:Ну и ещё одно неудобство Вы сами отметили:
Если же Вы не изменяли имя файла для нового макроса
Если макрос действительно новый, то (неявно) предполагается, что он будет писаться в новый файл.
Вы таки действительно с чего-то решили, что каждый макрос пишется в отдельный файл.
buniak_a_h wrote:И я писал, что имя файла надо очищать: это - "защита от дурака", чтоб нет попортить чужие файл и макрос.
По неким причинам я не хочу, чтоб меня грязно материл каждый, кто попытается добавить в один файл, скажем, пару-тройку макросов, несколько обработчиков событий и пункт меню плагинов.
buniak_a_h wrote:Поверьте, у меня большой опыт работы на неквалифицированных пользователей; Вы даже не представляете, что они могут учудить. Лично мне для написания скриптов вполне хватает встроенного редактора и записи клавиатурного макроса. Так что если Вам это ([ Edit ]) так сложно сделать, можете и не париться.
Мне тоже доводится плотно работать с неквалифицированными пользователсями. Большинство из них вообще не хочет пользоваться Фаром. Тем же, кто в нём работает, для их нужд хватает клавиатурных макросов. Писать регулярные макросы - выше их компетенции. Для написания скриптов на lua требуются знание lua и навыки программиста. А это уже определённый уровень интеллекта и квалификации.
И да, это довольно муторно, поскольку потребует переделывать логику работы доброй половины скрипта. Что это за собой потянет, сейчас я даже не берусь предсказывать. Вы действительно полагаете, что я взвалю всё это на себя из-за единственного за несколько лет недовольного, тем более после того, как он тут же признался, что, в сущности, ему это и не нужно?
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 »

Почему пустой вносится, или почему пустой комментируется?
Почему пустой.
В случае uid, вдобавок, если потом установить rebind, возникают проблемы с такими макросами, у которых есть незакомментированное поле uid="".
Что если туда вместо "" всегда заносить сгенерированное значение? Допиливать проще будет, даже если строка закомментирована.
Собственно, комментировать в этом случае уже и не обязательно: если rebind установлен, то всё хорошо, а если отсутствует, то значение просто будет проигнорировано.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

По поводу редактирования:
Видимо, неправильно представляю себе наиболее полезной фишки "Создание нового макроса". Если Вы ничего не делаете, то самый простой способ - создать в редакторе, и этот сервис не нужен. Наиболее удобно использовать эту фишку (на мой взгляд) - это создание чего-то похожего на KeyMacro, но более сложное. Т.е. Вы работаете в неком проекте, и потребовалось Вам сделать нечто, чего не может простой клавиатурный макрос (например, включающий циклы и ветвления). Вот для создания такого макроса я действительно не знаю другого удобного инструмента. Особенно если у Вас открыто пара десятков редакторов, или вы находитесь в диалоге и подобная ситуация, когда переход в каталог макросов и создание файла просто неудобно. Во всех (настаиваю - ВО ВСЕХ!) других случаях этот сервис просто не нужен.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
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:Что если туда вместо "" всегда заносить сгенерированное значение? Допиливать проще будет, даже если строка закомментирована.
Собственно, комментировать в этом случае уже и не обязательно: если rebind установлен, то всё хорошо, а если отсутствует, то значение просто будет проигнорировано.
Подумал. Недостатков у идеи не нашёл. Теперь думаю, почему раньше не сделал так. Ведь в самом деле напрашивается такое решение. Видимо, когда-то мне это показалось неправильным, а потом сработала инерция мышления. Сделаю в следующей версии.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

buniak_a_h wrote:По поводу редактирования:
Видимо, неправильно представляю себе наиболее полезной фишки "Создание нового макроса".
Возможно...
buniak_a_h wrote:Наиболее удобно использовать эту фишку (на мой взгляд) - это создание чего-то похожего на KeyMacro, но более сложное.
Я, к примеру, все такие макросы храню в одном файле, чтоб не расползались. Так на порядок удобнее, особенно в описаннй Вами ситуации. И мне каждый раз вбивать имя этого уже существующего файла куда неудобнее, чем Вам каждый раз нажимать Del (или CtrlBS пару раз, если путь нужен) после Ins. Раз уж Вы так настойчиво стремитесь каждый макрос хранить в отдельном файле.
buniak_a_h wrote:Во всех (настаиваю - ВО ВСЕХ!) других случаях этот сервис просто не нужен.
заинтересованно На чём настаиваете? Многие говорят, лучше всего - на кедровых орешках. Хотя некоторые предпочитают на рябине, клюкве или вообще какой-нибудь траве.
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.3 - При редактировании скрипта из файла можно выбрать любой из имеющихся. Текущий (если есть под курсором в редакторе) - под курсором в меню. Отдельный макрос для редактирования именно текущего делать не стал, ибо сомневаюсь в нужности. Для Macro и Event uid формируется всегда, независимо от наличия rebind. Пора бы уже, наверное, легализовать поле uid, сделав обязательным - это намёк Shmuel;). Добавлена справка по диалогам редактирования, краткая. Рефакторинг - глюков не обещаю, но не исключаю.
Post Reply

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