(бывший "Экспорт / импорт данных 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: Fri 16 Nov, 2018 11:32
by DV
Latest post of the previous page:
Спасибо за обновление!
И, напоминаю:
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 есть удобный интерфейс для этого.
╔══════════════════════════════════════════════════════ Error ════════════════════════════════════════════════╗
║ C:\FAR3\Plugins\LuaMacro\LuaMacro.dll: ║
║ 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' ║
║ C:\FAR3\Profile\Macros\scripts\DBEdit.lua:593: in function 'action' ║
║ C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:479: in function <C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:428> ║
╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 03:53
by buniak_a_h
DV, Это обсуждалось в "Глюки ночной сборки". Shmuel нашёл ошибку в моих скриптах: Macro{… id = win.Uuid … } - тут win.Uuid лишнее. Поверьте у себя во всех скриптах на такое. И не перепутайте: в вызове far.Dialog надо именно win.Uuid!
блин, как же это достаёт! Где-то внешний GUID, а где-то - внутренний; в некоторых функциях признак активной/пассивной панелей - 0/1 соответственно, а где-то - наоборот!
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 07:16
by John Doe
А если бы не падал, то вы и не узнали бы о своих ошибках.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 07:56
by buniak_a_h
John Doe wrote: ↑Sun 12 Apr, 2020 07:16
А если бы не падал, то вы и не узнали бы о своих ошибках.
Узнал бы, если б потребовалось с id работать (искать макрос по id, например). А так-то - не использую, вот и не узнал. Подозреваю, у меня на компе много не работающих вещей, о которых я не знаю, потому что не использую.
Вот как объяснить логикой, что в вызове Macro используется "внешний" GUID, а в far.Dialog - внутренний? Просто вспоминается
Сынок, запомни, дважды два - не 8, не 6, а чуть меньше пяти! Это невозможно объяснить, это надо запомнить…
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 08:06
by Shmuel
buniak_a_h wrote: ↑Sun 12 Apr, 2020 07:56
Вот как объяснить логикой, что в вызове Macro используется "внешний" GUID, а в far.Dialog - внутренний?
Логика здесь простейшая, и об этом неоднократно уже писали на форуме. Напишу ещё раз:
Для макросов из коробки доступно 2 библиотеки: макро-API и LuaFAR. Эти 2 библиотеки разрабатывались разными людьми, в разные периоды времени, независимо друг от друга, и они имеют отдельную документацию. Естественно, что "правила игры" в этих библиотеках разные. Но я не вижу в этом особой проблемы: практически любой программист имеет дело с разными языками и разными библиотеками, и обязан "играть" по правилам этих языков и библиотек.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 08:12
by John Doe
buniak_a_h wrote: ↑Sun 12 Apr, 2020 07:56
А так-то - не использую, вот и не узнал.
А тем временем другие пользователи скачивают ваши скрипты, и берут некоректный код как пример для собственных макросов.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 08:31
by buniak_a_h
Shmuel, первое, что приходит в голову - ну хоть в документации как-то отразить, где внешний GUID, а где скомпилированный! Ведь вообще нигде не написано!
Я, честно говоря, думал, что LeaFAR - прослойка ("переходник") для использования функций из API (ну, или наоборот). На эту мысль наводит тот факт, что многие функции из LeaFAR, похоже, используют функции из API (преобразовывая параметры из таблиц, например, в похожие структуры). Я не утверждаю - просто представил, как бы делал я. Ну и, соответственно, привёл бы по возможности к стандарту.
И даже сделал бы гибче. Например, если признак панели 0 или 1 - это старый вызов, сохранённый для совместимости. А если far.Flags.PANEL_ACTIVE или far.Flags.PANEL_PASSIVE (-1 или -2 соответственно) - ву зависимости от вызываемой функции подменять на нужное.
Для GUID-а в зависимости от длины или преобразовывал, или нет (для разных надобностей) Увы, такой посредник не всегда знает, для каких надобностей…
John Doe, ну устыдили. Извиняет меня 2 соображения: (а) я искренне заблуждался и (б) эти скрипты я не публиковал.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 10:19
by DV
buniak_a_h wrote: ↑Sun 12 Apr, 2020 03:53Это обсуждалось в "Глюки ночной сборки". Shmuel нашёл ошибку в моих скриптах: Macro{… id = win.Uuid … } - тут win.Uuid лишнее. Поверьте у себя во всех скриптах на такое. И не перепутайте: в вызове far.Dialog надо именно win.Uuid!
Что-то я сильно не в теме, потому что ничего не понял...
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 11:22
by buniak_a_h
В версии 5580 заменили библиотеку LuaUTF8 (так, кажется) и сделали контроль за корректностью текста в кодировке UTF-8. Как Вы знаете, GUID может быть в двух ипостасях: во внешнем представлении (4 16-ричных числа, разделённых дефисами) и во внутреннем (хотя это на самом деле число, но представляется в виде 16-символьной строки). Перевод туда-обратно - функцией win.Uuid.
В моих скриптах я в двух файлах вместо внешнего ГУИДа передавал внутренний; если функция ожидает символьную строку в кодировке UTF-8 (например, функция utf8.gsub или <строка>:gsub), а получит внутренний ГУИД, то вполне может вылететь с приведённой Вами диагностикой. Первое, что приходит в голову - именно это как раз и произошло.
--
Посмотрел я указанный скрипт (DBEdit.lua). Увидел следующую странность: Guids.diEdit - это GUID во внешнем (строковом) виде. Но в строке 290 написано: if far.Dialog(Guids.diEdit, … ), хотя именно там должен быть внутренний GUID (проверено опытным путём). Отсюда я делаю вывод, что автор этого скрипта, так же как я ранний, вполне мог перепутать ГУИДы. В предыдущих версиях ФАРа это игнорировалось до тех пор, пока ГУИД не использовался. Теперь эта ситуация вызывает неприятную ошибку, которая может валить ФАР. Так как-то …
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 11:29
by Shmuel
buniak_a_h wrote: ↑Sun 12 Apr, 2020 11:22
Отсюда я делаю вывод, что автор этого скрипта, так же как я ранний, вполне мог перепутать ГУИДы. В предыдущих версиях ФАРа это игнорировалось до тех пор, пока ГУИД не использовался. Теперь эта ситуация вызывает неприятную ошибку, которая может валить ФАР.
Эта ошибка не может валить Фар.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 12:07
by buniak_a_h
Shmuel wrote: ↑Sun 12 Apr, 2020 11:29
Эта ошибка не может валить Фар.
Ну, я привёл скриншоты вылета. Кажется, забыл там добавить, что фар закрывался.
Ещё. Есть скрипт проверки скрипта luacheck. Так вот он внезапно стал падать на тех скриптах, на которых работал в версии 5579. Этодля меня стало совершенно неприемлемо; откатился на 5579. Такая вот грусть…
Shmuel wrote: ↑Sun 12 Apr, 2020 11:29
Эта ошибка не может валить Фар.
Ну, я привёл скриншоты вылета. Кажется, забыл там добавить, что фар закрывался.
Зачем вы сознательно вводите читателей форума в заблуждение?
Ведь вы прекрасно знаете, что причиной вылета Фара был плагин колорер, что и видно на скриншоте.
Редактор БД плагинов
Posted: Sun 12 Apr, 2020 12:26
by buniak_a_h
John Doe, нашёл третье соображение, которое меня немного извиняет: такая же фигня в скрипте DBEdit от IgorZ: одну ошибку я уже нашёл (первый параметр в функции far.Dialog передаётся символьным, а не байтовым).
Кстати, Ваш luacheck_editor.luaу меня тоже свалился. На скрипте, который в версии 5579 проходил проверку. Подробности будут в той ветке.