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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 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 295 times
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

John Doe wrote: Установка скриптов из пакета/дистрибутива. На основании Info, плюс допустима кастомная функция.
Чтобы получить информацию о скриптах пакета, их тоже надо загрузить.
И стандартный способ тут не годится, т.к. произойдёт нежелательная "регистрация".
Предполагаю выйти из положения несколько модифицировав шаблон.
Будет так:

Code: Select all

local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
  1. local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
  2.  
  3. local nfo = Info {...,
  4.  
  5.   name        = "Insert script Info";
  6.  
  7.   description = "regscript helper macro";
  8.  
  9.   version     = "0.2.1"; --http://semver.org/lang/ru/
  10.  
  11.   author      = "jd",
  12.  
  13.   id          = "76F75AE2-B33C-432F-8D46-93E897D06AB1";
  14.  
  15.   parent_id   = "99086D25-80D3-4632-81F1-FC205C487C1B";
  16.  
  17.   options     = {author = ""};
  18.  
  19. }
  20.  
  21. if not nfo then return end
  22.  
  23. local O = nfo.options
  24.  
  25.  
  26.  
  27. local templateInfo = [=[
  28.  
  29. local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
  30.  
  31. local nfo = Info {_filename or ...,
  32.  
  33.   name        = "";
  34.  
  35.   description = "";
  36.  
  37.   version     = ""; --http://semver.org/lang/ru/
  38.  
  39.   author      = "%s";
  40.  
  41.   url         = "";
  42.  
  43.   id          = "%s";
  44.  
  45.   --parent_id   = "";
  46.  
  47.   --minfarversion = {3,0,0,4744,0};
  48.  
  49.   --files       = "*.cfg;*.ru.lng";
  50.  
  51.   --config      = function(nfo,name) end;
  52.  
  53.   --help        = function(nfo,name) end;
  54.  
  55.   --execute     = function(nfo,name) end;
  56.  
  57.  
  58.  
  59.   --disabled    = false;
  60.  
  61.   --options     = {};
  62.  
  63. }
  64.  
  65. if not nfo then return end
  66.  
  67. --local O = nfo.options
  68.  
  69. ]=]
  70.  
  71.  
  72.  
  73. Macro { description="Insert script Info template";
  74.  
  75.   area="Editor"; key="CtrlF11"; filemask="*.lua";
  76.  
  77.   id="6A170EA8-CDF3-4F9B-99F0-73DE7D74D861";
  78.  
  79.   action=function() mf.print(templateInfo:format(O.author or "",win.Uuid(win.Uuid()):upper()))end
  80.  
  81. }
  82.  
  83.  
  84.  
  85. local templateConfig = [=[
  86.  
  87. Config {
  88.  
  89.   id="";
  90.  
  91.   --disabled=true;
  92.  
  93.   options={
  94.  
  95.     --
  96.  
  97.   };
  98.  
  99. }
  100.  
  101. ]=]
  102.  
  103.  
  104.  
  105. Macro { description="Insert script Config template";
  106.  
  107.   area="Editor"; key="CtrlF11"; filemask="scriptscfg;scriptscfg.sample";
  108.  
  109.   id="791BEA87-3727-41BF-B63D-70B0E236D4D7";
  110.  
  111.   action=function()
  112.  
  113.     mf.print(templateConfig)
  114.  
  115.   end;
  116.  
  117. }
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

HaRT wrote: коль скоро речь идёт и об управлении пакетами, не пора ли смотреть в сторону NuGet?
Можно также посмотреть и в сторону LuaRocks.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

HaRT wrote:
John Doe wrote: вы поправьте что не так
У меня опыта работы с NuGet тоже нет. Просто я читал, что Майкрософт его продвигает как менеджер пакетов, и многие хорошие инструменты (особенно ориентированные на .NET) его поддерживают. Вот бы NightRoman поделился своим опытом…
За темой не следил. Если есть конкретные вопросы, пожалуйста.

