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

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

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

Postby John Doe » Tue 09 Aug, 2016 16:10

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

Но раз каждый скрипт в любом случае содержит какую-то метаинформацию, то почему бы не заполнять её стандартизировано?
В результате мы получим возможность управлять скриптами централизованно, и реализовать разные интересные возможности, такие как изложенные ранее: John Doe @ Скрипты: система их названий и описаний

Представляю экспериментальную реализацию некоторых идей:
Основные понятия:
  • Скрипт — это 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 41 times
Last edited by John Doe on Fri 26 Aug, 2016 16:49, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Sat 27 Aug, 2016 10:32

Latest post of the previous page:

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

Code: Select all

local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info

Code: [Select all] [Expand/Collapse] [Download] (InsertInfo.lua)
  1. local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
  2. local nfo = Info {...,
  3.   name        = "Insert script Info";
  4.   description = "regscript helper macro";
  5.   version     = "0.2.1"; --http://semver.org/lang/ru/
  6.   author      = "jd",
  7.   id          = "76F75AE2-B33C-432F-8D46-93E897D06AB1";
  8.   parent_id   = "99086D25-80D3-4632-81F1-FC205C487C1B";
  9.   options     = {author = ""};
  10. }
  11. if not nfo then return end
  12. local O = nfo.options
  13.  
  14. local templateInfo = [=[
  15. local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
  16. local nfo = Info {_filename or ...,
  17.   name        = "";
  18.   description = "";
  19.   version     = ""; --http://semver.org/lang/ru/
  20.   author      = "%s";
  21.   url         = "";
  22.   id          = "%s";
  23.   --parent_id   = "";
  24.   --minfarversion = {3,0,0,4744,0};
  25.   --files       = "*.cfg;*.ru.lng";
  26.   --config      = function(nfo,name) end;
  27.   --help        = function(nfo,name) end;
  28.   --execute     = function(nfo,name) end;
  29.  
  30.   --disabled    = false;
  31.   --options     = {};
  32. }
  33. if not nfo then return end
  34. --local O = nfo.options
  35. ]=]
  36.  
  37. Macro { description="Insert script Info template";
  38.   area="Editor"; key="CtrlF11"; filemask="*.lua";
  39.   id="6A170EA8-CDF3-4F9B-99F0-73DE7D74D861";
  40.   action=function() mf.print(templateInfo:format(O.author or "",win.Uuid(win.Uuid()):upper()))end
  41. }
  42.  
  43. local templateConfig = [=[
  44. Config {
  45.   id="";
  46.   --disabled=true;
  47.   options={
  48.     --
  49.   };
  50. }
  51. ]=]
  52.  
  53. Macro { description="Insert script Config template";
  54.   area="Editor"; key="CtrlF11"; filemask="scriptscfg;scriptscfg.sample";
  55.   id="791BEA87-3727-41BF-B63D-70B0E236D4D7";
  56.   action=function()
  57.     mf.print(templateConfig)
  58.   end;
  59. }

Shmuel
Posts: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

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

Postby Shmuel » Mon 29 Aug, 2016 00:46

HaRT wrote:Source of the post коль скоро речь идёт и об управлении пакетами, не пора ли смотреть в сторону NuGet?
Можно также посмотреть и в сторону LuaRocks.

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

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

Postby NightRoman » Tue 30 Aug, 2016 11:45

HaRT wrote:
John Doe wrote:Source of the post вы поправьте что не так
Source of the post У меня опыта работы с 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 HaRT on Tue 30 Aug, 2016 11:57, edited 2 times in total.
Reason: Исправлена цитата

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Tue 30 Aug, 2016 11:51

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

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

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

Postby NightRoman » Tue 30 Aug, 2016 11:58

а что собой представляет база установленных пакетов?

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

Будет ли всё работать портабельно, с неустановленными копиями фара?

Думаю, да. Надо только четко скрипту указать, куда ставить. Но я не уверен, что точно понимаю вопрос.

Если чего не хватает, я не против скрипт доработать.
Параметры команд скрипта описаны тут: https://github.com/nightroman/FarNet/bl ... ckage.psm1
Last edited by NightRoman on Tue 30 Aug, 2016 11:59, edited 1 time in total.

User avatar
HaRT
Moderator
Posts: 7918
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 65 times
Been thanked: 94 times

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

Postby HaRT » Tue 30 Aug, 2016 12:04

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

Если вместо ответов или в дополнение к ним дадите ссылки, где эти вопросы освещены более подробно, буду признателен.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

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

Postby NightRoman » Tue 30 Aug, 2016 12:18

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

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

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

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

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

Технологии уже много лет. Я не могу все рассказать тут. И я даже не спец. Google, мануалы по NuGet.

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Tue 30 Aug, 2016 12:23

NightRoman wrote:Source of the post Если чего не хватает, я не против скрипт доработать.

Получается ваш скрипт это альтернатива nuget.exe

NightRoman wrote:Source of the post Базы как таковой нет. Но для каждого пакета в директорию установки пишется инфо-файл, где записано, что и какие файлы поставлены.
Это касается только вашего скрипта? Или другие клиенты работают так же?

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

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

Postby NightRoman » Tue 30 Aug, 2016 12:32

Получается ваш скрипт это альтернатива nuget.exe

Для скачки и установки - да, 100%.
(но есть специфика Фара, ожидается определенная файловая структура)

