Settings Control — просмотр данных в базах плагинов

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

Settings Control — просмотр данных в базах плагинов

Post by John Doe » Wed 24 Apr, 2013 20:06

Утилита, позволяющая просмотреть базу данных выбранного плагина
  1. local F = far.Flags
  2. local obj
  3.  
  4. local function getTable(id)
  5.   local enum = obj:Enum(id)
  6.   local tbl = {}
  7.   for i = 1,enum.Count do
  8.     local Name,Type = enum[i].Name,enum[i].Type
  9.     local item = Type==F.FST_SUBKEY
  10.                  and getTable(obj:OpenSubkey (id, Name))
  11.                  or obj:Get (id, Name, Type)
  12.     if Type==F.FST_DATA then
  13.       if item:match("\nreturn ") then -- plugin LuaMacro
  14.         local f = loadstring(item)
  15.         item = not f and item or f()
  16.       elseif item:match("^do local") then -- other LuaFAR plugins
  17.         local f = loadstring(item)
  18.         if f then
  19.           local env = {}
  20.           setfenv(f,env)()
  21.           item = env.Data
  22.         end
  23.       end
  24.     end
  25.     tbl[Name] = item
  26.   end
  27.   return #enum>0 and tbl
  28. end
  29.  
  30. local PluginsList = {}
  31. for i,p in ipairs(far.GetPlugins ()) do
  32.   local Info = far.GetPluginInformation (p)
  33.   local Plugin = {}
  34.   Plugin.text = Info.GInfo.Title
  35.   Plugin.guid = Info.GInfo.Guid
  36.   obj = far.CreateSettings(Plugin.guid)
  37.   Plugin.hidden = #obj:Enum(0)==0
  38.   obj:Free()
  39.   PluginsList[i] = Plugin
  40. end
  41. local item, pos
  42. repeat
  43.   item, pos = far.Menu({SelectIndex=pos},PluginsList)
  44.   if item then
  45.     obj = far.CreateSettings(item.guid)
  46.     require"le"(getTable(F.FSSF_ROOT),"")
  47.     obj:Free()
  48.   end
  49. until not item
Предполагается модуль lua_explorer с модификациями отсюда.
(Можно также tableview, преобразованный в модуль.)

Как пользоваться (пример): сохранить код в файле sc.lua, запустить из командной строки lua:@sc.lua

P.S.
Обсуждение отделено от темы Lua Explorer

Update
Работа с настройками самого фара обсуждается тут.
Пример работы с историями: viewtopic.php?f=15&t=8289

User avatar
SUSim
Posts: 1479
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 4 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by SUSim » Wed 24 Apr, 2013 20:20

John Doe wrote:Вот такая функция получилась для просмотра базы настроек любого плагина
Предложенная функция хороша! а при чём тут msave?
что-то Вас всё глубже и глубже засасывает ... э ... забыл слово ... теория, не ... глобализация, не ... абстракция, опять не совсем то слово ... короче - "это надо знать, но польза от этого только для ума..." (с) неточный и не мой

Update
куда добавил?
SimSU ··· ·· -- ··· ··-

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

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by John Doe » Wed 24 Apr, 2013 20:25

msave очень даже причём, т.к. с него всё началось: не было средств для просмотра данных, сохранённых в базу LuaMacro с помощью msave.

Теорией тут вроде и не пахнет, но побочный продукт есть: просмотр базы любого плагина.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by Shmuel » Wed 24 Apr, 2013 20:58

John Doe wrote:Вот такая функция получилась для просмотра базы настроек любого плагина
Скопировал ваш вариант explorer.lua в папку modules, запускаю скрипт, получаю

Code: Select all

4.lua:20: attempt to call a boolean value

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

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by John Doe » Wed 24 Apr, 2013 21:03

require"lua_explorer"(getTable(0),"")
Предполагается модуль lua_explorer, выложен чуть выше в теме.
Можно и ваш tableview, который я тоже преобразовывал в модуль: require"far2.tableview"("settings",table)

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by Shmuel » Wed 24 Apr, 2013 21:09

John Doe wrote:require"lua_explorer"(getTable(0),"")
Предполагается модуль lua_explorer, выложен чуть выше в теме.
Ну так я его и скачал, поместил в modules, затем запустил lm:post @4.lua, где 4.lua - ваш скрипт для просмотра баз плагинов.

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

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by John Doe » Wed 24 Apr, 2013 21:14

Значит у вас зачем-то определена глобальная переменная Macro )
Вот эту строку модуля if not Macro then return process end замените на do return process end

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by Shmuel » Wed 24 Apr, 2013 21:20

John Doe wrote:Значит у вас зачем-то определена глобальная переменная Macro )
Так и есть. Sorry.

P.S. Здорово вы придумали!

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

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by John Doe » Wed 24 Apr, 2013 21:27

А вот самостоятельная утилита, показывает список плагинов, можно поглядеть базу выбранного:


Один момент не уловил: как понять что у плагина нет базы?

Update
Текст обновлён, актуальная версия будет в шапке.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by Shmuel » Wed 24 Apr, 2013 21:36

John Doe wrote:Один момент не уловил: как понять что у плагина нет базы?
Может то, что Enum возвращает пустую таблицу? (предположение навскидку)

Кстати, наверное лучше match("^return"), то-есть "return" только в начале строки.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by Shmuel » Wed 24 Apr, 2013 21:42

Заметил дефект в Lua Explorer:

Code: Select all

"FindColor"                   │number  │0x0000000f (8589934607)
"MatchColor"                  │number  │0x00000000 (64424509440)
Это при просмотре базы плагина EdtFind.

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

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by John Doe » Wed 24 Apr, 2013 21:43

Shmuel wrote:Может то, что Enum возвращает пустую таблицу? (предположение навскидку)
Да, так получается.

А вот проверить размер таблицы, возвращаемой getTable почему-то не удаётся, оператор # всегда даёт 0.
Не могу понять что не так с этой таблицей?

В тексте я случайно использовал идентификатор table, но это не при чём (заменил на tbl)

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by Shmuel » Wed 24 Apr, 2013 21:47

John Doe wrote:А вот проверить размер таблицы, возвращаемой getTable почему-то не удаётся, оператор # всегда даёт 0.
Не могу понять что не так с этой таблицей?
Оператор # даёт размер "массива", к "словарной" части таблицы отношения не имеет.
А может в метатаблице дело.

Если хотите проверить, пустая ли таблица, пользуйтесь next(tbl) == nil

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

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by John Doe » Wed 24 Apr, 2013 21:58

Действительно, спасибо за идею.

Добавил вот это:

Code: Select all

  obj = far.CreateSettings(Plugin.guid)
  Plugin.disable = #obj:Enum(0)==0
  obj:Free()
Теперь сразу видно у каких плагинов есть настройки, но первый вызов занимает некоторое время.
Текст выше уже поправил.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Lua Explorer — изучаем среду Lua в Far manager

Post by Shmuel » Wed 24 Apr, 2013 22:02

Думаю, что плагины без настроек ни к чему помещать в это меню - только мешают.

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

Re: Settings Control

Post by John Doe » Wed 24 Apr, 2013 22:17

Ok.

Теперь бы придумать как изменять настройки...
Возможно было бы проще, если не формировать в таблицу сразу всю структуру настроек, а ограничиться просмотром одного уровня за раз...

Post Reply

Return to “Обсуждение макросов”