В FarNet реализовано авто установление и обновление NuGet пакетов. Вернее, для FarNet. Сам он не нужен и пакеты могут содержать что угодно в папках tools\FarHome, FarHome.x64, FarHome.x86. Что там есть, то и будет установлено и будет обновляться корректно.

Описано тут: https://github.com/nightroman/FarNet/bl ... Net.ru.txt
Требуется PowerShell, но вручную можно тоже все проделывать, кроме авто-обновления.
Last edited by NightRoman on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Исправлена цитата
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

NightRoman, вот вопросы
John Doe wrote: Вопрос: а что собой представляет база установленных пакетов?
Она общая для системы, или хранится локально?
Будет ли всё работать портабельно, с неустановленными копиями фара?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

а что собой представляет база установленных пакетов?
Базы как таковой нет. Но для каждого пакета в директорию установки пишется инфо-файл, где записано, что и какие файлы поставлены. То есть инфу собрать можно, если надо.
Будет ли всё работать портабельно, с неустановленными копиями фара?
Думаю, да. Надо только четко скрипту указать, куда ставить. Но я не уверен, что точно понимаю вопрос.

Если чего не хватает, я не против скрипт доработать.
Параметры команд скрипта описаны тут: https://github.com/nightroman/FarNet/bl ... ckage.psm1
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

NightRoman wrote: Если есть конкретные вопросы, пожалуйста.
Вот мои вопросы:
* Как в NuGet поддержаны зависимости между пакетами?
* Есть ли автоматическое выкачивание и установка пакета вместе со всеми его зависимостями?
* Есть ли удаление вместе с зависимостями, которыми больше никакой пакет не пользуется?
* Как обстоят дела с одновременной установкой разных версий одного пакета/продукта? (В терминологии могу ошибаться.)

Если вместо ответов или в дополнение к ним дадите ссылки, где эти вопросы освещены более подробно, буду признателен.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Это много вопросов!

* Как в NuGet поддержаны зависимости между пакетами?
Поддержаны, прописано в нужных файлах описания пакета.

* Есть ли автоматическое выкачивание и установка пакета вместе со всеми его зависимостями?
У меня в скрипте для Фара нет. Не надо было.
А так зависит от клиента (мой скрипт - пример клиента). NuGet.exe не единственный (и он не обязателен, пример - мой скрипт). Еще есть paket.exe, более продвинутый в некоторых смыслах.

* Есть ли удаление вместе с зависимостями, которыми больше никакой пакет не пользуется?
Сомневаюсь. Это неоднозначная операция.

* Как обстоят дела с одновременной установкой разных версий одного пакета/продукта? (В терминологии могу ошибаться.)
Ответ зависит от многих неизвестных. Что-то можно, что-то нет.

Технологии уже много лет. Я не могу все рассказать тут. И я даже не спец. Google, мануалы по NuGet.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

NightRoman wrote: Если чего не хватает, я не против скрипт доработать.
Получается ваш скрипт это альтернатива nuget.exe
NightRoman wrote: Базы как таковой нет. Но для каждого пакета в директорию установки пишется инфо-файл, где записано, что и какие файлы поставлены.
Это касается только вашего скрипта? Или другие клиенты работают так же?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Получается ваш скрипт это альтернатива nuget.exe
Для скачки и установки - да, 100%.
(но есть специфика Фара, ожидается определенная файловая структура)
Это касается только вашего скрипта? Или другие клиенты работают так же?
Да, это касается моего скрипта. Другие клиенты могут делать, что хотят.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Еще добавлю. Скрипт годится для любых плагинов или чего угодно, что ставится в папку Фара (или указанную). Задача плагинописателя просто упаковать по определенной схеме и выложить на NuGet.

Для макросов можно доработать, если кто-то будет пользоваться. Их ведь надо в другую папку ставить, как я понимаю. Можно и так использовать, конечно, но папку макросов явно указывать и паковать с прицелом на это.