Это касается только вашего скрипта? Или другие клиенты работают так же?

Да, это касается моего скрипта. Другие клиенты могут делать, что хотят.
Last edited by NightRoman on Tue 30 Aug, 2016 12:39, edited 1 time in total.

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

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

Postby NightRoman » Tue 30 Aug, 2016 13:38

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

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

Или доработать скрипт для специальной папки tools\FarProfile и обрабатывать ее в скрипте особым образом, копируя/обновляя в %FARPROFILE%. Но тут не все гладко идеологически. Эта папка может и меняться в зависимости от настроек Фара.
Last edited by NightRoman on Tue 30 Aug, 2016 13:50, edited 1 time in total.

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Wed 12 Oct, 2016 10:57

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

Вот. Адрес можно задавать и таблицей, и строкой.

Заодно возникла пара вопросов в связи с добавлением в скрипт nfo.
1. А что, minfarversion нельзя задавать строкой? Почему?
2. Задал minfarversion = {3,0,0,4000}. Перезагрузил макросы, запустил ScriptBrowser, DBEdit подсвечен серым. Встаю на него, нажимаю F3, получаю .
Что, пропускать часть позиций нельзя и надо обязательно указывать все пять чисел? Даже если так, всё равно некрасиво - надо перехватывать такие ситуации.

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Wed 12 Oct, 2016 20:36

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

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

Code: Select all

minfarversion │ 3.0.4743

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Wed 12 Oct, 2016 21:46

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

По факту в нашем случае достаточно и одной (билда), и врядли это когда-то изменится

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Fri 14 Oct, 2016 07:48

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

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

Code: Select all

minfarversion │ 3.0.4743

Думаю, в случае версии Far строка должна соответствовать принятому нумерованию версии Far. Оно уже давно устоялось и вряд ли когда изменится.

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

А зачем там пятая, если по факту в Far она не используется в принципе? Оставить для совместимости, если надо, только вставить, где нужно, что-то вроде ver[5] = ver[5] or 0.
John Doe wrote:По факту в нашем случае достаточно и одной (билда), и врядли это когда-то изменится

При переходе с Far1 на Far2 счётчик билдов сбросился, а по макросам совместимость осталась. Так что, думаю, на всякий случай, все четыре лучше бы оставить, и, заодно, сверять по всем позициям. Да и смотрится красивее и понятнее, когда есть все четыре числа.

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Fri 14 Oct, 2016 08:33

IgorZ wrote:Source of the post версию скрипта можно задавать строкой, а требуемую версию Far - нет. Разные подходы вызывают недоумение.
Разные подходы тут неизбежны, поскольку semver невозможно в точности сопоставить VersionInfo, хотя бы по причине структурных отличий (куда накладываются ещё и исторические особенности использования в фаре).

IgorZ wrote:Source of the post и, заодно, сверять по всем позициям.
Думал об этом, но счёл непринципиальным, ведь элементарно изменить в любой момент.

IgorZ wrote:Source of the post Думаю, в случае версии Far строка должна соответствовать принятому нумерованию версии Far. Оно уже давно устоялось и вряд ли когда изменится.
Я как раз обратил внимание, что в фаре "принято" использовать 3 компонента, а не 4.
Но только для отображения, а в апи у нас да, честный VersionInfo.

Хотите указывать VersionInfo строкой? Если для вас это принципиально, то я не буду возражать.
И насчёт того чтобы компонент Stage принимать по умолчанию за 0 тоже.
Хотя и не вижу от всего этого никакой особой выгоды, ведь всё это вставляется шаблоном.
Делать?

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Mon 17 Oct, 2016 12:48

John Doe wrote:
IgorZ wrote:Source of the post версию скрипта можно задавать строкой, а требуемую версию Far - нет. Разные подходы вызывают недоумение.
Разные подходы тут неизбежны, поскольку semver невозможно в точности сопоставить VersionInfo, хотя бы по причине структурных отличий (куда накладываются ещё и исторические особенности использования в фаре).

Ну, не знаю. Мне глаз царапнуло, я и задал вопрос.
John Doe wrote:
IgorZ wrote:Source of the post и, заодно, сверять по всем позициям.
Думал об этом, но счёл непринципиальным, ведь элементарно изменить в любой момент.

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

Хотите указывать VersionInfo строкой? Если для вас это принципиально, то я не буду возражать.
И насчёт того чтобы компонент Stage принимать по умолчанию за 0 тоже.
Хотя и не вижу от всего этого никакой особой выгоды, ведь всё это вставляется шаблоном.
Делать?

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

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Tue 25 Oct, 2016 13:18

IgorZ wrote:Source of the post Вот. Адрес можно задавать и таблицей, и строкой.
В спецификации пакета достаточно будет строки, имхо.

Но есть другой вопрос: как лучше поступить с LOCAL/GLOBAL?
В моей практике настройки лежат либо только в GLOBAL, либо в обоих базах (в ключе с тем же путём).

Если же делать совсем универсально, то надо указывать полный перечень ключей, с указанием LOCAL/GLOBAL, и этих ключей может быть не 2, а сколько угодно.
Как по мне, то это будет перебор.

Проще всего LOCAL/GLOBAL в спецификации не указывать, что я и предлагаю.


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

Who is online

Users browsing this forum: No registered users and 3 guests