Как получить handle панели в LUA-скрипте?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
ionic
Posts: 19
Joined: Mon 04 Mar, 2019 21:29

Как получить handle панели в LUA-скрипте?

Post by ionic » Mon 04 Mar, 2019 21:34

День добрый!
Проштудировал всю энциклопедию, но так и не нашел ответа на свой вопрос.

Т.е. получить активную / пассивную панель я могу, могу запросить по ней инфо и по-идее там должен быть хэндл данной панели, однако ничего такого там нет. Как получить хэндл панели, чтобы в дальнейшем использовать его, а не признак активности/пассивности?

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

Как получить handle панели в LUA-скрипте?

Post by Shmuel » Mon 04 Mar, 2019 21:41

local info = panel.GetPanelInfo (nil, 1)
far.Show(info.PluginHandle)

ionic
Posts: 19
Joined: Mon 04 Mar, 2019 21:29

Как получить handle панели в LUA-скрипте?

Post by ionic » Tue 05 Mar, 2019 05:43

Это не работает, было проверено, выводит 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 )

ionic
Posts: 19
Joined: Mon 04 Mar, 2019 21:29

Как получить handle панели в LUA-скрипте?

Post by ionic » Tue 05 Mar, 2019 05:51

Такое я пробовал сразу после прочтения энциклопедии.
При этом я могу получить например текущее имя файла с панели через выбор ее как пассивной/активной - т.е. сами панели живы и доступны.
FAR стоит последний но не nightly, запускал и из командной строки, так и из UserMenu.

ionic
Posts: 19
Joined: Mon 04 Mar, 2019 21:29

Как получить handle панели в LUA-скрипте?

Post by ionic » Tue 05 Mar, 2019 06:00

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 там нет вообще.

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

Как получить handle панели в LUA-скрипте?

Post by Shmuel » Tue 05 Mar, 2019 06:58

PluginHandle имеется в случае, когда получают информацию о панели плагина (что, в общем-то и следует из имени).
Для панели Фара будет nil.
Откройте какой-нибудь архив арклайтом и повторите вашу проверку для панели арклайта.

ionic
Posts: 19
Joined: Mon 04 Mar, 2019 21:29

Как получить handle панели в LUA-скрипте?

Post by ionic » Tue 05 Mar, 2019 07:13

Хм, очень интересно.

А что делать, если я хочу работать с обычными панелями FAR-а?
Почему так сделано? Ведь панель самого FAR-а - это по-сути точно такой-же плагин и у него тоже должен быть handle (и наверняка он и есть где-то внутри).

Я понимаю, что продукт бесплатный и что-то требовать от него я просто не имею права - но ведь такой подход - это источник вечных косяков и костылей.

Если плагин поменял местами панели, придется как-то это отслеживать, чтобы понимать первоначальное их расположение и так далее?

Я правильно понимаю, что это никак по другому не решить?

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

Как получить handle панели в LUA-скрипте?

Post by Shmuel » Tue 05 Mar, 2019 07:18

ionic wrote:
Tue 05 Mar, 2019 07:13
Я правильно понимаю, что это никак по другому не решить?
Я не знаю, что вы собираетесь решать. Плагинописатель играет по правилам API плагинов, нравятся они ему или нет.

ionic
Posts: 19
Joined: Mon 04 Mar, 2019 21:29

Как получить handle панели в LUA-скрипте?

Post by ionic » Tue 05 Mar, 2019 07:21

Shmuel wrote:
Tue 05 Mar, 2019 07:18
Я не знаю, что вы собираетесь решать.
Я собирался решать как обратится к нужной родной панели FAR-а без признака ее активности/пассивности, чтобы быть независимым от этого.

Вроде-бы я четко тему обозначал.
Last edited by ionic on Tue 05 Mar, 2019 07:55, edited 2 times in total.

User avatar
zg
zero-gravity
Posts: 5585
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 91 times
Contact:

Как получить handle панели в LUA-скрипте?

Post by zg » Tue 05 Mar, 2019 09:57

ionic wrote:
Tue 05 Mar, 2019 07:13
Почему так сделано? Ведь панель самого FAR-а - это по-сути точно такой-же плагин и у него тоже должен быть handle (и наверняка он и есть где-то внутри).
если вы в этом так уверены, дайте ссылку на код.

ionic
Posts: 19
Joined: Mon 04 Mar, 2019 21:29

Как получить handle панели в LUA-скрипте?

Post by ionic » Tue 05 Mar, 2019 11:18

zg wrote:
Tue 05 Mar, 2019 09:57
если вы в этом так уверены
"Наверное" != "уверен", нет? :D

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

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

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

Код макроса выложу сюда потом.
Last edited by ionic on Tue 05 Mar, 2019 11:23, edited 3 times in total.

Post Reply

Return to “Нужна помощь”