Или доработать скрипт для специальной папки tools\FarProfile и обрабатывать ее в скрипте особым образом, копируя/обновляя в %FARPROFILE%. Но тут не все гладко идеологически. Эта папка может и меняться в зависимости от настроек Фара.
Last edited by NightRoman on Tue 30 Aug, 2016 13:50, edited 1 time in total.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

На работе перекинули на другой фронт, пришлось на ходу учиться просить и пиэльэскюэлить. Вот, чуть освободился и сделал то, о чём говорили когда-то.
John Doe wrote:
IgorZ wrote: Имеет ли смысл вводить поле - адрес данных скрипта в БД LuaMacro? Просто, если оно есть, то имеет смысл сделать переход по ссылке - скажем, с помощью DBEdit. Он, правда, пока не вызывается как модуль, но это нетрудно добавить.
Хорошая мысль.
Поле можно назвать dbkey.
А как будем передавать адрес? строкой? таблицей?
Вот. Адрес можно задавать и таблицей, и строкой.

Заодно возникла пара вопросов в связи с добавлением в скрипт nfo.
1. А что, minfarversion нельзя задавать строкой? Почему?
2. Задал minfarversion = {3,0,0,4000}. Перезагрузил макросы, запустил ScriptBrowser, DBEdit подсвечен серым. Встаю на него, нажимаю F3, получаю .
Что, пропускать часть позиций нельзя и надо обязательно указывать все пять чисел? Даже если так, всё равно некрасиво - надо перехватывать такие ситуации.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

IgorZ wrote: 1. А что, minfarversion нельзя задавать строкой? Почему?
Соответствующие функции работают с таблицей, отсюда и таблица. Синтаксически таблица не сложнее строки, но строку пришлось бы всё равно конвертировать в таблицу, для обеспечения возможности сравнения версий.
Впрочем, если подумать, не очень сильный аргумент..
Если у вас есть доводы в пользу строки, то почему бы и нет.

Но меня тут смущает один момент: исторически в версии фара не используется компонент Revision, что можно увидеть например в заголовке окна фара.
Поэтому не очень понятно, какой должна быть строка.
В текущей неопубликованной версии ScriptManager minfarversion в окне информации отображается так же без Revision, например

Code: Select all

minfarversion │ 3.0.4743
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

IgorZ wrote: Что, пропускать часть позиций нельзя и надо обязательно указывать все пять чисел? Даже если так, всё равно некрасиво - надо перехватывать такие ситуации.
Согласен, падать не должно.
Насчёт 5 или 4 чисел даже не задумывался, не вручную заполняю а шаблоном.
Принимать и 4?

По факту в нашем случае достаточно и одной (билда), и врядли это когда-то изменится
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

John Doe wrote:
IgorZ wrote: 1. А что, minfarversion нельзя задавать строкой? Почему?
Соответствующии функции работают с таблицей, отсюда и таблица. Синтаксически таблица не сложнее строки, но строку пришлось бы всё равно конвертировать в таблицу, для обеспечения возможности сравнения версий.
Впрочем, если подумать, не очень сильный аргумент..
Если у вас есть доводы в пользу строки, то почему бы и нет.
Соображение одно: версию скрипта можно задавать строкой, а требуемую версию Far - нет. Разные подходы вызывают недоумение. Однообразие было бы эстетически приятнее (кстати, я, вроде бы, ранее предлагал версию скрипта задавать таблицей - тоже вариант единообразия). Собственно, тоже, если подумать, не очень сильный аргумент..
John Doe wrote:Но меня тут смущает один момент: исторически в версии фара не используется компонент Revision, что можно увидеть например в заголовке окна фара.
Поэтому не очень понятно, какой должна быть строка.
В текущей неопубликованной версии ScriptManager minfarversion в окне информации отображается так же без Revision, например

Code: Select all

