handle нельзя использовать в качестве ID

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12738
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 36 times
Been thanked: 282 times

handle нельзя использовать в качестве ID

Post by John Doe »

citRiks wrote:
Thu 05 Mar, 2020 16:17
Отмечу лишь что еще @XerRoX-у мешают одинаковые "ручки" (то бишь handles) во многих разных диалогах.
handle нельзя использовать в качестве ID. Это невозможно исправить.
https://t.me/FarManager — Telegram чат

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

John Doe, В вопросе про handle есть два подвопроса:

1.) Можно ли дать handle Search-у ? не в качестве ИД а просто чтобы был для начала

2.) Почему нельзя?
Большинство hаndles уникальны в пределах сессии (но не все),
и остаются теми же для того же окна, потому в принципе можно их использовать в качестве ИД с ограниченным успехом.
Для полного успеха хотелось бы чтобы все были уникальны, если же есть того техническая невозможность - то Ок.

В целом пункт (2.) действительно некриитичен,
так как для уникальной идентификации придуман CRC32,
но остается предложение (1.)

User avatar
John Doe
Бюрократ
Posts: 12738
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 36 times
Been thanked: 282 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by John Doe »

citRiks wrote:
Fri 06 Mar, 2020 09:17
1.) Можно ли дать handle Search-у ? не в качестве ИД а просто чтобы был для начала
Хэндл это свойство диалога (и меню).
А FastFind не диалог.
citRiks wrote:
Fri 06 Mar, 2020 09:17
Большинство hаndles уникальны в пределах сессии (но не все),
Хэндл это по сути указатель. Адрес диалога в памяти.
Он уникален в момент своего существования, а более ничего не гарантируется.
И как по мне, это не очень хорошо, лучше был бы Integer, уникальный для сессии (как Id редакторов и вьюверов).

Для ваших же задач нужна не только уникальность, а ещё и постоянство, которым обладает guid (там где задан).
А где не задан, но востребован - открываем реквест на мантисе.
citRiks wrote:
Fri 06 Mar, 2020 09:17
так как для уникальной идентификации придуман CRC32,
Боюсь это какая-то ненадёжная галиматья.
https://t.me/FarManager — Telegram чат

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

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by zg »

citRiks wrote:
Fri 06 Mar, 2020 09:17
1.) Можно ли дать handle Search-у ? не в качестве ИД а просто чтобы был для начала
search не диалог. то что он внутри фара реализован как диалог, детали реализации. и да, меню — тоже не диалог. и с одной стороны каждому меню полезно иметь гуид, с другой — я не вижу рациональной составляющей в увеличении размеров меню.
citRiks wrote:
Fri 06 Mar, 2020 09:17
Большинство hаndles уникальны в пределах сессии (но не все),
и остаются теми же для того же окна, потому в принципе можно их использовать в качестве ИД с ограниченным успехом.
Для полного успеха хотелось бы чтобы все были уникальны, если же есть того техническая невозможность - то Ок.
приплыли. handle — это адрес экземпляра класса Dialog. то, что у вас где-то там что-то совпадает — просто стечение обстоятельств. откройте немодальный диалог и скорее всего hаndle у всех диалогов поменяется.

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

John Doe wrote:
Fri 06 Mar, 2020 14:33
А FastFind не диалог.
сложно ли разработчикам будет сделать его диалогом?
тогда можно будет двигать, расширять, и наверное сделать ему autocompletion и историю?
John Doe wrote:
Fri 06 Mar, 2020 14:33
Он (handle) уникален в момент своего существования, а более ничего не гарантируется.
на практике до перезапуска ФАРа остается тем же самым, может когда такое поведение и сломается, Ок
John Doe wrote:
Fri 06 Mar, 2020 14:33
Для ваших же задач нужна не только уникальность, а ещё и постоянство, которым обладает guid (там где задан).
А где не задан, но востребован - открываем реквест на мантисе.
Реквест можно открыть, но какой реквест?
запретить неуникальные ГУИДы диалогов?
Допустим внутри ФАРа станадартные плагины (netbox, etc) вы задали все уникальное,
но ведь есть всякие third-party плагины, да и технически можно назапускать любых диалогов с любыми повторящимися ГУИДами.
far.DialogInit("<whatever-guid-here>", ...)
Если запрещать, и даже если это технически вомзможно, то видимо что много чего сломается в плагинах
Если же не запрещать, то рассчитывать нельзя ни на что.
John Doe wrote:
Fri 06 Mar, 2020 14:33
Боюсь это (CRC32@XeRoX) какая-то ненадёжная галиматья.
Боятся не надо, галиматья надежная, да и caм принцип работы известен и прост.
Last edited by citRiks on Fri 06 Mar, 2020 15:50, edited 1 time in total.

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

