Редактор БД плагинов

Здесь выкладываются готовые к использованию макросы и скрипты.
IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

(бывший "Экспорт / импорт данных LuaMacro")
Описание:
Данный скрипт позволяет просматривать данные плагинов, хранящиеся в локальном и глобальном профилях Far-а, редактировать их, экспортировать в файл, а также импортировать из ранее экспортированного файла. По умолчанию предлагаются данные LuaMacro. После выбора другого плагина умолчание меняется до перезагрузки макросов. Формат файла импорта/экспорта текстовый, довольно простой - фактически, .ini-формат с некоторыми дополнительным ограничениями, так что, в принципе, легко редактируемый при надобности. Можно последовательно сохранить несколько разрозненных кусков данных в один файл путём дописывания в конец. Полученный файл можно импортировать в Far.


Скрипт добавляет себя в меню плагинов.



Требуемая версия Far 3.0.4324+.

Attachments
DBEdit.2.1.6.7z
(18.75 KiB) Downloaded 20 times
Last edited by IgorZ on Wed 22 Apr, 2020 05:57, edited 4 times in total.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

Latest post of the previous page:

Потерялось почему-то. Попробую снова запостить.
John Doe wrote:
IgorZ wrote: в макросах и menuitem-е тоже присутствует локализованный текст.
Функция локализации может предоставляться модулем.
В принципе, можно и так, но для этого надо всё переделывать. А для этого нужны объективные основания, перевешивающие аргументы за сохранение текущего состояния. На данный момент в качестве такого основания мне в голову приходит только "Шеф, всё пропало! Эта схема больше не работает/форматирует жёсткий диск при запуске/и т. п.". В конце концов, я больше не использую хаки вроде самостоятельного добавления своего модуля непосредственно в _G.package.loaded, всё делается по правилам.
John Doe wrote:
IgorZ wrote: а вот весь дистрибутив [...] в нынешней ситуации вполне переносим в любую удобную папку.
IgorZ wrote: 1. Только в нынешнем исполнении. Модуль из папки modules перемещать нельзя.
2. Есть опыт, когда пользователь переименовывал скрипты в соответствии со своими привычками (Bookmark*.* в Shell_Bookmark*.* и т. д.).
Дистрибутив состоит из двух частей: содержимое scripts можно переименовывать/переносить, а содержимое modules нет.
И как ни крути — этого не изменить, независимо от того, будет ли "заглушка", или честный модуль.
Есть разница: несколько (пять, в данном случае) фиксированных файлов в modules, или одна заглушка, большинству (по моим прикидкам) пользователей вообще совершенно не нужная и, соответственно, безболезненно ими при желании удаляемая. Я бы вообще не стал её вводить, если бы придумал конвенциональный способ обходиться без неё (или без редактирования _macroinit.lua в качестве альтернативы).

P. S. Есть, на мой взгляд, фундаментальный принцип: если пакет создан, чтобы предоставлять универсальный программный интерфейс любым программам, его надо делать модулем (библиотекой, в более общем смысле). semver - типичный тому пример. Если он предоставляет интерфейс пользователю - это скрипт/программа. С этой точки зрения и LuaManager, и DBEdit - скрипты с минимальным элементом модульности. Ведь, скажем, Word или Excel, хоть и имеют программный интерфейс, не являются библиотеками.

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

Редактор БД плагинов

Post by John Doe »

IgorZ wrote: Гляну. Может, сделаю.
dump из moonscript доступен из коробки, хотя бы его для начала, может остальное и не понадобится.
IgorZ wrote: В принципе, можно и так, но для этого надо всё переделывать. А для этого нужны объективные основания
Я рассматриваю данное обсуждение как теоретическое, и не призываю всё переделывать.
IgorZ wrote: В конце концов, я больше не использую хаки вроде самостоятельного добавления своего модуля непосредственно в _G.package.loaded, всё делается по правилам.
Но вы всё же модифицируете package.loaded, да и заглушка сама по себе хак.
IgorZ wrote: С этой точки зрения и LuaManager, и DBEdit - скрипты с минимальным элементом модульности.
Но элемент есть, и вопрос в том, как его правильнее реализовать. А точнее: надо ли что-то выдумывать своё, или достаточно использовать стандартный механизм lua.
Вариантов ведь много, например ваш модуль-заглушка может выглядеть так:

Code: Select all

local function dummy()
  far.Message("dbedit not loaded yet")
end

local m = {dbedit=dummy}

local mt = {}
function mt:__call(...)
  return self.dbedit(...)
end

return setmetatable(m,mt)
А в скрипте соответственно:

Code: Select all

local m = require "dbedit"
m.dbedit = ModProc        
По крайней мере это позволит обойтись без хаков.

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

Редактор БД плагинов

Post by John Doe »

