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 если вы в этом так уверены
"Наверное" != "уверен", нет? :D

Но сам FAR как-то же обращается к нужной панели? - хотя да, исходники я не смотрел.
Для меня просто странно, что для одного и того-же интерфейса сделано поведение, различающиеся способами доступа.

Я так понимаю, обратится к панелям самого FAR-а жестко, минуя active/passive нельзя - так что я написал уже через них, просто не думал что нет такого тривиального и нужного поведения - думал что не разобрался с доками.

В любом случае спасибо, задачу я решил, хоть и считаю, что такой способ работы с панелями в корне не верен и чреват проблемами.

Код макроса выложу сюда потом.