Не знаю примет ли 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. Свои пожелания уже почти полностью реализовал.
Но идеи принимаются.
Если кто пожертвует функцию для форматирования больших чисел, то включу (сам не сталкиваюсь).
Можно ли из одного lua-плагина получить глобальную таблицу другого lua-плагина? Иначе теряется смысл делать LuaExplorer плагином.
Где-то вроде проскакивало, что плагины совершенно независимы.
Smitis wrote:Можно ли из одного lua-плагина получить глобальную таблицу другого lua-плагина? Иначе теряется смысл делать LuaExplorer плагином.
Где-то вроде проскакивало, что плагины совершенно независимы.
Полагаю сейчас ничего такого не предусмотрено, но подумать над реализацией можно.
Во-первых библиотека LuaFAR могла бы предоставить какие-то средства.
Во-вторых, плагины вероятно тоже могут обмениваться данными (через C API)
Smitis wrote:
Можно ли из одного lua-плагина получить глобальную таблицу другого lua-плагина? Иначе теряется смысл делать LuaExplorer плагином.
Где-то вроде проскакивало, что плагины совершенно независимы.
Даже если нельзя, то функциональность будет как минимум не хуже, чем в текущем варианте - из макроса ведь тоже таблицу плагина не посмотришь (поправьте, если не прав). Зато можно будет конфигурировать (если вдруг такая надобность появится) стандартизированным образом, из меню конфигурации плагинов. Но это всё, конечно, "если бы да кабы". В принципе, мне нет разницы, вызвать через require или Plugin.Call - вопрос вкуса.
Выяснилось, что тут выложена далеко не последняя версия скрипта...
Я им не занимался уже много лет, но в записях сохранились такие изменения:
При вставке в таблицу, и редактировании значений теперь введённые параметры проверяются на корректность
(количество и значение~=nil)
Функции Lua для работы с массивами не рассчитаны на то, что элементами массива могут быть значиния типа nil
Теперь это учитывается.
(При отображении возвращаемых функциями значений, возможно ещё где-то)
Символ с кодом 0 в ключах и значениях теперь заменяется на '\000'
Ctrl+I управляет режимом сортировки "различать регистр", начальное значение в опции ignore_case.
Не пытаемся работать с upvalues C-функций.
При просмотре объектов типа thread улучшено форматирование traceback.
* mf.msgbox -> far.Message (для возможности использования в luafar плагинах)
Экспериментально: расширение возможностей скрипта, путём добавления новых действий в виде BreakKeys. le(actions,nil,'addBrKeys')
- actions - таблица - список действий, в том же формате, что и штатная brkeys (см.)
- (вторым параметром обычно передаётся заголовок, в данном случае не имеет смысла)
- 'addBrKeys' команда для импорта.
Из скрипта убрана работа с локальными переменными функций.
Действия могут быть добавлены отдельным скриптом se.lua.
John Doe wrote: ↑Tue 05 Nov, 2019 13:16
А где последняя?
В предыдущем сообщении появились ссылки.
@John Doe Не помешала бы краткая инструкция по установке.
В частности, пока я не положил le.lua в Macros\modules, при пере-/загрузке макросов возникала ошибка (предсказуемо), но сейчас не срабатывает макрос. Как починить?