zg wrote:
Fri 06 Mar, 2020 14:33
search не диалог. то что он внутри фара реализован как диалог, детали реализации. и да, меню — тоже не диалог.
и с одной стороны каждому меню полезно иметь гуид,
с другой — я не вижу рациональной составляющей в увеличении размеров меню.
продублирую вопрос на всякий случай - можно ли, сложно ли сделать его полноценным в этом смысле диалогом?
* меню можно захотет подвинуть чтобы видеть что за ним
* меню можно захотет временно уменьшить чтобы видеть что за ним
* можно хотеть его видеть в определенной части экрана а не всегда посередине
* возможно динамически его использовать для разных целей, я видел как меню и для показа содержания файла например применяли,
чтобы иметь фильрацию и спрятывание элементов.
т.е. получается динамическая штуковина которой состоянием наверное лучше иметь возможность управлять
* может захотеться видеть меню на весь экран.
для этого всего нужен хэндл (в меню он есть) и постоянный идентификатор (ГУИД).
Может быть ФАР может на основе CRC32/MD5/etc или чего еще генерировать если не задан.
Или же луа-писатель с той же целью применить CRC32@ХеRoX.
zg wrote:
Fri 06 Mar, 2020 14:33
то, что у вас где-то там что-то совпадает — просто стечение обстоятельств.
откройте немодальный диалог и скорее всего hаndle у всех диалогов поменяется.
немодальный диалог это так?
far.DialogInit(win.Uuid(), -1, -1, 20, 5, nil, {{far.Flags.DI_TEXT, 1, 1, 0, 0, 0, 0, 0, 0, "abc 123"}}, far.Flags.FDLG_NONMODAL, nil)
практика показывает что не меняется.
я согласен что handle в качестве uniqueId не идеальное решение, в силу того что действительно иногда дуплицируется, но чтобы он менялся я не видел, верю что это возможно, но видимо редко, думаю что пользователя ReXiZeRa это устроит.
Именно изза неидеальности хендла сейчас есть CRC32, и это будет на 100% безотказно уникально и постоянно.
Недостаток - немного лишнего CPU при открытии диалога, но немного.
Last edited by citRiks on Fri 06 Mar, 2020 15:51, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 12738
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 36 times
Been thanked: 282 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by John Doe »

citRiks wrote:
Fri 06 Mar, 2020 15:32
на практике до перезапуска ФАРа остается тем же самым, может когда такое поведение и сломается, Ок
Сломается ровно в этот момент:
zg wrote:
Fri 06 Mar, 2020 14:33
откройте немодальный диалог и скорее всего hаndle у всех диалогов поменяется.
Плюс, неуникальность.
citRiks wrote:
Fri 06 Mar, 2020 15:32
запретить неуникальные ГУИДы диалогов?
"Присвоить гуид такому-то диалогу"
Я сильно подозреваю что не все диалоги на практике требуется ресайзить.
citRiks wrote:
Fri 06 Mar, 2020 15:32
но ведь есть всякие third-party плагины
Реквест их авторам.
citRiks wrote:
Fri 06 Mar, 2020 15:32
назапускать любых диалогов с любыми повторящимися ГУИДами.
Это прямо запрещено документацией.
citRiks wrote:
Fri 06 Mar, 2020 15:32
да и caм принцип работы известен и прост.
Возможно для каких-то узких рамок использования он и годится, но точно не как универсальный идентификатор.
https://t.me/FarManager — Telegram чат

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

