panel API: использование PANEL_ACTIVE/PANEL_PASSIVE в первом аргументе

Здесь обсуждается всё, что касается макросов.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

Latest post of the previous page:

John Doe wrote:Это userdata, а panel.ClosePanel ожидает integer.
значит там ошибка.
John Doe wrote:Да и логически не сходится: обе панели могут принадлежать одному плагину, значит хэндлы должны отличаться?
да. именно по этому хендлу плагин и отличает разные экземпляры своих панелей. об этом, кстати написано в FarEncyclopedia.ru.chm.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

zg wrote:да. именно по этому хендлу плагин и отличает разные экземпляры своих панелей. об этом, кстати написано в FarEncyclopedia.ru.chm.
http://api.farmanager.com/ru/exported_f ... openw.html
Здесь?

Меня смутило то, что в описании PanelInfo этот хендл неудачно назван описателем плагина. Теперь буду знать, спасибо.

А с другой стороны, разве мою задачу нельзя решить проще?
В описании PanelControl вроде бы недвусмысленно разрешают в качестве описателя использовать константы PANEL_ACTIVE/PANEL_PASSIVE.
Поэтому мне не очень непонятно, зачем в LuaFAR два отдельных параметра (handle, whatpanel), когда можно было бы использовать один.
Или нельзя? Во всяком случае у меня константы PANEL_ACTIVE/PANEL_PASSIVE работают.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

John Doe wrote:
zg wrote:да. именно по этому хендлу плагин и отличает разные экземпляры своих панелей. об этом, кстати написано в FarEncyclopedia.ru.chm.
http://api.farmanager.com/ru/exported_f ... openw.html
Здесь?
Ан нет, не так всё просто...
Формат и содержание описателя не важны для Far Manager'а - они могут быть, к примеру, адресом внутреннего объекта плагина, или адресом структуры с данными плагина, или любым другим уникальным идентификатором, отличным от нуля.
Из этого вытекает, что если панели принадлежат разные плагинам, то их описатели могут не быть уникальны.

Следовательно использовать этот описатель вне плагина как минимум ненадёжно (если вообще возможно).
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

panel.GetPanelInfo (handle, whatpanel)
После вчерашнего фикса функция требует первых аргументом значение типа uservalue.

Подозреваю что это поломалось случайно, поскольку в Энциклопедии сказано:
https://api.farmanager.com/ru/service_functions/panelcontrol.html wrote:hPanel
Текущий описатель панели. При запросе информации относительно активной панели установите этот параметр равным PANEL_ACTIVE, для пассивной - PANEL_PASSIVE. Это позволяет использовать эту функцию в командах плагина без создания новой панели. Также PANEL_ACTIVE(PANEL_PASSIVE) можно использовать для неплагиновой панели.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

- Данное изменение не было случайным, а вполне намеренным.
- Энциклопедия в данном случае не определяющий документ, смотреть надо в мануале LuaFAR. (Да, там не сказано прямо "userdata").
- Если 1-й аргумент был number, и это работало, то только благодаря "чётному количеству багов". Теперь стало нечётным.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Shmuel wrote: Tue 31 Dec, 2019 11:00 - Данное изменение не было случайным, а вполне намеренным.
Теперь вы объяснили, но из changelog этого не следует:

Code: Select all

shmuel 30.12.2019 16:05:03 +0200 - build 721

1. A fix in GetOpenPanelInfo() for LuaMacro panel modules.
Shmuel wrote: Tue 31 Dec, 2019 11:00 Если 1-й аргумент был number, и это работало, то только благодаря "чётному количеству багов"
Баги действительно надо искоренять.

Но предлагаю рассмотреть возможность реализации number в качестве фичи.
Мы использовали поскольку было удобно:
- один параметр вместо двух.
- ближе к C API.
А для чего дополнительные абстракции, если они не упрощают использование?

Безусловно, на этот счёт могут быть и иные мнения, иначе второй аргумент и не появился бы.
Но ведь можно сделать всё совместимым образом.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

John Doe wrote: Tue 31 Dec, 2019 11:24 Теперь вы объяснили, но из changelog этого не следует:
Данное изменение относится к пункту 2 в чейнжлоге.

Насчёт вашего предложения по модификации данного API (кажется есть и тикет на мантисе), то проблема видимо именно в трудности сделать это совместимым образом.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Shmuel wrote: Tue 31 Dec, 2019 11:30 кажется есть и тикет на мантисе
Нет, до сих пор не было надобности таком тикета, поскольку всё работало желаемым образом (во всяком случае создавалось такое впечатление).

P.S.
https://bugs.farmanager.com/view.php?id=3760
Last edited by John Doe on Tue 31 Dec, 2019 13:14, edited 1 time in total.
Post Reply

Return to “Обсуждение макросов”