Page 1 of 1
Как получить handle панели в LUA-скрипте?
Posted: Mon 04 Mar, 2019 21:34
by ionic
День добрый!
Проштудировал всю энциклопедию, но так и не нашел ответа на свой вопрос.
Т.е. получить активную / пассивную панель я могу, могу запросить по ней инфо и по-идее там должен быть хэндл данной панели, однако ничего такого там нет. Как получить хэндл панели, чтобы в дальнейшем использовать его, а не признак активности/пассивности?
Как получить handle панели в LUA-скрипте?
Posted: Mon 04 Mar, 2019 21:41
by Shmuel
local info = panel.GetPanelInfo (nil, 1)
far.Show(info.PluginHandle)
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 05:43
by ionic
Это не работает, было проверено, выводит nil nil
Запускаю так: lua:@полныйпутьдоскриптаю
Code: Select all
local api = panel.GetPanelInfo( nil, 1 )
local ppi = panel.GetPanelInfo( nil, 0 )
far.Show( api.PluginHandle )
far.Show( ppi.PluginHandle )
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 05:51
by ionic
Такое я пробовал сразу после прочтения энциклопедии.
При этом я могу получить например текущее имя файла с панели через выбор ее как пассивной/активной - т.е. сами панели живы и доступны.
FAR стоит последний но не nightly, запускал и из командной строки, так и из UserMenu.
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 06:00
by ionic
Code: Select all
Вот дамп GetPanelInfo:
{
["ViewMode"] = 2,
["SortMode"] = 2,
["PanelType"] = 0,
["PanelRect"] = {
["right"] = 119,
["left] = 60,
["bottom"] = 38,
["top"] = 0,
} ,
["TopPanelItem"] = 1,
["ItemsNumber"] = 3,
["Flags"] = 12579,
["CurrentItem"] = 3,
["SelectedItemsNumber"] = 1,
["OwnerGuid"] =
}
PluginHandle там нет вообще.
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 06:58
by Shmuel
PluginHandle имеется в случае, когда получают информацию о панели плагина (что, в общем-то и следует из имени).
Для панели Фара будет nil.
Откройте какой-нибудь архив арклайтом и повторите вашу проверку для панели арклайта.
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 07:13
by ionic
Хм, очень интересно.
А что делать, если я хочу работать с обычными панелями FAR-а?
Почему так сделано? Ведь панель самого FAR-а - это по-сути точно такой-же плагин и у него тоже должен быть handle (и наверняка он и есть где-то внутри).
Я понимаю, что продукт бесплатный и что-то требовать от него я просто не имею права - но ведь такой подход - это источник вечных косяков и костылей.
Если плагин поменял местами панели, придется как-то это отслеживать, чтобы понимать первоначальное их расположение и так далее?
Я правильно понимаю, что это никак по другому не решить?
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 07:18
by Shmuel
ionic wrote: ↑Tue 05 Mar, 2019 07:13
Я правильно понимаю, что это никак по другому не решить?
Я не знаю, что вы собираетесь решать. Плагинописатель играет по правилам API плагинов, нравятся они ему или нет.
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 07:21
by ionic
Shmuel wrote: ↑Tue 05 Mar, 2019 07:18
Я не знаю, что вы собираетесь решать.
Я собирался решать как обратится к нужной родной панели FAR-а без признака ее активности/пассивности, чтобы быть независимым от этого.
Вроде-бы я четко тему обозначал.
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 09:57
by zg
ionic wrote: ↑Tue 05 Mar, 2019 07:13Почему так сделано? Ведь панель самого FAR-а - это по-сути точно такой-же плагин и у него тоже должен быть handle (и наверняка он и есть где-то внутри).
если вы в этом так уверены, дайте ссылку на код.
Как получить handle панели в LUA-скрипте?
Posted: Tue 05 Mar, 2019 11:18
by ionic
zg wrote: ↑Tue 05 Mar, 2019 09:57
если вы в этом так уверены
"Наверное" != "уверен", нет?
Но сам FAR как-то же обращается к нужной панели? - хотя да, исходники я не смотрел.
Для меня просто странно, что для одного и того-же интерфейса сделано поведение, различающиеся способами доступа.
Я так понимаю, обратится к панелям самого FAR-а жестко, минуя active/passive нельзя - так что я написал уже через них, просто не думал что нет такого тривиального и нужного поведения - думал что не разобрался с доками.
В любом случае спасибо, задачу я решил, хоть и считаю, что такой способ работы с панелями в корне не верен и чреват проблемами.
Код макроса выложу сюда потом.