(бывший "Экспорт / импорт данных LuaMacro") Описание:
Данный скрипт позволяет просматривать данные плагинов, хранящиеся в локальном и глобальном профилях Far-а, редактировать их, экспортировать в файл, а также импортировать из ранее экспортированного файла. По умолчанию предлагаются данные LuaMacro. После выбора другого плагина умолчание меняется до перезагрузки макросов. Формат файла импорта/экспорта текстовый, довольно простой - фактически, .ini-формат с некоторыми дополнительным ограничениями, так что, в принципе, легко редактируемый при надобности. Можно последовательно сохранить несколько разрозненных кусков данных в один файл путём дописывания в конец. Полученный файл можно импортировать в Far.
require"DBEdit"([<таблица параметров>]) или require"DBEdit".Main([<таблица параметров>]). Поля таблицы:
FileName - имя файла для импорта или экспорта; если не указано, при экспорте формируется по умолчанию, при импорте запрашивается;
plugin - имя плагина, данные которого обрабатываем;
export - шаблон имени экспортируемой переменной (переменных);
import - если истина, импортируем данные из файла;
show - если истина, показать всю БД, если таблица вида {"GLOBAL","IgorZ","'/' sample"} или строка вида "GLOBAL/IgorZ/'//' sample", показать дерево
require"DBEdit".Show([<подключ>[,<плагин>]]). Показ данных из БД.
Подключ - Строка или таблица, задаваемая аналогично show в первом варианте. Если не задан, выводится корень.
Плагин - Строка, имя плагина, базу которого следует показать. Если плагин не указан, берётся БД текущего (или LuaMacro, если плагин ещё не выбирался).
require"DBEdit".Export([<образец>][,<файл>[,<плагин>]]]). Экспорт из БД в файл по шаблону.
Образец - строка. Имена переменных и ключей, совпадающие с образцом, будут экспортироваться. Если не задан, экспортируется всё.
Файл - строка, имя файла для экспорта. Если не указано, составляется автоматически из текущего пути, имени плагина, шаблона и расширения .dbedit.
Плагин - строка, имя плагина, из базы которого следует экспортировать содержимое в файл. Если плагин не указан, берётся БД текущего (или LuaMacro, если плагин ещё не выбирался).
require"DBEdit".Import([<файл>[,<плагин>]]). Импорт из файла в БД.
Файл - строка, имя файла для импорта. Если не указано, запрашивается.
Плагин - |Строка, имя плагина, в базу которого следует импортировать содержимое файла. Если плагин не указан, берётся БД текущего (или LuaMacro, если плагин ещё не выбирался).
В стандартной поставке идёт файл, добавляющий следующие возможности:
Вызов главного меню. Позволяет просматривать данные, экспортировать и импортировать. Клавиша вызова: Alt+Shift+F2.
Вспомогательный, для корректной работы с плагином TmpMacro. Дублирует его клавиши Alt+Shift+F2,Alt+Shift+F3.
dbshow:[<плагин>][корень] - показ данных из БД умолчательного или указанного плагина ("<" и ">" обязательны);
dbexp:[<плагин>][шаблон] [имя файла] - экспорт ключа или переменной из указанного плагина (< и > обязательны) по указанному шаблону или всей БД;
dbimp:[<плагин>][имя файла] - импорт из указанного файла в указанный плагин (< и > обязательны) или вызов диалога импорта.
Шаблон и имя файла можно указывать в кавычках.
Пункт в меню плагинов.
Требуемая версия Far 3.0.4324+.
Версия 1.0.0 - Первый релиз.
Версия 1.0.1 - Добавлен выбор действия, если импортируемая переменная существует. Убрано сообщение об ошибке в случае отказа пользователя.
Версия 2.0.0 - Скрипт поменял название, префиксы командной строки тоже изменились. Добавлена возможность создавать, редактировать и удалять переменные в базе. Добавлена возможность выбора плагина. При экспорте из командной строки можно указать шаблон экспортируемого ключа или переменной, и всё, подходящее под шаблон, будет экспортировано. Рефакторинг, мелкие правки.
Версия 2.0.1 - Если локальная или глобальная БД плагина пуста, отрывается сразу корень другой. Переход на выбор LOCAL/GLOBAL - CtrlPgUp. Вывод в заголовке текущего местоположения. Для типа данных F.FST_DATA выводится также значение. Различные правки.
Версия 2.0.2 - Исправлена ошибка со значением переменннй типа FST_DATA, не приводящимся к функции. Экспериментально: при вызове из меню плагинов выводится меню выбора БД. Рефакторинг, исправление мелких ошибок, вылезших в последней версии.
Версия 2.0.3 - Расширенное меню выбора плагина.
Версия 2.1.0 - Скрипт можно использовать как модуль. Исправлена область действия в MenuItem. Разделение префиксов. Переделана справка. Добавлено nfo. Мелкие правки.
Версия 2.1.1 - При вызове модуля можно, указав неверное имя, вызвать меню выбора плагина. CtrlPgUp из меню выбора профиля вызывает меню выбора плагина. Модуль теперь возвращает таблицу функций (старый вариант вызова сохранён). Изменён способ регистрации модуля. Если при вызове модуля в режиме показа не указан явно тип БД (LOCAL/GLOBAL), то скрипт сам выбирает наилучший вариант. CtrlC/CtrlG/CtrlL переходят в тот же ключ в другой/глобальной/локальной базе. Рефакторинг. Мелкие правки.
Версия 2.1.2 - Enter на значении открывает редактирование элемента. Backspace работает как Esc. Рефакторинг. Мелкие правки.
Версия 2.1.3 - Добавлен префикс dbshow:. Для dbexp: можно задавать имя файла. Исправлены ошибки в справке. Рефакторинг.
Версия 2.1.4 - Доработан вызов action-функций с учётом введённых в build 717 параметров для condition/action. Рефакторинг.
Версия 2.1.5 - Исправлена ошибка с обработкой действий в пустом подключе. Переделана обработка FST_DATA. Рефакторинг.
Версия 2.1.6 - Исправлена ошибка с неюникодной строкой значения типа FST_DATA.
Версия 2.1.7 - Исправлена ошибка с переключением БД между локальной и глобальной, когда переключать нечего. Добавлен перехват CtrlBreak.
Версия 2.1.8 - CtrlBreak работает как F10, MsLClick работает как Enter. Исправлен nfo.execute. Рефакторинг.
Версия 3.0.0 - Переделан на модуль. Добавлен макрос, возвращающий доступ к клавиатурным комбинациям AltShiftF2/F3 плагина TmpPanel. Рефакторинг.
Версия 3.1.0 - Переделан показ значений типа FST_DATA в меню и при редактировании.
Редактор БД плагинов
Posted: Wed 26 Oct, 2016 08:05
by IgorZ
Latest post of the previous page:
John Doe wrote:
IgorZ wrote: В конце концов, я больше не использую хаки вроде самостоятельного добавления своего модуля непосредственно в _G.package.loaded, всё делается по правилам.
Но вы всё же модифицируете package.loaded, да и заглушка сама по себе хак.
??? Кажется, мы немного по-разному понимаем термин "хак". С моей точки зрения, нестандартное использование стандартных возможностей хаком не является. То есть, просверлить в ломе дырку, чтоб вешать его на гвоздик - хак, а подпереть ломом заваливающуюся стенку - не хак.
John Doe wrote:
IgorZ wrote: С этой точки зрения и LuaManager, и DBEdit - скрипты с минимальным элементом модульности.
Но элемент есть, и вопрос в том, как его правильнее реализовать. А точнее: надо ли что-то выдумывать своё, или достаточно использовать стандартный механизм lua.
Вариантов ведь много, например ваш модуль-заглушка может выглядеть так:
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)
Спасибо за интересную идею. Не факт, что воспользуюсь, но сам подход я что-то до сих пор игнорировал.
Редактор БД плагинов
Posted: Wed 26 Oct, 2016 09:49
by John Doe
IgorZ wrote: Кажется, мы немного по-разному понимаем термин "хак"
Хак понятие относительное.
То что я вижу у вас мне не нравится по двум причинам:
1. Это неоправданно сложно реализовано
2. И всё равно не работает
Например:
- добавляем в _macroinit.lua: _G.dbedit = require"dbedit"
- перезапускаем фар
- убеждаемся что dbedit==false
Редактор БД плагинов
Posted: Mon 31 Oct, 2016 12:35
by IgorZ
Версия 2.1.1 - При вызове модуля можно, указав неверное имя, вызвать меню выбора плагина. И отказаться от работы, нажав Esc. CtrlPgUp из меню выбора профиля вызывает меню выбора плагина. Модуль теперь возвращает таблицу функций (старый вариант вызова сохранён). Изменён способ регистрации модуля. Если при вызове модуля в режиме показа не указан явно тип БД (LOCAL/GLOBAL), то скрипт сам выбирает наилучший вариант. CtrlC/CtrlG/CtrlL переходят в тот же ключ в другой/глобальной/локальной базе. Рефакторинг. Мелкие правки.
John Doe wrote:Мелкие пожелания по скрипту:
...
Хотелось бы иметь возможность для просмотра таблиц использовать альтернативные средства.
(Встроенная функция кажется мне не очень наглядной)
...
Чуть улучшил встроенную функцию, кроме того, если есть inspect, то по Ctrl1 выводится им, а по Ctrl2 - с помощью moon.dump. По Ctrl3 активируется встроенная функция (она же по умолчанию). Это на пробу - что понравится больше. Мне самому не особо нравится ни inspect, ни dump.
Ещё доработал в очередной раз схему с модулем - теперь даже последний приведённый в теме LuaManager пример вроде бы отрабатывает корректно.
Редактор БД плагинов
Posted: Mon 31 Oct, 2016 13:05
by John Doe
IgorZ wrote: Ещё доработал в очередной раз схему с модулем
Дело вкуса, но раз есть модуль, то я бы пошёл немного дальше, и совсем убрал бы загрузчик. Вот такая гибкость это лишнее (имхо, разумеется):
Необязательный модуль-заглушка для DBEdit. Если DBEdit не запрашивается как модуль при первичной загрузке скриптов, может быть удалён.
Редактор БД плагинов
Posted: Tue 17 Jan, 2017 21:26
by DV
Скачал версию макроса из "шапки" (DBEdit.2.1.1). Нужная вещь!
Что сразу бросается в глаза:
1. Нажатие Enter на поле со значением (например, число или строка) выбивает красное окно с ошибкой. Было бы логичнее при нажатии Enter на поле со значением делать то же, что по F4 (то есть редактирование).
2. Мне кажется, что работу с DBEdit (Alt-Shift-F2) логичнее было бы начинать со списка плагинов (который вызывается по Ctrl-S). Под "началом работы с DBEdit" я имею в виду первое окно, которое показывает макрос.
3. Поскольку вход в "папки" осуществляется нажатием Enter, было бы логично выходить из них на уровень вверх нажатием BackSpace.
Редактор БД плагинов
Posted: Thu 19 Jan, 2017 10:19
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. Так что такая модификация добавила бы лишнее действие при почти каждом запуске скрипта. Если Вам так необходимо начинать именно с меню плагинов, можно использовать такой вот примитивный макрос:
Он перекрывает стандартный вызов и делает именно то, что Вам нужно.
Редактор БД плагинов
Posted: Fri 20 Jan, 2017 18:03
by DV
IgorZ wrote:Версия 2.1.2
Спасибо!
Хотя пока что нажатие BackSpace работает не совсем так, как я ожидал. Я ожидал, что BackSpace будет полным аналогом Ctrl+PgUp, а на деле нажатие BackSpace даже не поднимается на уровень окна выбора базы данных, вместо этого закрывая диалог. (Кстати, я не разобрался из кода макроса, где же срабатывают обработчики нажатия BackSpace и Ctrl+PgUp).
Редактор БД плагинов
Posted: Tue 15 Aug, 2017 10:28
by DV
Макрос глобально (??) использует сочетания AltShiftF2 и AltShiftF3, что негативно сказывается на работе со временной панелью, использующей эти сочетания клавиш для своих целей.
Редактор БД плагинов
Posted: Tue 30 Oct, 2018 10:48
by John Doe
В этом и некоторых других скриптах @IgorZ неоправданно используется глобальный far.FreeSettings() вместо закрытия конкретного экземпляра настроек его собственным методом.
Редактор БД плагинов
Posted: Fri 02 Nov, 2018 05:34
by IgorZ
John Doe wrote: ↑Tue 30 Oct, 2018 10:48
В этом и некоторых других скриптах @IgorZ неоправданно используется глобальный far.FreeSettings() вместо закрытия конкретного экземпляра настроек его собственным методом.
Избавляюсь потихоньку, при выпуске новых версий. Просто не вижу необходимости выпуска новой версии ради подобного мелкого изменения (во всяком случае, если не станет известно, что использование far.FreeSettings() приводит к серьёзной ошибке).
IgorZ wrote: ↑Fri 02 Nov, 2018 05:34
(во всяком случае, если не станет известно, что использование far.FreeSettings() приводит к серьёзной ошибке).
Возможно я плохо объяснил.
Другой скрипт (не ваш) создал настройки, которыми намерен пользоваться некоторое время.
В это время ваш скрипт берёт и закрывает настройки ВСЕХ скриптов.
Неаккуратненько.
То есть хэндлы глобальны? Не знал. Но, всё равно, неаккуратность, скорее, в другом скрипте. Тем не менее, с наличием проблемы согласен, постараюсь выделить время и выпустить новые версии ещё не правленных в этом плане скриптов.
Редактор БД плагинов
Posted: Tue 06 Nov, 2018 12:09
by IgorZ
В связи с тем, что, как выяснилось, far.FreeSettings закрывает открытые настройки не для текущего скрипта, а глобально, выкладываю версию с исправлениями. Версия 2.1.3 -
Добавлен префикс dbshow:. Теперь dbshow: вызывает просмотр БД, а dbexp: всегда только экспортирует.
Для dbexp: можно задавать имя файла, куда экспортировать.
Исправлены ошибки в справке.
far.FreeSettings() заменён на <settings>:Free()
Прочий рефакторинг, делавшийся потихоньку.
Редактор БД плагинов
Posted: Fri 16 Nov, 2018 11:32
by DV
Спасибо за обновление!
И, напоминаю:
DV wrote:Макрос глобально (??) использует сочетания AltShiftF2 и AltShiftF3, что негативно сказывается на работе со временной панелью, использующей эти сочетания клавиш для своих целей.
Редактор БД плагинов
Posted: Fri 30 Nov, 2018 08:11
by IgorZ
DV wrote: ↑Fri 16 Nov, 2018 11:32
Спасибо за обновление!
И, напоминаю:
DV wrote:Макрос глобально (??) использует сочетания AltShiftF2 и AltShiftF3, что негативно сказывается на работе со временной панелью, использующей эти сочетания клавиш для своих целей.
Любое сочетание может оказаться кем-то занято. Рекомендую использовать модуль rebind. Он позволяет переназначать клавиши, как удобно, "на лету". А в LuaManager есть удобный интерфейс для этого.