P.S.
Отдельно хочу обратить внимание, что сейчас при попытке "раннего" вызова (например require"dbedit"() в _macroinit.lua) пользователь получит серию непонятных сообщений об ошибках.

В моём варианте (из поста выше) сообщение будет вразумительным.

Ну а полноценный модуль позволил бы вызывать утилиту сколь угодно "рано" без ограничений.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

John Doe wrote:
IgorZ wrote: В конце концов, я больше не использую хаки вроде самостоятельного добавления своего модуля непосредственно в _G.package.loaded, всё делается по правилам.
Но вы всё же модифицируете package.loaded, да и заглушка сама по себе хак.
??? Кажется, мы немного по-разному понимаем термин "хак". С моей точки зрения, нестандартное использование стандартных возможностей хаком не является. То есть, просверлить в ломе дырку, чтоб вешать его на гвоздик - хак, а подпереть ломом заваливающуюся стенку - не хак.
John Doe wrote:
IgorZ wrote: С этой точки зрения и LuaManager, и DBEdit - скрипты с минимальным элементом модульности.
Но элемент есть, и вопрос в том, как его правильнее реализовать. А точнее: надо ли что-то выдумывать своё, или достаточно использовать стандартный механизм lua.
Вариантов ведь много, например ваш модуль-заглушка может выглядеть так:

А в скрипте соответственно:


По крайней мере это позволит обойтись без хаков.
Спасибо за интересную идею. Не факт, что воспользуюсь, но сам подход я что-то до сих пор игнорировал.

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

Редактор БД плагинов

Post by John Doe »

IgorZ wrote: Кажется, мы немного по-разному понимаем термин "хак"
Хак понятие относительное.
То что я вижу у вас мне не нравится по двум причинам:

1. Это неоправданно сложно реализовано
2. И всё равно не работает
Например:
- добавляем в _macroinit.lua: _G.dbedit = require"dbedit"
- перезапускаем фар
- убеждаемся что dbedit==false

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

Версия 2.1.1 - При вызове модуля можно, указав неверное имя, вызвать меню выбора плагина. И отказаться от работы, нажав Esc. CtrlPgUp из меню выбора профиля вызывает меню выбора плагина. Модуль теперь возвращает таблицу функций (старый вариант вызова сохранён). Изменён способ регистрации модуля. Если при вызове модуля в режиме показа не указан явно тип БД (LOCAL/GLOBAL), то скрипт сам выбирает наилучший вариант. CtrlC/CtrlG/CtrlL переходят в тот же ключ в другой/глобальной/локальной базе. Рефакторинг. Мелкие правки.
John Doe wrote:Мелкие пожелания по скрипту:
...
Хотелось бы иметь возможность для просмотра таблиц использовать альтернативные средства.
(Встроенная функция кажется мне не очень наглядной)
...
Чуть улучшил встроенную функцию, кроме того, если есть inspect, то по Ctrl1 выводится им, а по Ctrl2 - с помощью moon.dump. По Ctrl3 активируется встроенная функция (она же по умолчанию). Это на пробу - что понравится больше. Мне самому не особо нравится ни inspect, ни dump.
Ещё доработал в очередной раз схему с модулем - теперь даже последний приведённый в теме LuaManager пример вроде бы отрабатывает корректно.

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

Редактор БД плагинов

Post by John Doe »

IgorZ wrote: Ещё доработал в очередной раз схему с модулем
Дело вкуса, но раз есть модуль, то я бы пошёл немного дальше, и совсем убрал бы загрузчик. Вот такая гибкость это лишнее (имхо, разумеется):
Необязательный модуль-заглушка для DBEdit. Если DBEdit не запрашивается как модуль при первичной загрузке скриптов, может быть удалён.

DV
Posts: 417
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 20 times
Been thanked: 14 times

Редактор БД плагинов

Post by DV »

Скачал версию макроса из "шапки" (DBEdit.2.1.1). Нужная вещь!
Что сразу бросается в глаза:
1. Нажатие Enter на поле со значением (например, число или строка) выбивает красное окно с ошибкой. Было бы логичнее при нажатии Enter на поле со значением делать то же, что по F4 (то есть редактирование).
2. Мне кажется, что работу с DBEdit (Alt-Shift-F2) логичнее было бы начинать со списка плагинов (который вызывается по Ctrl-S). Под "началом работы с DBEdit" я имею в виду первое окно, которое показывает макрос.
3. Поскольку вход в "папки" осуществляется нажатием Enter, было бы логично выходить из них на уровень вверх нажатием BackSpace.
Last edited by DV on Tue 17 Jan, 2017 21:33, edited 3 times in total.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

