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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

Latest post of the previous page:

По мотивам обсуждения.

Выяснилось, что разделение на модуль и макросы не всем нравится.

Но оба подхода можно совместить в 1 файле: кто хочет просто макрос - копирует в scripts
Кому нужен модуль, для использования в собственных скриптах - копирует в modules.

Ниже пример того, как это можно организовать:
  1. -- в конце файла:
  2. if not Macro then return process end
  3.  
  4. Macro { description = "Lua Explorer";
  5.   area="Common"; key="CtrlShiftF12"; action=function()
  6.     process(_G,'_G')
  7.   end
  8. }
Такой файл, лежащий например в папке scripts, можно вызвать также из командной строки или меню пользователя:
lm:post dofile(win.GetEnv"FARPROFILE"..[[\Macros\scripts\lua_explorer.lua]])(_G,'_G')

Довольно громоздко, модуль вызвать было бы проще: lm:post require"lua_explorer"(_G,'_G')
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

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

Данные сохраняются там в родных для Lua форматах, поэтому обычным sqlite редактором просто так ничего ни просмотреть и ни изменить нельзя.
Shmuel
Posts: 6252
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 369 times

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

Post by Shmuel »

John Doe wrote:Данные сохраняются там в родных для Lua форматах, поэтому обычным sqlite редактором просто так ничего ни просмотреть и ни изменить нельзя.
Несмотря на использование флага FST_DATA, данные там не в "родных Lua форматах", а в текстовом (UTF-8) формате - т.е. обычный Lua скрипт.
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

Shmuel wrote:данные там не в "родных Lua форматах", а в текстовом (UTF-8)
Ни за что не подумал бы, sqliteDB ерунду показывает
EGez
Posts: 145
Joined: Thu 04 Oct, 2012 13:53
Location: Hamburg, DE
Has thanked: 2 times
Been thanked: 2 times

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

Post by EGez »

John Doe wrote:
Shmuel wrote:данные там не в "родных Lua форматах", а в текстовом (UTF-8)
Ни за что не подумал бы, sqliteDB ерунду показывает
Разве это не BLOB? SQLiteDB его воде в соответствии с типом показывает ;)
И могу ли я лист этих значений непосредственно из контеста получить, не обращаясь к самой базе напрямую? Что-то я похожей функции не помню.
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

Может быть я просто не умею использовать SQLiteDB, но не получилось просмотреть записанное
mf.msave("key","param","value")
Если заглянуть в api.lua, то видно что используется функция serialize, я в её работу не вникал, не исключено что именно она делает содержимое "нечитаемым" (прочитать конечно можно с помощью mload)

Нет, mload просто загружает chunk, значит это просто текст. Возможно дело в том, что он хранится как FST_DATA

А что значит обращаться к базе?
В LuaFAR есть эквивалент Settings Control
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

Вот так можно получить представление как это [Settings Control API LuaFAR] работает:

Code: Select all

  mf.msave("keyA","param","value")
  mf.msave("keyB","param",{value=1})
  local obj = far.CreateSettings()
  require"lua_explorer"(obj:Enum())
Так мы получим список ключей, и далее нужно (как-то) получить список параметров каждого ключа, и к ним уже можно применить mf.mload

P.S.
Не факт конечно, что lua_explorer стоит этим нагружать
Shmuel
Posts: 6252
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 369 times

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

Post by Shmuel »

John Doe wrote:

Code: Select all

  mf.msave("keyA","param","value")
  mf.msave("keyB","param",{value=1})
В базу будет записано:
-- в 1-м случае "return \"value\""
-- во 2-м случае "return {[\"value\"]=1}"

Но записано, как блоб. Если вы вытащите этот блоб, то увидите.
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

Часть обсуждения отделена в отдельную ветку: http://forum.farmanager.com/viewtopic.php?f=15&t=7934

EGez
Просьба обратить отдельное внимание на использование вашего скрипта для просмотра произвольных таблиц.
В частности, чтобы не ползли столбцы стоит обрезать длинные строки.

Также найден дефект:
Shmuel wrote:Заметил дефект в Lua Explorer:

Code: Select all

"FindColor"                   │number  │0x0000000f (8589934607)
"MatchColor"                  │number  │0x00000000 (64424509440)
Это при просмотре базы плагина EdtFind.
EGez
Posts: 145
Joined: Thu 04 Oct, 2012 13:53
Location: Hamburg, DE
Has thanked: 2 times
Been thanked: 2 times

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

Post by EGez »

John Doe wrote:[. . .]
EGez
Просьба обратить отдельное внимание на использование вашего скрипта для просмотра произвольных таблиц.
В частности, чтобы не ползли столбцы стоит обрезать длинные строки.

