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

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

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

Post by John Doe »

Утилита, позволяющая просмотреть базу данных выбранного плагина
  1. local F = far.Flags
  2.  
  3. local obj
  4.  
  5.  
  6.  
  7. local function getTable(id)
  8.  
  9.   local enum = obj:Enum(id)
  10.  
  11.   local tbl = {}
  12.  
  13.   for i = 1,enum.Count do
  14.  
  15.     local Name,Type = enum[i].Name,enum[i].Type
  16.  
  17.     local item = Type==F.FST_SUBKEY
  18.  
  19.                  and getTable(obj:OpenSubkey (id, Name))
  20.  
  21.                  or obj:Get (id, Name, Type)
  22.  
  23.     if Type==F.FST_DATA then
  24.  
  25.       if item:match("\nreturn ") then -- plugin LuaMacro
  26.  
  27.         local f = loadstring(item)
  28.  
  29.         item = not f and item or f()
  30.  
  31.       elseif item:match("^do local") then -- other LuaFAR plugins
  32.  
  33.         local f = loadstring(item)
  34.  
  35.         if f then
  36.  
  37.           local env = {}
  38.  
  39.           setfenv(f,env)()
  40.  
  41.           item = env.Data
  42.  
  43.         end
  44.  
  45.       end
  46.  
  47.     end
  48.  
  49.     tbl[Name] = item
  50.  
  51.   end
  52.  
  53.   return #enum>0 and tbl
  54.  
  55. end
  56.  
  57.  
  58.  
  59. local PluginsList = {}
  60.  
  61. for i,p in ipairs(far.GetPlugins ()) do
  62.  
  63.   local Info = far.GetPluginInformation (p)
  64.  
  65.   local Plugin = {}
  66.  
  67.   Plugin.text = Info.GInfo.Title
  68.  
  69.   Plugin.guid = Info.GInfo.Guid
  70.  
  71.   obj = far.CreateSettings(Plugin.guid)
  72.  
  73.   Plugin.hidden = #obj:Enum(0)==0
  74.  
  75.   obj:Free()
  76.  
  77.   PluginsList[i] = Plugin
  78.  
  79. end
  80.  
  81. local item, pos
  82.  
  83. repeat
  84.  
  85.   item, pos = far.Menu({SelectIndex=pos},PluginsList)
  86.  
  87.   if item then
  88.  
  89.     obj = far.CreateSettings(item.guid)
  90.  
  91.     require"le"(getTable(F.FSSF_ROOT),"")
  92.  
  93.     obj:Free()
  94.  
  95.   end
  96.  
  97. until not item
Предполагается модуль lua_explorer с модификациями отсюда.
(Можно также tableview, преобразованный в модуль.)

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

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

Update
Работа с настройками самого фара обсуждается тут.
Пример работы с историями: http://forum.farmanager.com/viewtopic.php?f=15&t=8289
User avatar
SUSim
Posts: 1633
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 25 times

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

Post by SUSim »

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

Update
куда добавил?
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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

Теорией тут вроде и не пахнет, но побочный продукт есть: просмотр базы любого плагина.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

Code: Select all

4.lua:20: attempt to call a boolean value
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

require"lua_explorer"(getTable(0),"")
Предполагается модуль lua_explorer, выложен чуть выше в теме.
Можно и ваш tableview, который я тоже преобразовывал в модуль: require"far2.tableview"("settings",table)
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

John Doe wrote:require"lua_explorer"(getTable(0),"")
Предполагается модуль lua_explorer, выложен чуть выше в теме.
Ну так я его и скачал, поместил в modules, затем запустил lm:post @4.lua, где 4.lua - ваш скрипт для просмотра баз плагинов.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Значит у вас зачем-то определена глобальная переменная Macro )
Вот эту строку модуля if not Macro then return process end замените на do return process end
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

P.S. Здорово вы придумали!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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


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

Update
Текст обновлён, актуальная версия будет в шапке.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

Кстати, наверное лучше match("^return"), то-есть "return" только в начале строки.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

Code: Select all

"FindColor"                   │number  │0x0000000f (8589934607)
"MatchColor"                  │number  │0x00000000 (64424509440)
Это при просмотре базы плагина EdtFind.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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

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

В тексте я случайно использовал идентификатор table, но это не при чём (заменил на tbl)
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

Если хотите проверить, пустая ли таблица, пользуйтесь next(tbl) == nil
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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

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

Code: Select all

  obj = far.CreateSettings(Plugin.guid)
  Plugin.disable = #obj:Enum(0)==0
  obj:Free()
Теперь сразу видно у каких плагинов есть настройки, но первый вызов занимает некоторое время.
Текст выше уже поправил.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

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