(бывший "Экспорт / импорт данных 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: Sun 12 Apr, 2020 12:26
by buniak_a_h
Latest post of the previous page:
John Doe, нашёл третье соображение, которое меня немного извиняет: такая же фигня в скрипте DBEdit от IgorZ: одну ошибку я уже нашёл (первый параметр в функции far.Dialog передаётся символьным, а не байтовым).
Кстати, Ваш luacheck_editor.luaу меня тоже свалился. На скрипте, который в версии 5579 проходил проверку. Подробности будут в той ветке.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 12:30
by buniak_a_h
Shmuel wrote: ↑Sun 12 Apr, 2020 12:22
Зачем вы сознательно вводите читателей форума в заблуждение?
Ведь вы прекрасно знаете, что причиной вылета Фара был плагин колорер, что и видно на скриншоте.
СТОП! Вы сами нашли у меня ошибку (win.Uuid в поле id таблицы-аргумента Macro), нет? И САМИ написали мне, чтоб я исправлял СВОИ ошибки! Не было?
Shmuel wrote: ↑Sun 12 Apr, 2020 12:22
Зачем вы сознательно вводите читателей форума в заблуждение?
Ведь вы прекрасно знаете, что причиной вылета Фара был плагин колорер, что и видно на скриншоте.
СТОП! Вы сами нашли у меня ошибку (win.Uuid в поле id таблицы-аргумента Macro), нет? И САМИ написали мне, чтоб я исправлял СВОИ ошибки! Не было?
Вы продолжаете передёргивать. Непонятно, зачем это вам.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 12:40
by zg
buniak_a_h wrote: ↑Sun 12 Apr, 2020 12:30СТОП! Вы сами нашли у меня ошибку (win.Uuid в поле id таблицы-аргумента Macro), нет? И САМИ написали мне, чтоб я исправлял СВОИ ошибки! Не было?
от этих ошибок фар падал? или только показывал сообщение об ошибке? а если убрать колорер?
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 12:46
by buniak_a_h
Shmuel wrote: ↑Sun 12 Apr, 2020 12:36
Вы продолжаете передёргивать. Непонятно, зачем это вам.
Shmuel wrote: ↑Sat 11 Apr, 2020 13:28
Я нашёл вам один баг. Следующие ищите сами.
(это к тому, что именно Вы написали мне,что ошибки мои. Или я неправильно Вас понял, а Вы на самом деле предлагали мне искать ошибки в colorer-е (и, как выяснилось, в luacheck_editor.lua от John Doe)? Последний вылетает, причем colorer откачен на старую версию и не валится.
Shmuel wrote: ↑Sun 12 Apr, 2020 12:36
Вы продолжаете передёргивать
Я доказал. Хочу подробностей.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 12:50
by buniak_a_h
zg wrote: ↑Sun 12 Apr, 2020 12:40
от этих ошибок фар падал? или только показывал сообщение об ошибке? а если убрать колорер?
Откуда я знаю? Меня учили, что почти всегда виновник тот, кто сделал ПЕРВУЮ ошибку. Остальные могут быть наведёнными. Исправил указанную Shmuel-ем ошибку - валиться перестало (ну, в этом месте, как выяснилось). Откатил Colorer на предыдущую версию - вообще валиться перестало (как выяснилось - тоже не навсегда. Падает синтаксическая проверка скриптов). Пришлось откатить ФАР.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 13:03
by zg
buniak_a_h wrote: ↑Sun 12 Apr, 2020 12:50Меня учили, что почти всегда виновник тот, кто сделал ПЕРВУЮ ошибку.
я не знаю, как на это реагировать. я посмотрел ваше первое сообщение об ошибке: там два скриншота:
1. первый о сообщение об ошибке в макросе. очевидно это не падение.
2. вторая ошибка с исключением — исключение в колорере. фар падает. из-за колорера.
buniak_a_h wrote: ↑Sun 12 Apr, 2020 12:50Откуда я знаю?
если не знаете, зачем распространяете недостоверную информацию? вам же люди, которые знают, сказали, что не роняет luamacro far в данной ситуации. а вы не знаете и настаиваете. это плохой признак.
Редактор БД плагинов
Posted: Mon 13 Apr, 2020 11:28
by DV
Возвращаясь к скрипту DBEdit.lua, сообщение об ошибке говорит:
C:\FAR3\Profile\Macros\scripts\DBEdit.lua:451: invalid UTF-8 code
stack traceback:
[C]: in function 'gsub'
C:\FAR3\Profile\Macros\scripts\DBEdit.lua:451: in function 'ShowMenu'
if not v.res then
if v.elem.type==F.FST_SUBKEY then
column2 = "▼"
else
if not pcall(function () column2 = tostring(v.elem.value):gsub("\n","\\n") end) then
column2 = ""
end
end
v.text = ("%-"..NL.."s│".."%s"):format(v.text,column2)
end
Примечание 1: символ перевёрнутого треугольника в тексте скрипта имеет другой код и при вставке в этот форум превращается в нечитаемый символ. Примечание 2: наверное, вместо инструкции column2 = "" следовало бы сделать что-то более осмысленное (например, какое-то преобразование строки?) - но тут я недостаточно разбираюсь как в специфике скрипта, так и в специфике преобразования символов в Lua. Примечание 3: впрочем, тепер скрипт валится при попытке изменить это значение. Напомню, речь идёт о базе данных плагина RESearch версии 8.70. А параметр называется "AllCP" и имеет значение "b♥".
Редактор БД плагинов
Posted: Tue 14 Apr, 2020 12:22
by DV
В той же базе данных плагина RESearch версии 8.70, при заходе в пустой "каталог" EditorBatches или PanelBatches (пустой - потому что я не создавал ни EditorBatches, ни PanelBatches) и нажатии Enter внутри этого пустого "каталога" получаем:
C:\FAR3\Profile\Macros\scripts\DBEdit.lua:451: invalid UTF-8 code
stack traceback:
[C]: in function 'gsub'
C:\FAR3\Profile\Macros\scripts\DBEdit.lua:451: in function 'ShowMenu'
local vv
if type(v.elem.value)=="string" then
vv = string.gsub(v.elem.value,"\n","\\n")
else
vv = tostring(v.elem.value)
end
if not v.res then v.text = ("%-"..NL.."s│".."%s"):format(v.text,v.elem.type==F.FST_SUBKEY and "" or vv) end
и описать результат. Кстати: есть ли у Вас плагин для просмотра баз данных SQLite? Если есть, то что он показывает в качестве значения для того параметра, который приводит к столь неожиданному результату? Тоже b♥, или что-то другое?
P. S. Остальное поправил, выложу, как только поборю вышеописанную ошибку.
Редактор БД плагинов
Posted: Fri 17 Apr, 2020 10:52
by Shmuel
IgorZ wrote: ↑Fri 17 Apr, 2020 10:36
Кстати: есть ли у Вас плагин для просмотра баз данных SQLite? Если есть, то что он показывает в качестве значения для того параметра, который приводит к столь неожиданному результату?
C:\FAR3\Profile\Macros\scripts\DBEdit.lua:266: invalid UTF-8 code
stack traceback:
[C]: in function '(for generator)'
C:\FAR3\Profile\Macros\scripts\DBEdit.lua:266: in function <C:\FAR3\Profile\Macros\scripts\DBEdit.lua:237>
[C]: in function 'DialogRun'
Исправлена ошибка с обработкой действий в пустом подключе. Теперь не падает при попытке редактировать пустоту.
Переделана обработка FST_DATA. Поскольку, как оказалось, нельзя рассчитывать, что данный тип данных можно всегда считать строкой, то добавлено представление в виде дампа, а строковое представление показывается только, если строка корректна.
╔══════════════════════════════════════════════════════ Error ════════════════════════════════════════════════╗
║ C:\FAR3\Plugins\LuaMacro\LuaMacro.dll: ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:393: invalid UTF-8 code ║
║ stack traceback: ║
║ [C]: in function 'byte' ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:393: in function 'DATAToStrings' ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:461: in function 'ShowMenu' ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:603: in function 'action' ║
║ C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:479: in function <C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:428> ║
╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
╔══════════════════════════════════════════════════════ Error ════════════════════════════════════════════════╗
║ C:\FAR3\Plugins\LuaMacro\LuaMacro.dll: ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:393: invalid UTF-8 code ║
║ stack traceback: ║
║ [C]: in function 'byte' ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:393: in function 'DATAToStrings' ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:461: in function 'ShowMenu' ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:603: in function 'action' ║
║ C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:479: in function <C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:428> ║
╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
Упс... Прошу прощения, только сейчас дошло, что проверял на "условно-стабильной" сборке 5577, в которой этого нововведения ещё не было. Переделаю.
P. S. Собственно, переделка оказалась элементарной. Строку 393 меняем с