ScriptsBrowser — управление скриптами [экспериментально]

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

Каждый автор так или иначе снабжает свои скрипты метаинформацией, такой как название, описание, версия, автор, тема обсуждения на форуме, и т. п.
Сейчас эта информация может содержаться где угодно: в комментариях, или в каком-то диалоге, или в справке.
Естественно централизовано посмотреть её не получится.

Но раз каждый скрипт в любом случае содержит какую-то метаинформацию, то почему бы не заполнять её стандартизировано?
В результате мы получим возможность управлять скриптами централизованно, и реализовать разные интересные возможности, такие как изложенные ранее: http://forum.farmanager.com/viewtopic.p ... 66#p121966

Представляю экспериментальную реализацию некоторых идей:
Основные понятия:
  • Скрипт — это lua-файл. Он может содержать макросы или выполнять свои функции иным способом.
  • Скрипт может иметь вспомогательные файлы (cfg/lng/hlf).
  • Несколько скриптов могут формировать "пакет".
ScriptsBrowser.lua — утилита для работы со скриптами, запускается из меню плагинов.

regscript.lua — сам модуль, регистрирующий скрипты.
Все поля на данный момент опциональны, и их список открыт для обсуждения.
Пока предлагаю следующие:


cfgscript.lua — вспомогательный модуль, позволяющий переопределить начальные настройки скриптов не трогая их исходный код.

cfgscript_test.lua — демонстрационный скрипт для иллюстрации того, что регистрация может быть полезна и в произвольных скриптах

InsertInfo.lua — вспомогательный макрос для вставки в скрипт шаблона с метаинформацией.

P.S.
Интерфейс самого модуля может быть интересен для применения в макробраузерах.
Сейчас он позволяет получить таблицу скрипта по индексу, по id, или по полному имени файла.
Attachments
scriptbrowser02.7z
(10.12 KiB) Downloaded 299 times
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

Latest post of the previous page:

Столкнулся с проблемкой.
В редакторе options есть возможность удалить параметр. Но нет возможности сбросить на "умолчательное" значение (или я не нашёл). Было бы правильным при удалении параметра на самом деле не удалять его (что может привести к неработоспособности скрипта), а вернуть умолчательное значение. Можно, конечно, его вести снова, но надо же помнить имя! Т.е., если случайно удалили и lua не знаю, то до свидания любимы скрипт...
На самом деле я не проверял, возможно, для скрипта значение для удалённого параметра будет браться из текста. Но это не исправляет того факта, что поменять его из ScriptsBrowser-а будет невозможно, пока не заведёшь снова. Надо бы сделать "сброс" (пусть для всех параметров)...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

'Редактор' сейчас только для оперативных изменений.
Перезагрузка фара или скриптов сбрасывают.

Постоянные же изменения надо сохранять в файле.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Переход к папкам по щелчку на заголовке панели

Post by buniak_a_h »

HaRT wrote: Wed 02 Oct, 2019 23:59 Ну я же написал: оно не для того, чтобы редактировать, а наоборот, для того, чтобы каждый раз при обновлении НЕ редактировать. Ну прочитайте же про cfgscript в шапке темы про ScriptBrowser.
Я на самом деле надеялся, что при выходе из редактора актуальные значения запоминаются в базе (как mf.mSave). Но я всё равно не понял. В описании cfgscript описан файл с настройками. Так что, его надо ручками править? Некузяво как-то...
Ладо, будет время - разъясните мне, бестолковому, как поменять такую настройку так, чтоб сам файл макроса не менялся. Не будет - не страшно. Меня и "3" устраивает...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

buniak_a_h wrote: Thu 03 Oct, 2019 00:32 В описании cfgscript описан файл с настройками. Так что, его надо ручками править?
В комплекте есть вспомогательный макрос для вставки шаблона в файл scriptscfg, но это действительно не слишком удобно.
Более удобная функция так и осталась в ScriptsBrowser нереализованной:

