(бывший "Экспорт / импорт данных 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 в меню и при редактировании.
Экспорт / импорт данных LuaMacro
Posted: Thu 03 Mar, 2016 10:30
by IgorZ
Вроде, работает.
Экспорт / импорт данных LuaMacro
Posted: Thu 03 Mar, 2016 15:26
by sToLp
IgorZ wrote:Вроде, работает.
Скачав и установив, тут же посредством BookmarkManagerData.lmdata перенёс настройки макроса на трёх переносных дисках на одной машине, и на двух стационарных дисках на двух других машинах. Везде Win10x64. В Far`ах опробовал и в x64-ых, и в x86-ых. То есть всего 10 проб. И все без проблем, быстро и хорошо. Завтра посмотрю на Win10x32, Win7x64 и Win7x32.
Экспорт / импорт данных LuaMacro
Posted: Thu 03 Mar, 2016 17:48
by sToLp
Хотелка: при импорте тоже сделать с возможностью выбора дописать или перезаписать.
Экспорт / импорт данных LuaMacro
Posted: Thu 03 Mar, 2016 19:54
by sToLp
Маленькая занозка: AltShiftF3, в меню "Импорт из файла" ничего не делаю, Esc, появляется красное сообщение "Импорт / экспорт данных LuaMacro": Отстутствует имя файла. В данном случае сообщение не нужно.
Экспорт / импорт данных LuaMacro
Posted: Fri 04 Mar, 2016 05:52
by IgorZ
sToLp wrote:Хотелка: при импорте тоже сделать с возможностью выбора дописать или перезаписать.
Можно.
sToLp wrote:Маленькая занозка: AltShiftF3, в меню "Импорт из файла" ничего не делаю, Esc, появляется красное сообщение "Импорт / экспорт данных LuaMacro": Отстутствует имя файла. В данном случае сообщение не нужно.
Действительно. Это я перегрелся малость, добавляя обработку ошибок.
Вопрос всем: надо ли добавить возможность редактирования переменных? Или здесь это излишне?
Экспорт / импорт данных LuaMacro
Posted: Fri 04 Mar, 2016 06:07
by sToLp
IgorZ wrote:надо ли добавить возможность редактирования переменных? Или здесь это излишне?
Имхо, запас карман не тянет — универсальность не помешает.
Экспорт / импорт данных LuaMacro
Posted: Fri 04 Mar, 2016 09:14
by IgorZ
Версия 1.0.1 - Добавлен выбор действия, если импортируемая переменная существует. Убрано сообщение об ошибке в случае отказа пользователя.
sToLp wrote:
IgorZ wrote:надо ли добавить возможность редактирования переменных? Или здесь это излишне?
Имхо, запас карман не тянет — универсальность не помешает.
Подумаю ещё. А то тогда уж и добавление, и удаление параметров напрашивается, и возникает вопрос, стоит ли ограничиваться только LuaMacro, или другие плагины тоже сканировать... Пока остановлюсь на этом. А там посмотрим.
Экспорт / импорт данных LuaMacro
Posted: Fri 04 Mar, 2016 16:13
by sToLp
IgorZ wrote: Версия 1.0.1
Спасибо за совершенствование!
Количество проб существенно увеличилось. На всех опробованных (в Win10x64, 10x32, 7x64 и 7x32; Far64 и 86) отличий не замечено, макрос работал хорошо.
Пожелание касательно данной версии следующее.
В меню "Импорт из файла" такая линейка кнопок:
{ 1 Добавить } [ 2 Все ] [ 3 Пропустить ] [ 4 Вместо ] [ 5 Все ]
[ 6 Отмена ]
И ведь [ Пропустить все ] и [ Отмена ] в этом случае разве не то же самое?
Экспорт / импорт данных LuaMacro
Posted: Fri 04 Mar, 2016 18:58
by sToLp
sToLp wrote:
IgorZ wrote:надо ли добавить возможность редактирования переменных? Или здесь это излишне?
Имхо, запас карман не тянет — универсальность не помешает.
Теперь, после того как вдоволь поупражнялся с макросом, мнение моё поменялось. Голода в редактировании переменных окружения среды нет. Поскольку для этого есть и макросы (например Менеджер переменных окружения, EnvEdit — редактор переменных среды), и как минимум один плагин (Environment Manager). И втискивать эту функцию ещё и в данный макрос навряд ли целесообразно.
Экспорт / импорт данных LuaMacro
Posted: Fri 04 Mar, 2016 21:18
by sToLp
Из практики созрела и вот такая "комплексная" хотелка:
По команде экспорта (F2) в вызываемом диалоге подставляется имя файла, соответствующее строке меню "Импорт/экспорт данных LuaMacro", с которой диалог вызван, например: BookmarkManagerData.lmdata.
Пользователь, конечно, может изменить его. Но зачем? Ведь проще использовать этот же файл и для последующего импорта.
Поэтому хорошо бы и в диалог для импорта подставлять не маску типа ?.lmdata, а точно также имя файла, соответствующее строке, с которой вызван данный диалог. Это заметно ускорит дело.
И далее хорошо бы расширить функциональность префикса ieexp: до ieexp:[<имя файла>].
Экспорт / импорт данных LuaMacro
Posted: Wed 09 Mar, 2016 10:27
by IgorZ
sToLp wrote:
IgorZ wrote: Версия 1.0.1
Спасибо за совершенствование!
Количество проб существенно увеличилось. На всех опробованных (в Win10x64, 10x32, 7x64 и 7x32; Far64 и 86) отличий не замечено, макрос работал хорошо.
Пожелание касательно данной версии следующее.
В меню "Импорт из файла" такая линейка кнопок:
{ 1 Добавить } [ 2 Все ] [ 3 Пропустить ] [ 4 Вместо ] [ 5 Все ] [ 6 Отмена ]
Мой вариант соответствует общепринятому списку вариантов (текущий заменить новым; заменить для всех случаев; оставить старый вариант; всегда оставлять старый; немедленно остановить работу), в том числе и в отношении порядка кнопок. Соответственно, он в силу привычности не требует от пользователя размышлений. Ваш вариант лично меня заставил задуматься, что же значит каждая кнопка? И я не уверен, что понял правильно. Так что Ваше предложение неприемлемо с точки зрения эргономики.
sToLp wrote:И ведь [ Пропустить все ] и [ Отмена ] в этом случае разве не то же самое?
Разумеется, нет. "Пропустить все" допишет новые переменные, пропустив существующие. "Отмена" немедленно прекратит работу. Опять же, это стандартный подход.
sToLp wrote:
sToLp wrote:
IgorZ wrote:надо ли добавить возможность редактирования переменных? Или здесь это излишне?
Имхо, запас карман не тянет — универсальность не помешает.
Теперь, после того как вдоволь поупражнялся с макросом, мнение моё поменялось. Голода в редактировании переменных окружения среды нет. Поскольку для этого есть и макросы (например Менеджер переменных окружения, EnvEdit — редактор переменных среды), и как минимум один плагин (Environment Manager). И втискивать эту функцию ещё и в данный макрос навряд ли целесообразно.
Речь шла не о редактировании переменных окружения, а о редактировании переменных в БД LuaMacro (тех, что в профиле Far-а, в файле 4EBBEFC8-2084-4B7F-94C0-692CE136894D.db).
sToLp wrote:
Из практики созрела и вот такая "комплексная" хотелка:
По команде экспорта (F2) в вызываемом диалоге подставляется имя файла, соответствующее строке меню "Импорт/экспорт данных LuaMacro", с которой диалог вызван, например: BookmarkManagerData.lmdata.
Пользователь, конечно, может изменить его. Но зачем? Ведь проще использовать этот же файл и для последующего импорта.
Поэтому хорошо бы и в диалог для импорта подставлять не маску типа ?.lmdata, а точно также имя файла, соответствующее строке, с которой вызван данный диалог. Это заметно ускорит дело.
Импорт - потенциально небезопасен, в отличие от экспорта. Поэтому автоподстановка имени здесь нежелательна. Для упрощения работы в диалогах выбора имени есть история, общая для импорта и экспорта, можно вставить имя файла в командную строку после префикса, можно воспользоваться плагином DialogTools.
sToLp wrote:И далее хорошо бы расширить функциональность префикса ieexp: до ieexp:[<имя файла>].
И подставлять его в качестве значения по умолчанию при нажатии F2? Или сохранять вообще без диалога выбора имени файла? Как именно Вы себе это представляете?
Экспорт / импорт данных LuaMacro
Posted: Thu 10 Mar, 2016 05:26
by sToLp
IgorZ
Принято к сведению. Со стандартами, обычаями и привычками не поспоришь. Благодарю за развёрнутый ответ!
IgorZ wrote:
sToLp wrote:И далее хорошо бы расширить функциональность префикса ieexp: до ieexp:[<имя файла>].
И подставлять его в качестве значения по умолчанию при нажатии F2? Или сохранять вообще без диалога выбора имени файла? Как именно Вы себе это представляете?
Представляю это себе аналогичным ieimp:[<имя файла>].
И простите за задержку и скудность моего ответа — работные дни.
Экспорт / импорт данных LuaMacro
Posted: Fri 11 Mar, 2016 04:42
by IgorZ
sToLp wrote:
IgorZ
IgorZ wrote:
sToLp wrote:И далее хорошо бы расширить функциональность префикса ieexp: до ieexp:[<имя файла>].
И подставлять его в качестве значения по умолчанию при нажатии F2? Или сохранять вообще без диалога выбора имени файла? Как именно Вы себе это представляете?
Представляю это себе аналогичным ieimp:[<имя файла>].
ieimp:<имя файла> автоматом записывает всё содержимое указанного файла в БД. Предлагаете, чтобы ieexp:<имя файла> автоматом записывал всё содержимое БД в указанный файл?
Экспорт / импорт данных LuaMacro
Posted: Fri 11 Mar, 2016 13:24
by sToLp
IgorZ wrote: ieimp:<имя файла> автоматом записывает всё содержимое указанного файла в БД. Предлагаете, чтобы ieexp:<имя файла> автоматом записывал всё содержимое БД в указанный файл?
Спасибо, подоплёка Вашего вопроса понятна. Каюсь, когда я писал свою просьбу, то подразумевал запись в файл содержимого, относящегося к области макроса BookmarkManager. Потому что в ассоциациях на маску BookmarkManagerData.lmdata на импорт данных в макрос у меня внесена такая команда: ieimp:BookmarkManagerData.lmdata
а на экспорт из базы в файл следующая: lua:Plugin.Menu("4EBBEFC8-2084-4B7F-94C0-692CE136894D","31495183-8AD8-4CFE-B228-9C24CDF2C630") Keys("Enter 2*Down F2 2*CtrlLeft ShiftHome Del % F a r P r o f i l e % \\ M a c r o s \\ s c r i p t s \\ s h e _ l u a \\ Enter Right Enter F10")
и опасаюсь, что со временем последняя команда даже самим её написантом может быть воспринята как ребус.
Поэтому по зрелому размышлению полагаю, что префикс ieexp: наверное целесообразно оставить как есть, а для удобства экспорта в файл BookmarkManagerData.lmdata сделайте, пожалуйста, что-то типа: bmieexp:<имя файла> или м.б.: ieexp:bm<имя файла>.