Не знаю примет ли EGez мои изменения, поэтому пока форк.
В данный момент отличия от оригинального скрипта таковы:
Скрипт преобразован в модуль, имя выбрано короткое "le", для быстрого доступа.
Изменения
таблицы и функции в списке помечаются
Ключи и значения в списке закавычиваются только в случае пустой строки "", или наличии концевых пробелов
Обрезка чрезмерно длинных ключей
При просмотре многострочных значений текст больше не центрируется
Не проглатываются амперсанды в меню, и при просмотре значений (в заголовке) FMENU_AUTOHIGHLIGHT и FMENU_SHOWAMPERSAND почему-то несовместимы, поэтому 'автохоткеи' отключены.
В ряде мест внедрена защита от ошибок при вызове сторонних функций (через pcall)
при индексации таблиц с метаметодом __index
при редактировании значения, и вставке значения в таблицу (F4, Ins)
в параметрах при запуске функций (из списка по Enter)
Обработка статуса возвращаемого pcall при запуске функций.
При ошибке выдаётся соответствующее сообщение.
При отсутствии метатаблицы по CtrlM теперь не показывается message c 'nil'
Новая функциональность
Копирование в буфер:
- значение: CtrlIns
- ключ: CtrlShiftIns
по F3 для объектов типа 'thread' показывается debug.traceback
для функций:
CtrlUp: просмотр и редактированиеupvalues (полезно при вызове из собственных скриптов, в отладочных целях)
CtrlDown: просмотр и редактирование окружения функций (environment).
Используется debug.getfenv, что также позволяет получить окружение объектов типа 'userdata' и 'thread'
AltF4: открытие модального редактора в месте определения функции
при вызове из собственных скриптов доступен просмотр и редактированиелокальных переменных Ctrl1 - Ctrl9: выбор уровня стека вызовов
Переходы по уровням не вложены, т.е. по Esc меню будет сразу закрыто.
Для перехода в просмотр глобальной среды можно использовать хоткей CtrlG
Более наглядный просмотр стека будет позже, отдельной утилитой (пока прототип)
при вызове из собственных скриптов можно указать необходимое действие: 'upvalues', 'locals', 'env', 'mt', 'info', 'jitinfo', 'registry'
Использование:
Если вы не планируете вызывать lua explorer из скриптов, то достаточно положить файл в папку scripts, и макрос подхватится (CtrlShiftF12)
Для использования в качестве модуля скрипт необходимо положить в папку modules.
Использовать можно так:
Если нужно вызвать из меню пользователя, то можно так: lua: require"le"(_G,'_G')
Кроме того, для быстрого доступа может быть удобно создать глобальную переменную.
Для этого в любом из скриптов в scripts надо добавить строчку _G.le = require"le"
Примечание: Это однозначно удобно для быстрого доступа в процессе отладки, но нежелательно, чтобы отлаженный скрипт или макрос полагался на глобальную переменную (это особенно важно при обмене макросами/скриптами).
Подробнее об использовании для отладки собственных скриптов:
Макрос из комплекта открывает глобальное окружение, исследуя структуру которого можно почерпнуть массу сведений.
Но как уже сказано выше, lua explorer можно использовать для просмотра любой таблицы в ваших собственных скриптах.
Для этого нужно указать эту таблицу в качестве аргумента при вызове функции. Второй аргумент - заголовок (опционально). Пример: lua_explorer(mf.GetMacroCopy(1),'1st loaded macro')
Кроме того есть третий (опциональный) параметр, в котором можно сразу указать необходимое действие.
(При этом первый два параметра не всегда имеют смысл) Например: lua_explorer(nil,nil,'locals') - открыть список текущих локальных переменных lua_explorer(eval,'eval','upvalues') - открыть upvalues функции eval Примечание: если locals и upvalues в заданном контексте нет, то lua_explorer не запустится
Полный список возможных действий: 'upvalues', 'locals', 'env', 'mt', 'info', 'jitinfo', 'registry'
P.S. Свои пожелания уже почти полностью реализовал.
Но идеи принимаются.
Если кто пожертвует функцию для форматирования больших чисел, то включу (сам не сталкиваюсь).
John Doe wrote: ↑Tue 05 Nov, 2019 13:16
А где последняя?
В предыдущем сообщении появились ссылки.
@John Doe Не помешала бы краткая инструкция по установке.
В частности, пока я не положил le.lua в Macros\modules, при пере-/загрузке макросов возникала ошибка (предсказуемо), но сейчас не срабатывает макрос. Как починить?
╔════════════════════════════════════════════════════════════════════ LuaMacro ═════════════════════════════════════════════════════════════════════╗
║ ...ming\Far Manager\Profile\Macros\scripts\LuaExpAdv\se.lua:1: module 'le' not found: ║
║ no field package.preload['le'] ║
║ no file 'C:\Users\USERNAME\AppData\Roaming\Far Manager\Profile\Macros\modules\le.lua' ║
║ no file 'C:\Users\USERNAME\AppData\Roaming\Far Manager\Profile\Macros\modules\le\init.lua' ║
║ no file '.\le.lua' ║
║ no file 'C:\Program Files (x86)\Far Manager\lua\le.lua' ║
║ no file 'C:\Program Files (x86)\Far Manager\lua\le\init.lua' ║
║ no file 'C:\Program Files (x86)\Far Manager\le.lua' ║
║ no file 'C:\Program Files (x86)\Far Manager\le\init.lua' ║
║ no file 'C:\Users\USERNAME\AppData\Roaming\Far Manager\Profile\Macros\lib32\le.dll' ║
║ no file '.\le.dll' ║
║ no file 'C:\Program Files (x86)\Far Manager\le.dll' ║
║ no file 'C:\Program Files (x86)\Far Manager\loadall.dll' ║
║ stack traceback: ║
║ [C]: in function 'require' ║
║ ...ming\Far Manager\Profile\Macros\scripts\LuaExpAdv\se.lua:1: in main chunk ║
║ [C]: in function 'xpcall' ║
║ ...ogram Files (x86)\Far Manager\Plugins\LuaMacro\utils.lua:772: in function <...ogram Files (x86)\Far Manager\Plugins\LuaMacro\utils.lua:749> ║
║ [C]: in function 'RecursiveSearch' ║
║ ...ogram Files (x86)\Far Manager\Plugins\LuaMacro\utils.lua:841: in function <...ogram Files (x86)\Far Manager\Plugins\LuaMacro\utils.lua:672> ║
║ [C]: in function 'MacroLoadAll' ║
║ ...am Files (x86)\Far Manager\Plugins\LuaMacro\LuaMacro.lua:361: in function 'Open_CommandLine' ║
║ ...am Files (x86)\Far Manager\Plugins\LuaMacro\LuaMacro.lua:446: in function <...am Files (x86)\Far Manager\Plugins\LuaMacro\LuaMacro.lua:441> ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } [ Edit ] ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
.
Это если я кладу le.lua и se.lua в Macros\scripts\LuaExpAdv\. Класть их вместе с сотней файлов уровнем выше я не хочу из-за их ничего не говорящих имён файлов (о несоответствии моим предпочтениям в именовании я уж и не говорю).
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 14:51
by John Doe
В шапке 'файл с макросом для показа _G'.
Предлагайте как переформулировать, чтобы было понятно с первого раза.
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 14:57
by HaRT
А есть ли способ исправить скрипт так, чтобы пункт (а) из секции «Использование» не приводил к ошибке?:
John Doe wrote: ↑Sun 05 May, 2013 20:26
Если вы не планируете вызывать lua explorer из скриптов, то достаточно положить файл в папку scripts, и макрос подхватится (CtrlShiftF12)
Мне кажется, это будет самое правильное. Ведь я действительно не пытаюсь использовать модуль, но LuaMacro об этом явно не предупредили.
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 15:17
by John Doe
Исправить скрипт нельзя, можно только шапку.
Шапка сейчас не учитывает se.lua, можете убрать его, если так проще.
Уточнять шапку пока не планирую, потому как функциональность экспериментальная (я даже не уверен что работает).
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 15:24
by HaRT
John Doe wrote: ↑Tue 05 Nov, 2019 15:17
Шапка сейчас не учитывает se.lua, можете убрать его, если так проще.
Спасибо, так действительно проще.
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 15:49
by John Doe
Если я буду переделывать шапку, то основным способом установки будет модуль, поскольку сейчас Lua Explorer используется в других скриптах.
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 16:34
by HaRT
John Doe wrote: ↑Tue 05 Nov, 2019 15:49
Если я буду переделывать шапку, то основным способом установки будет модуль
Тогда примите, пожалуйста, пожелание: назвать модуль как-то более говоряще, чем le. Скажем, LuaExpAdv или LuaExplorer2. А то ведь, как я понимаю, сейчас надо именно le.lua положить именно в Macros\modules\…
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 16:44
by John Doe
Исходные мотивы такого наименования действительно спорны, но сейчас модуль является зависимостью для других опубликованных скриптов, и переименовывать его нецелесообразно.
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 16:58
by HaRT
John Doe wrote: ↑Tue 05 Nov, 2019 16:44
переименовывать его нецелесообразно
Это смотря какие цели.
А сложно ли сделать тонкую прослойку со старым именем, которая будет пробрасывать все вызовы в новый модуль с хорошим именем?
И пожелание: при смене сортировки сохранять текущую строку не по её номеру, а по её ключу.
Lua Explorer „Advanced“
Posted: Tue 05 Nov, 2019 17:08
by John Doe
HaRT wrote: ↑Tue 05 Nov, 2019 16:58
А сложно ли сделать тонкую прослойку со старым именем,
Возможно всё. Но я сейчас не считаю целесообразным этим заниматься.
HaRT wrote: ↑Tue 05 Nov, 2019 16:58
при смене сортировки сохранять текущую строку не по её номеру, а по её ключу.
Принято
Lua Explorer „Advanced“
Posted: Thu 21 Nov, 2019 14:25
by Xerox
John Doe wrote: ↑Sun 05 May, 2013 20:26
Если кто пожертвует функцию для форматирования больших чисел, то включу (сам не сталкиваюсь).
И что за фоматирование требуется или предполагется?
Сам пользуюсь твоим творчеством, помогает
-- Формрование строки отображения целого с разделением на группы
SparseIntToStr = function (n,g,c,w)
-- n - выводимое число (целое)
-- g - количество цифр в группе (по умолчанию - 3)
-- c - символ-наполнитель (по умолчанию - chr(160))
-- w - минимальная ширина числа. Отрицательное - прижато к левому краю
g = g or 3
c = c or mf.chr(160)
local s=tostring(n)
for i=s:len()-g+1,2,-g do
s=s:sub(1,i-1)..c..s:sub(i)
end
if w then
s = mf.strpad(s, mf.abs(w),' ', w<0 and 0 or 1)
end
return s
end
Но, по-моему, зря - такое в каких-то библиотеках я уже встречал. Но искать было дольше, чем писать …
Lua Explorer „Advanced“
Posted: Wed 15 Apr, 2020 21:50
by citRiks
Вещь замечательная, а нельзя ли добавить поиск?
Не фильтр, а поиск внутри по таблицам, их полям и значениям
Кто-нибудь делал/сделал подобное?
Lua Explorer „Advanced“
Posted: Wed 15 Apr, 2020 23:23
by buniak_a_h
citRiks, у меня есть показ этих таблиц в виде панели. Там работает Alt+F7. Вариант рабочий, но т.к. после опубликования не было ни одного отзыва, доделывать я не стал. Меня устраивает: то, что надо мне - работает.