Версия 2.1.2 - Enter на значении открывает редактирование элемента. Backspace работает как Esc. Рефакторинг (в частности, изменено встроенное форматирование вывода значения переменных типа FST_DATA). Мелкие правки.
DV wrote:Скачал версию макроса из "шапки" (DBEdit.2.1.1). Нужная вещь!
Что сразу бросается в глаза:
1. Нажатие Enter на поле со значением (например, число или строка) выбивает красное окно с ошибкой. Было бы логичнее при нажатии Enter на поле со значением делать то же, что по F4 (то есть редактирование).
2. Мне кажется, что работу с DBEdit (Alt-Shift-F2) логичнее было бы начинать со списка плагинов (который вызывается по Ctrl-S). Под "началом работы с DBEdit" я имею в виду первое окно, которое показывает макрос.
3. Поскольку вход в "папки" осуществляется нажатием Enter, было бы логично выходить из них на уровень вверх нажатием BackSpace.
1, 3. Сделано (заодно исправлена ошибка).
2. С моей (и не только) точки зрения это в первую очереди редактор БД LuaMacro. Так что такая модификация добавила бы лишнее действие при почти каждом запуске скрипта. Если Вам так необходимо начинать именно с меню плагинов, можно использовать такой вот примитивный макрос:
  1. Macro{
  2.   area="Common"; description="Start DBEdit from plugin list"; priority=60;
  3.   key="AltShiftF2"; action=function() require"DBEdit"({plugin=""}) end;
  4. }
Он перекрывает стандартный вызов и делает именно то, что Вам нужно.

DV
Posts: 417
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 20 times
Been thanked: 14 times

Редактор БД плагинов

Post by DV »

IgorZ wrote:Версия 2.1.2
Спасибо!
Хотя пока что нажатие BackSpace работает не совсем так, как я ожидал. Я ожидал, что BackSpace будет полным аналогом Ctrl+PgUp, а на деле нажатие BackSpace даже не поднимается на уровень окна выбора базы данных, вместо этого закрывая диалог. (Кстати, я не разобрался из кода макроса, где же срабатывают обработчики нажатия BackSpace и Ctrl+PgUp).

DV
Posts: 417
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 20 times
Been thanked: 14 times

Редактор БД плагинов

Post by DV »

Макрос глобально (??) использует сочетания AltShiftF2 и AltShiftF3, что негативно сказывается на работе со временной панелью, использующей эти сочетания клавиш для своих целей.

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

Редактор БД плагинов

Post by John Doe »

В этом и некоторых других скриптах @IgorZ неоправданно используется глобальный far.FreeSettings() вместо закрытия конкретного экземпляра настроек его собственным методом.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

John Doe wrote:
Tue 30 Oct, 2018 10:48
В этом и некоторых других скриптах @IgorZ неоправданно используется глобальный far.FreeSettings() вместо закрытия конкретного экземпляра настроек его собственным методом.
Избавляюсь потихоньку, при выпуске новых версий. Просто не вижу необходимости выпуска новой версии ради подобного мелкого изменения (во всяком случае, если не станет известно, что использование far.FreeSettings() приводит к серьёзной ошибке).
 ! Message from: John Doe
Часть обсуждения отделена в тему LuaFAR: viewtopic.php?p=151225#p151225

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

John Doe wrote:
Fri 02 Nov, 2018 08:02
IgorZ wrote:
Fri 02 Nov, 2018 05:34
(во всяком случае, если не станет известно, что использование far.FreeSettings() приводит к серьёзной ошибке).
Возможно я плохо объяснил.
Другой скрипт (не ваш) создал настройки, которыми намерен пользоваться некоторое время.
В это время ваш скрипт берёт и закрывает настройки ВСЕХ скриптов.
Неаккуратненько.
То есть хэндлы глобальны? Не знал. Но, всё равно, неаккуратность, скорее, в другом скрипте. Тем не менее, с наличием проблемы согласен, постараюсь выделить время и выпустить новые версии ещё не правленных в этом плане скриптов.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Редактор БД плагинов

Post by IgorZ »

В связи с тем, что, как выяснилось, far.FreeSettings закрывает открытые настройки не для текущего скрипта, а глобально, выкладываю версию с исправлениями. Версия 2.1.3 -
  • Добавлен префикс dbshow:. Теперь dbshow: вызывает просмотр БД, а dbexp: всегда только экспортирует.
  • Для dbexp: можно задавать имя файла, куда экспортировать.
  • Исправлены ошибки в справке.
  • far.FreeSettings() заменён на <settings>:Free()
  • Прочий рефакторинг, делавшийся потихоньку.

DV
Posts: 417
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 20 times
Been thanked: 14 times

Редактор БД плагинов

Post by DV »

Спасибо за обновление!
И, напоминаю:
DV wrote:Макрос глобально (??) использует сочетания AltShiftF2 и AltShiftF3, что негативно сказывается на работе со временной панелью, использующей эти сочетания клавиш для своих целей.

Post Reply

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