Навеяноэтим макросом .
Чего мне не хватало в исходном:
1. Фильтр (ну очень не хватает!)
2. Возможность просматривать результаты вызова функций в таблице, если либо функция возвращает несколько значений, либо одно, но таблицу.
3. Взять текущий элемент в буфер
4. Если макрос запущен из редактора, возможности "подхватывать" стартовую строку из редактора
-----
Т.к. всякими "красивостями" для себя любимого заниматься не хочется, то скрипт сделан с минимальными трудозатратами. Просто вызов far.Menu в цикле.
Вызов из панелей (стартовое значение - _G)
Для поиска действуют общие правила: либо Ctrl+Shift+F, либо правый Alt. Получается примерно так:
То же с фильтром «pane»
Заходим в panel, встаём на GetPanelInfo, жмём Enter, вводим параметры (я ввёл nil, 0), получаю таблицу:
Результат вызова _G.panel.GetPanelInfo(nil,0)
Стоя на любом элементе табли можно нажать Ctrl+Enter, и после выхода из скрипта "полный путь" к элементу будет помещён в буфер. В течение всего сеанса выполнения программы всё, что Вы помещаете в буфер, будет к нему добавляться. Можно также пометить несколько строк - они се будут помещены в буфер.
В любой момент можно вернуться к предыдущей таблице (клавиша BackSpace при выключенном фильтре). Можно также напрямую ввести путь к таблице, нажав F4; при этом история очищается. Т.е. вернуться к предыдущей таблице BackSpace-ом уже не получится.
Как-то так… Если тема кому-нить покажется полезной, можно попробовать "облагородить" (хелп, регистрация, локализация…)
John Doe wrote: ↑Mon 04 Nov, 2019 07:49
Больше напоминает LuaExplorer.
Изначально хотел просто подправить TableView. Конкретно - подправить функцию просмотра результатов вызова функций так, чтоб можно было продолжить работу с результатами-таблицами. А потом получилось, что вроде как всё остальное в TableView - лишнее. В результате из здоровенного проекта с модулем и объектами получился один макрос из 200 строчек. Заодно он втянул в себя функционал того, что мы с Вами обсуждали здесь. Дополнить поиском по всем таблицам - и вуа-ля.
О! Точно! Доделаю...
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 10:48
by buniak_a_h
John Doe wrote: ↑Mon 04 Nov, 2019 07:49
Больше напоминает LuaExplorer.
Да, точно! Практически тоже самое.
Что-то у меня Ваш le вылетел... Как получилось:
1.
╔════════════════════════ Error ═════════════════════════╗
║ function: panel.GetPanelInfo ║
║ arguments: nil, 0 ║
║ values: nil ║
║ ║
║ bad argument #2 to '?' (number expected, got no value) ║
╟────────────────────────────────────────────────────────╢
║ { OK } ║
╚════════════════════════════════════════════════════════╝
ЧЯДНТ?
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 12:40
by John Doe
У меня не воспроизводится.
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 12:50
by John Doe
Я когда-та намеревался реализовать апи для luaexplorer, и вроде бы что-то даже успел сделать.
Т.е. если какой-то функциональности не хватает, используя апи можно было бы добавить, не изобретая новый le 'но немного другой'.
Например, что если бы можно было добавлять свои действия в виде breakkeys?
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 17:25
by buniak_a_h
John Doe wrote: ↑Mon 04 Nov, 2019 12:40
У меня не воспроизводится.
Прямо в командной строке ввёл: lua:_G.BB_Deb={deb=function(...) return ... end} lua:require"le"(_G)
Перешёл на BB_Deb, вызвал deb с параметрами 1,nil,3, в ответе только «1»:
╔═ Function call results ══╗
║ 1. number 1 ║
║ 2. nil nil ║
║ 3. number 3 ║
╚═══════ 3 results ════════╝
Передаваемые параметры "отсекаются" по nil.
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 17:36
by buniak_a_h
Совершенно точно функция luaexp_prompt возвращает массив из одного элемента. Во всяком случае для 1,nil,3 сразу после вызова этой функции вызов far.Show('args[3]=', args[3]) печатает nil !!!
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 19:13
by buniak_a_h
John Doe, фантастика какая-то.
Смотрю модуль <…>\modules\le.lua, в нём функцию luaexp_prompt. Список параметров - 1, nil, 3
До вызова table.remove массив res = {true,1,nil,3} (правильный)
Вызываю table.remove(res,1)
Смотрю res - там {1,nil,nil, 3} -- это как ??? Куда писать?
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 19:30
by zg
Most functions in the table library assume that the table represents an array or a list. For these functions, when we talk about the "length" of a table we mean the result of the length operator.
The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 20:45
by buniak_a_h
John Doe, я понял, в чём Ваша ошибка.
Поясню для удобства для случая когда аргументы заданы [c]1, nil, 3[/c](назову эту строку ArgString); для такой таблицы unpack({1,nil,3}) возвращает одно значение: «1».
В Вашем скрипте вы компилируете строку return 1,nil,3 через pcall в виде: args={pcall('return '..Argstring)}; в результате этого вызова получаем таблицу {true, 1, nil, 3}. Далее Вы проверяете и удаляете первый элемент (в args остаётся {1,nil,3} и затем вызываете функцию, передавая ей unpack(args) - вот на этом этапе теряется всё после nil-а.
На самом деле не надо составлять список аргументов. Скомпилировали ArgFunc = loadstring('return '..ArgString), проdерили, что не нуль, а запускать не надо. Запускать -только при вызове самой функции в виде:
pcall(func, ArgFunc()) - и всё будет работать.
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 20:47
by buniak_a_h
zg, я не понял, при чём тут "длина" таблицы. Описание ошибки я представил в предыдущем сообщении. Странно, что у автора "не повторяется". Ошибка устойчивая и объяснимая. Ну, или у меня le старой системы.
Аналог браузера таблиц Lua с доп возможностями
Posted: Mon 04 Nov, 2019 21:12
by zg
buniak_a_h wrote: ↑Mon 04 Nov, 2019 20:47zg, я не понял, при чём тут "длина" таблицы.
для того, чтобы выполнить операцию remove, нужно удалить указанный элемент и после этого сдвинуть все последующие элементы влево. вот эти все последующие и определяются длиной таблицы, а она в вашем случае может быть и 2 и 4. и то и то — правильно.
buniak_a_h wrote: ↑Mon 04 Nov, 2019 20:47zg, я не понял, при чём тут "длина" таблицы.
для того, чтобы выполнить операцию remove, нужно удалить указанный элемент и после этого сдвинуть все последующие элементы влево. вот эти все последующие и определяются длиной таблицы, а она в вашем случае может быть и 2 и 4. и то и то — правильно.
Ну...
на самом деле как выяснилось ошибается не только remove (может ошибиться, а может и нет; во всяком случае бельше не ошибается), а unpack - вот он точно ошибается.
Тут под словом «ошибается» я подразумеваю несоответствие результата логически ожидаемому, а не несоответствие документации.
В частности, table.remove({true,1,nil,3},1) у меня всё время приводит в tab={1,nil,3}. И это правильно.
вообще-то это не у меня. Я просто нарвался на вылет при вызове функции. А там в параметрах вполне частая ситуация с nil-ом