По замыслу, нажатие Shift+F4 должно открывать в редакторе файл настроек scriptscfg в нужном месте, если настройки нужного скрипта там уже присутствуют.
Если нет - то вставлять шаблон в конец файла.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

Вылезла какая-то ошибка:
Нажимаю RAlt;
Ввожу AltS (ищу макрос, повешенный на AltShift…). Не находит (возможно, и правильно).
Ну ладно, жму Esc.
Получаю:

Code: Select all

╔════════════════════════════════════════════════════════════ Error ═════════════════════════════════════════════════════════════╗
║ C:\Program Files\Far Manager\Plugins\LuaMacro\LuaMacro.dll:                                                                    ║
║ ...Profile\Macros\scripts\ScriptsBrowser\scriptsbrowser.lua:661: attempt to index local 'item' (a nil value)                   ║
║ stack traceback:                                                                                                               ║
║    ...Profile\Macros\scripts\ScriptsBrowser\scriptsbrowser.lua:661: in function 'showList'                                     ║
║    ...Profile\Macros\scripts\ScriptsBrowser\scriptsbrowser.lua:715: in function 'action'                                       ║
║    C:\Program Files\Far Manager\Plugins\LuaMacro\LuaMacro.lua:479: in function <C:\Program Files\Far Manager\Plugins\LuaMacro\ ║
║ LuaMacro.lua:428>                                                                                                              ║
╟────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                                                             { OK }                                                             ║
╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Скрипт становится неработоспособным до перезагрузки макросов (исчезает из меню плагинов)
FAR 5579 x64
Что-то раньше я этого не замечал… :-(
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

Да, было такое, у себя давно пофиксил
Attachments
ScriptsBrowser.lua
0.2.1
(24.88 KiB) Downloaded 72 times
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

John Doe wrote: Thu 16 Apr, 2020 16:41 Да, было такое, у себя давно пофиксил
Возможно, те ошибочки, что я у себя тоже исправил, Вы давно пофиксили. Но всё же высылаю свой вариант.
Что вылезло:
--
Допустим, в строке files (в анализируемом скрипте) указано
files = [[%FARPROFILE%\macros\modules\BAX\BaxUtils.lua,%FARPROFILE%\macros\modules\BAX\TmpPanelUtils.lua,%FARPROFILE%\macros\modules\BAX\GetMsg.lua,CopySelectedToTempPanel*.lng]];
По этой строке вылезло 2 ошибки:
1. Из-за того, что начальное значение переменной pos = 0, последняя буква (a) первого файла вылезает, как будто это - отдельный файл (с именем a);
2. Замена звёздочки в последнем имени на имя файла-скрипта приводит к дикому имени CopySelectedToTempPanelCopySelectedToTempPanel.lng (имя файла повторяется). Возможно, я неправильно использую эту фичу
--
Вылетало у меня в строке 695:
local Items = scripts and prepItems(scripts,nil,sortName,root) or {}
Как выяснилось, sortname иногда == nil
----
Исправленный скрипт во вложении. Мои изменения помечены комментарием -- BAX и дата.
ScriptsBrowser.lua
(25.11 KiB) Downloaded 45 times
--
P/S. Замените, пожалуйста, скрипт в первом сообщении темы, а то найти версию 0.2.1 оказалось очень непросто.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

P/S или хотя бы добавьте ссылку на сообщение с исправленным скрипом
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

Исправления посмотрю, спасибо.
buniak_a_h wrote: Mon 11 Jan, 2021 03:35 Замена звёздочки в последнем имени на имя файла-скрипта приводит к дикому имени CopySelectedToTempPanelCopySelectedToTempPanel.lng (имя файла повторяется). Возможно, я неправильно использую эту фичу
Звёздочка действительно меняется на имя, как и заявлено в описании. Вам вероятно требовалось что-то типа *_ru.lng;*_en.lng.
Т.е. в этом исправлении смысла не вижу:

Code: Select all

    if name:match("^%*%.") then -- BAX, 11.01.2021
     name = name:gsub("*",fname,1) --expand mask
    end                         -- BAX, 11.01.2021
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

John Doe wrote: Mon 11 Jan, 2021 12:34 Вам вероятно требовалось что-то типа *_ru.lng;*_en.lng.
Это получается ограничение (только ru и en). А как у меня написано было (CopySelectedToTempPanel*.lng) - на язык ограничений не накладывает. Зато накладывает ограничение на начало имени. Поэтому хотелось бы, чтоб можно было указать так:
%n*.lng
Вместо %n чтоб подставилось FileName без расширения. А при AltF4 - чтоб ещё одно меню вылезало со списком файлов, соответствующих маске. Мысль только что пришла в голову, наверно, замакросю.
John Doe wrote: Mon 11 Jan, 2021 12:34 меняется на имя, как и заявлено в описании
Вот как раз с этим у меня проблема. Не нашёл описания. Ориентировался только на комментарии примера, что в первом сообщении под спойлером. Где можно посмотреть описание?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

buniak_a_h wrote: Mon 11 Jan, 2021 14:34 Поэтому хотелось бы, чтоб можно было указать так:
%n*.lng
Вместо %n чтоб подставилось FileName без расширения.
Маски не предусмотрены идеологически, предполагается что файлы перечислены поимённо.
(Об масках в своё время думал, и решил что сомнительное удобство тут не окупает потенциальные неоднозначности).
buniak_a_h wrote: Mon 11 Jan, 2021 14:34 Не нашёл описания.
Всё в шапке, открывайте спойлеры.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

buniak_a_h wrote: Mon 11 Jan, 2021 03:35 1. Из-за того, что начальное значение переменной pos = 0, последняя буква (a) первого файла вылезает, как будто это - отдельный файл (с именем a);
Тут действительно баг, и не только в скрипте, но и в библиотеке: viewtopic.php?p=163934#p163934
buniak_a_h wrote: Mon 11 Jan, 2021 03:35 Как выяснилось, sortname иногда == nil
У меня не падает с nil.
Научите как воспроизвести.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

John Doe wrote: Mon 11 Jan, 2021 15:00 Всё в шапке, открывайте спойлеры.
Спасибо. Не заметил что под спойлером есть ещё спойлер.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

John Doe wrote: Mon 11 Jan, 2021 15:26
buniak_a_h wrote: Mon 11 Jan, 2021 03:35 Как выяснилось, sortname иногда == nil
У меня не падает с nil.
Научите как воспроизвести.
Было при первом вызове браузера . Давно не повторялось (т.к. исправил), поэтому подробностей не помню. Просто знаю, что я достаточно ленив, чтоб не делать лишнее. А раз сделал, значит была нужда.
P/S. Возможно (теперь уже не помню), сделано было чтобы при первом показе сортировалось (была определённость). А то найти свой скрипт в случайном списке трудно.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by John Doe »

buniak_a_h wrote: Mon 11 Jan, 2021 15:32 Давно не повторялось (т.к. исправил)
Всё бы ничего, но нет уверенности что исправление правильно.
Настройки между запусками фара не сохраняются, и легко убедиться что ничего не падает.
buniak_a_h wrote: Mon 11 Jan, 2021 15:32 Возможно (теперь уже не помню), сделано было чтобы при первом показе сортировалось (была определённость)
Изначально по индексу сортируется, и честно говоря сам не помню почему. Сделаю "по имени" (но в другом месте).
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

ScriptsBrowser — управление скриптами [экспериментально]

Post by buniak_a_h »

John Doe wrote: Mon 11 Jan, 2021 15:42 Сделаю "по имени" (но в другом месте)
Вам виднее. Спасибо. Если (как говорил мой начальник) есть много лишнего времени, то было бы кузяво сделать настройку. Начальная сортировка по автору тоже была бы полезна. С запоминанием позиционирования. А если браузер открывается из редактора, в редакторе открыт скрипт и он есть в списке - позиционироваться сразу на нём :-) Но это - если много лишнего времени.
Post Reply

Return to “Обсуждение макросов”