minfarversion │ 3.0.4743
Думаю, в случае версии Far строка должна соответствовать принятому нумерованию версии Far. Оно уже давно устоялось и вряд ли когда изменится.
John Doe wrote:
IgorZ wrote: Что, пропускать часть позиций нельзя и надо обязательно указывать все пять чисел? Даже если так, всё равно некрасиво - надо перехватывать такие ситуации.
Согласен, падать не должно.
Насчёт 5 или 4 чисел даже не задумывался, не вручную заполняю а шаблоном.
Принимать и 4?
А зачем там пятая, если по факту в Far она не используется в принципе? Оставить для совместимости, если надо, только вставить, где нужно, что-то вроде ver[5] = ver[5] or 0.
John Doe wrote:По факту в нашем случае достаточно и одной (билда), и врядли это когда-то изменится
При переходе с Far1 на Far2 счётчик билдов сбросился, а по макросам совместимость осталась. Так что, думаю, на всякий случай, все четыре лучше бы оставить, и, заодно, сверять по всем позициям. Да и смотрится красивее и понятнее, когда есть все четыре числа.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

IgorZ wrote: версию скрипта можно задавать строкой, а требуемую версию Far - нет. Разные подходы вызывают недоумение.
Разные подходы тут неизбежны, поскольку semver невозможно в точности сопоставить VersionInfo, хотя бы по причине структурных отличий (куда накладываются ещё и исторические особенности использования в фаре).
IgorZ wrote: и, заодно, сверять по всем позициям.
Думал об этом, но счёл непринципиальным, ведь элементарно изменить в любой момент.
IgorZ wrote: Думаю, в случае версии Far строка должна соответствовать принятому нумерованию версии Far. Оно уже давно устоялось и вряд ли когда изменится.
Я как раз обратил внимание, что в фаре "принято" использовать 3 компонента, а не 4.
Но только для отображения, а в апи у нас да, честный VersionInfo.

Хотите указывать VersionInfo строкой? Если для вас это принципиально, то я не буду возражать.
И насчёт того чтобы компонент Stage принимать по умолчанию за 0 тоже.
Хотя и не вижу от всего этого никакой особой выгоды, ведь всё это вставляется шаблоном.
Делать?
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

John Doe wrote:
IgorZ wrote: версию скрипта можно задавать строкой, а требуемую версию Far - нет. Разные подходы вызывают недоумение.
Разные подходы тут неизбежны, поскольку semver невозможно в точности сопоставить VersionInfo, хотя бы по причине структурных отличий (куда накладываются ещё и исторические особенности использования в фаре).
Ну, не знаю. Мне глаз царапнуло, я и задал вопрос.
John Doe wrote:
IgorZ wrote: и, заодно, сверять по всем позициям.
Думал об этом, но счёл непринципиальным, ведь элементарно изменить в любой момент.
Так текущий момент ничем не отличается в этом смысле от любого другого.
Возможно, это просто разные привычки. Я когда-то довольно много писал на ассемблере (в том числе игры), так что привычка заранее предусматривать и закрывать возможные дыры осталась с тех времён.
John Doe wrote:
IgorZ wrote: Думаю, в случае версии Far строка должна соответствовать принятому нумерованию версии Far. Оно уже давно устоялось и вряд ли когда изменится.
Я как раз обратил внимание, что в фаре "принято" использовать 3 компонента, а не 4.
Но только для отображения, а в апи у нас да, честный VersionInfo.

Хотите указывать VersionInfo строкой? Если для вас это принципиально, то я не буду возражать.
И насчёт того чтобы компонент Stage принимать по умолчанию за 0 тоже.
Хотя и не вижу от всего этого никакой особой выгоды, ведь всё это вставляется шаблоном.
Делать?
Непринципиально. Более того, версия скрипта, на мой субъективный взгляд, тоже красивее смотрелась бы в виде таблицы. А вот отсутствующие элементы таблицы принимать за 0 было бы, на мой взгляд, разумно.
P. S. Лично я шаблоном при вставке не пользовался. Возможно, из-за того, что вставка nfo для меня пока ещё больше эксперимент, а не вошла в привычку.
Post Reply

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