Также найден дефект: http://forum.farmanager.com/viewtopic.p ... 83#p108683
Ребят, у меня сейчас довольно трудновато со временем, не все сразу, по мере возможности.

Обрезание строк уже было запланировано.
Что касается дефекта, похоже на то, что функция format не умеет с такими числами работать:

Code: Select all

macro:post printf("0x%x", 8589934607)  -> 0xf
macro:post printf("0x%x", 64424509440) -> 0x0
Пробуем:

Code: Select all

macro:post printf("0x%x", -1)       -> 0xffffffff
macro:post printf("0x%x", 2^32 - 1) -> 0xffffffff
macro:post printf("0x%x", 2^32)     -> 0x0
macro:post printf("0x%x", 2^32 + 1) -> 0x1
Числа в скобках не форматируются, а просто в текст преобразуются, видимо поэтому нормально отображаются.
Shmuel
Posts: 6252
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 369 times

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

Post by Shmuel »

EGez wrote:Что касается дефекта, похоже на то, что функция format не умеет с такими числами работать:

Code: Select all

macro:post printf("0x%x", 8589934607)  -> 0xf
macro:post printf("0x%x", 64424509440) -> 0x0
Разбейте число на две 32-битных части и примените к ним следующий формат:

Code: Select all

"0x%x%08x" 
EGez
Posts: 145
Joined: Thu 04 Oct, 2012 13:53
Location: Hamburg, DE
Has thanked: 2 times
Been thanked: 2 times

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

Post by EGez »

А сам бы я конечно же не догадался... ;)
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

EGez wrote:Ребят, у меня сейчас довольно трудновато со временем, не все сразу, по мере возможности.
Разумеется )

Добавлю пожеланий:
[*] таблицы снабжать символом пометки (типа ►)
[*] при просмотре значений:
- многострочный текст выравнивать по левому краю
- возможность скопировать имя/значение по хоткею
[*] для функций: просмотр среды
[*] для функций: информация debug
- действия в меню просмотра getinfo: в первую очередь возможностью открытия редактора в месте определения функции
- просмотр upvalues
[*] ограничивать длину строк в списке

Отдельно выделю пожелания, касающиеся использования lua_explorer из других скриптов:
[*] выводить таблицы в начале списка
[*] возможность отключать средства редактирования (F4, Del)
[*] возможность отключать автоматическое назначение хоткеев
[*] показывать названий ключей без кавычек
Возможно стоит обходиться без кавычек везде (кроме значений с пробелами по краям)
[*] Задавать мин. ширину списка
Эти опции можно было бы передавать при вызове флагами

Учитывая бесконечность пожеланий, возможно имеет смысл предусмотреть возможность подключения к основному скрипту пользовательские расширения.
Типа пользовательская функция, вызываемая по определённому хоткею (F11).
Для разных типов значений могут быть отдельные функции.
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

[*] для функций: просмотр среды

Иногда полезно, только что попробовал и нашёл избыточные глобальные переменные
EGez
Posts: 145
Joined: Thu 04 Oct, 2012 13:53
Location: Hamburg, DE
Has thanked: 2 times
Been thanked: 2 times

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

Post by EGez »

Пометки таблиц? Ну, есть же колонка type, хотя, если только для наглядности - можно сделать, а вот в отключении "средств редактирования" я смысла вообще не вижу. Чтобы случайно что-то изменить, нужна, скажем, не самая короткая последовательность нажатий...

А остальное почти все уже думалось и на когда-нибудь намечено... Надо будет todo в шапке чтоли сделать...

ЗЫ: К дефекту еще раз, по поводу форматирования "0x%x%x", а если в таблицах еще большие числа будут? Кстати, возможны ли они, чисто технически?

Code: Select all

macro:post print(2^64 - 1) -> 1.844674407371e+019
macro:post print(2^64)     -> 1.844674407371e+019
macro:post print(2^64 + 1) -> 1.844674407371e+019
macro:post print(2^64 + 2) -> 1.844674407371e+019
User avatar
John Doe
Бюрократ
Posts: 13104
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 44 times
Been thanked: 325 times

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

Post by John Doe »

EGez wrote:Пометки таблиц? Ну, есть же колонка type, хотя, если только для наглядности - можно сделать,
Именно для наглядности, таблицы как подменю.

EGez wrote:а вот в отключении "средств редактирования" я смысла вообще не вижу.
Смысл не в том, чтобы защититься от изменений, а о том, чтобы не смущать пользователя видимостью функциональности, которая не сработает.
Речь об использовании lua_explorer в других скриптах.
Post Reply

Return to “Полезные макросы и скрипты”