Не знаю примет ли 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\. Класть их вместе с сотней файлов уровнем выше я не хочу из-за их ничего не говорящих имён файлов (о несоответствии моим предпочтениям в именовании я уж и не говорю).
А есть ли способ исправить скрипт так, чтобы пункт (а) из секции «Использование» не приводил к ошибке?:
John Doe wrote: ↑Sun 05 May, 2013 20:26
Если вы не планируете вызывать lua explorer из скриптов, то достаточно положить файл в папку scripts, и макрос подхватится (CtrlShiftF12)
Мне кажется, это будет самое правильное. Ведь я действительно не пытаюсь использовать модуль, но LuaMacro об этом явно не предупредили.
John Doe wrote: ↑Tue 05 Nov, 2019 15:49
Если я буду переделывать шапку, то основным способом установки будет модуль
Тогда примите, пожалуйста, пожелание: назвать модуль как-то более говоряще, чем le. Скажем, LuaExpAdv или LuaExplorer2. А то ведь, как я понимаю, сейчас надо именно le.lua положить именно в Macros\modules\…
Исходные мотивы такого наименования действительно спорны, но сейчас модуль является зависимостью для других опубликованных скриптов, и переименовывать его нецелесообразно.
-- Формрование строки отображения целого с разделением на группы
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
Но, по-моему, зря - такое в каких-то библиотеках я уже встречал. Но искать было дольше, чем писать …
Last edited by buniak_a_h on Thu 21 Nov, 2019 15:59, edited 1 time in total.
citRiks, у меня есть показ этих таблиц в виде панели. Там работает Alt+F7. Вариант рабочий, но т.к. после опубликования не было ни одного отзыва, доделывать я не стал. Меня устраивает: то, что надо мне - работает.
Last edited by buniak_a_h on Wed 15 Apr, 2020 23:28, edited 1 time in total.