John Doe wrote:
Fri 06 Mar, 2020 16:16
Сломается ровно в этот момент:
"откройте немодальный диалог и скорее всего hаndle у всех диалогов поменяется."
проверял, не ломается, как уже говорилocь мнoю
Хотя интересно получить инсайд, почему это немодалный диалог должен так все переворошить?
John Doe wrote:
Fri 06 Mar, 2020 16:16
Плюс, неуникальность.
да, есть такой минус :)
John Doe wrote:
Fri 06 Mar, 2020 16:16
Я сильно подозреваю что не все диалоги на практике требуется ресайзить.
почему не все?
В винде например, вообще все окна можно ресайзить
(я кажется начинаю любить дядю Билли)
потому что мало ли чего юзеру или программеру захочется, пусть нужный размер.
я выше приводил сображения по которым это может быть удобно.
даже консерватор HaRT имеет скрипты которые двигают окнa.
John Doe wrote:
Fri 06 Mar, 2020 16:16
Реквест их авторам.
мне совесть не позволяет, потому что на месте плугинописателей я посылал бы таких реквесторов далеко и надолго

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

John Doe wrote:
Fri 06 Mar, 2020 16:16
Это прямо запрещено документацией.

А карающие процедуры предусмотрены для нарушающих?
Ну кроме банов? а тo они негодяи все равно будут на Ру-Борде каком публиковаться
Другими словами, я думаю что превентивное правосудие лучше карающего,
тем более если нет карательных механизмов (?)

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

John Doe wrote:
Fri 06 Mar, 2020 16:16
Возможно для каких-то узких рамок использования он и годится, но точно не как универсальный идентификатор.
а с этого места можно подробнее?
вероятность коллизий у четрырех-байтного значения это один на 4 миллиарда.
Да, вероятность коллизий ненулевая, и не все 4 миллиарда, а как-то меньше, может даже один миллиард, или .. X3
вот интересная статья на тему: (не вникал)
https://ru.wikipedia.org/wiki/%D0%9F%D0 ... 0%B8%D0%B5
в принципе можно сделать CRC64, это будyт уже миллиарды миллиардов
количество диалогов за всю историю фара не думаю что дотягивает до 10,000.
т.е. я думаю что коллизиии не реальны уже при CRC32, или ..
ну проблема легко решаема так или иначе
Last edited by citRiks on Fri 06 Mar, 2020 18:04, edited 1 time in total.

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

Основываться на CRC32 может иметь проблему там где будет произвольное содержание,
например диалог результатов поиска файлов.
Тогда тут проще всего идти методом исключения, пре-задать список ГУИДов,
которые таки да берутся как уникальный неменяемый ИД, и не считать для них CRC32.
Опять же, если по ошибке получать каждый раз новый ГУИД и потому забывать прежнее состояние,
то для юзера большой беды все же не случиться

buniak_a_h
Posts: 1610
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 109 times
Been thanked: 141 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

citRiks wrote:
Fri 06 Mar, 2020 16:54
John Doe wrote:
Fri 06 Mar, 2020 16:16
Это прямо запрещено документацией.
А карающие процедуры предусмотрены для нарушающих?
По определению GUID-а он уникальный. Вроде бы. Если кто-то, вместо того, чтобы сгенерировать новый, использует чужой - ну, пусть сам и расхлёбывает.

citRiks
Posts: 484
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 144 times
Been thanked: 41 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

buniak_a_h,
может и свой личный использовать в разных своих диалогах, как NetBox например.
Не вижу технического способа это запретить
Last edited by citRiks on Fri 06 Mar, 2020 18:23, edited 1 time in total.

buniak_a_h
Posts: 1610
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 109 times
Been thanked: 141 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

citRiks, Свой личный GUID? а зачем?
Не надо запрещать. Если кому-то приятно сидеть в луже - его право. Только сетовать не надо.

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

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by zg »

citRiks wrote:
Fri 06 Mar, 2020 15:49
немодальный диалог это так?
практика показывает что не меняется.
значит вам повезло, либо вы закрыли немодальный диалог, а не переключились с него. в любом случае это зависит от менеджера памяти и думаю даже у текущих vc и gcc сборок разное поведение.

Post Reply

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