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
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Latest post of the previous page:

John Doe, коль скоро речь идёт и об управлении пакетами, не пора ли смотреть в сторону NuGet?
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

Не пользовался, давайте посмотрим.
(Я сильно не копал, поэтому попробую дофантазировать, а вы поправьте что не так)

Определённо решает вопрос размещения пакетов, и их обновления.
Клиент (nuget.exe) ~ 4 MB, вроде не проблема.
Требует какой-то там дотнет, но на современных ОС тоже не проблема (на XP сходу не запустился).

Вопрос: а что собой представляет база установленных пакетов?
Она общая для системы, или хранится локально?
Будет ли всё работать портабельно, с неустановленными копиями фара?

Из практики использования пользователями я вижу что файлы свободно переименовываются, папки переносятся, и в nuget эту ситуацию никак не обработать.
Т.е. всё нормально, если каждый пакет устанавливается в собственную папку, и создатели пакетов согласовывают их уникальность.
Или можно использовать nuget как хранилище и транспорт, а если хочется большей гибкости, то установку и прочее придётся пилить самостоятельно.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

John Doe wrote: вы поправьте что не так
У меня опыта работы с NuGet тоже нет. Просто я читал, что Майкрософт его продвигает как менеджер пакетов, и многие хорошие инструменты (особенно ориентированные на .NET) его поддерживают. Вот бы NightRoman поделился своим опытом…
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

IgorZ wrote: С одной стороны, автору будет лень писать несколько знаков дополнительно на каждый файл, с другой, ему не лень проделать работу по изучению документации, вставке nfo и, для уже имеющихся проектов, переименованию файлов и соответствующей переделке кода программы.
В конечном счёте всё упирается для чего всё это автору. На мой взгляд установка/обновление/автообновление это наиболее весомые причины.
А что касается заполнения полей.. Ну необязательны они, зачем кого-то заставлять.
Вот посмотрит автор как выглядит его скрипт в браузере, и может наведёт это его на какие-то мысли.
Возвращаясь к вопросу указания типа файла: если это нигде потом не используется, то для чего автору его заполнять? А если зачем-то нужно, значит он мотивирован, и заполнит как надо (или файл переименует).
IgorZ wrote: Файл языка или настроек с расширением .lua - не скрипт по смыслу.
Если они загружаются, то нет проблемы добавить туда Info из 2х строк.
Если нет, то тот же nfo может сейчас содержаться в родительском скрипте, или в специально выделенном файле (как вы и предлагали).
Я не вижу чтобы это противоречило главной идее.
Собственно, принципиальных возражений против того, чтобы изменить формат поля files у меня нет, просто пока необходимости не вижу.
IgorZ wrote: nfo довольно объёмен.
2 строки, ведь необязательно все поля заполнять.
IgorZ wrote: писать их в одном файле по штуке на каждый вспомогательный файл - явно лишне.
Я тоже так решил, потому и предусмотрел поле files.
Info предлагаю писать не на каждый файл, а только там, где реально потребуется.
IgorZ wrote: dbkey = {"GLOBAL","IgorZ","LuaManager"} выглядит не особо элегантно.
А мне нравится)
Но не буду упираться, решать вам, как автору редактора (к нему правда вопросы тоже есть, но это в другой теме)

По формату истории: посмотрим как она у нас будет на практике использоваться.
И стоит ли ей находиться в nfo, это ж громоздко. Может лучше в отдельном файле.
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 »

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: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 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: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

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

Code: Select all

minfarversion │ 3.0.4743
Post Reply

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