View Issue Details

IDProjectCategoryView StatusLast Update
0003760Wishes.PluginsLuaMacro / Macro Browserpublic2020-01-20 11:20
ReporterJohnDoe Assigned To 
PrioritynormalSeverityminorReproducibilityN/A
Status newResolutionopen 
Platformx86OSWindows 
Product Version3.0 
Summary0003760: LuaFAR panel API: возможность указать панель числом в первом аргументе
DescriptionПервым аргументом панельные функции принимают хэндл панели (userdata), а в тех случаях, когда в C API используются константы PANEL_ACTIVE/PANEL_PASSIVE - необходимо использовать дополнительный второй параметр.

По стечению обстоятельств, до билда 5543 это и работало желаемым образом, т.е. оба варианта были равнозначны:

panel.GetInfo(nil, 1)
panel.GetInfo(F.PANEL_ACTIVE)
Additional Informationhttps://api.farmanager.com/ru/service_functions/panelcontrol.html
https://forum.farmanager.com/viewtopic.php?p=158333#p158333
TagsNo tags attached.

Relationships

related to 0002742 new Wishes LuaFAR: в функциях panel.* сделать "whatpanel" опциональным параметром 
related to 0003765 closedshmuel Wishes.Plugins LuaFAR: panel.ClosePanel: возможность указать активную/пассивную панель 

Activities

shmuel

2019-12-31 12:43

developer   bugnote:0016676

> По стечению обстоятельств, до билда 5543 это и работало желаемым образом, т.е. оба варианта были равнозначны:
panel.GetInfo(nil, 1)
panel.GetInfo(F.PANEL_ACTIVE)
PANEL_ACTIVE и PANEL_PASSIVE определены в Фаре как -1 и -2 соответственно.
Большинство макрописателей не пользовались этими константами, и ставили соответственно литералы 1 и 0. Возможно, что это в каких-то случаях случайно работало.

JohnDoe

2020-01-03 09:43

updater   bugnote:0016684

> Большинство макрописателей не пользовались этими константами, и ставили соответственно литералы 1 и 0.

В качестве первого аргумента? Не помню, чтобы такое обсуждалось.

1/0 привлекают разве что лаконичностью. Но на практике встречая такое каждый раз напрягаюсь соображая что же оно здесь значит (особенно учитывая что значения макро апи диаметрально противоположны).

shmuel

2020-01-03 10:17

developer   bugnote:0016685

@JohnDoe, данное изменение было сделано в рамках рефакторинга, в данном случае чистки кода в LuaFAR. То, что в качестве 1-го аргумента был допустим number, было исторически связано не с PANEL_ACTIVE / PANEL_PASSIVE, а с тем, что когда-то хэндлы плагиновых панелей представлялись в том числе числами. Поскольку они уже давно представляются только как userdata, я решил очистить код от старого кейса.

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

Поскольку API более-менее заморожено, это накладывает ограничения.
Вернуть как было до изменения, это надо будет как минимум документировать, чтобы не было "стечения обстоятельств". Но мне бы этого сильно не хотелось, ибо данное API тогда получится совсем уж запутанным. Сейчас достаточно просто:
(1) arg1 == хэндл плагиновой панели - второй аргумент игнорируется
(2) arg1 == nil - второй аргумент есть активная/пассивная панель.

JohnDoe

2020-01-03 10:39

updater   bugnote:0016687

Но мне бы этого сильно не хотелось, ибо данное API тогда получится совсем уж запутанным.

shmuel
Как посмотреть, для меня напротив апи станет проще, поскольку буду пользоваться лишь первым вариантом синтаксиса.

Усложнение документации же будет заключаться в небольшом примечании.

(1) arg1 == хэндл плагиновой панели - второй аргумент игнорируется
В качестве хэндла также принимаются числовые константы PANEL_ACTIVE / PANEL_PASSIVE (far.Flags)

(2) arg1 == nil - второй аргумент есть активная/пассивная панель.

shmuel

2020-01-03 10:52

developer   bugnote:0016688

> (2) arg1 == nil - второй аргумент есть активная/пассивная панель.

Которая уже не PANEL_ACTIVE / PANEL_PASSIVE, а 1 / 0. Вот это и есть настоящая запутанность.

Короче, я не вижу проблемы (ни для себя, ни для других) пользоваться 2-мя аргументами в соответствии с документацией. Да, не идеальное API, но вполне рабочее и однозначное.

Поскольку я не склонен на данном этапе это менять, предлагаю не продолжать данную дискуссию в ближайшее время.

Issue History

Date Modified Username Field Change
2019-12-31 12:14 JohnDoe New Issue
2019-12-31 12:43 shmuel Note Added: 0016676
2019-12-31 13:03 shmuel Relationship added related to 0002742
2020-01-03 09:43 JohnDoe Note Added: 0016684
2020-01-03 10:17 shmuel Note Added: 0016685
2020-01-03 10:39 JohnDoe Note Added: 0016687
2020-01-03 10:52 shmuel Note Added: 0016688
2020-01-20 11:20 JohnDoe Relationship added related to 0003765