handle нельзя использовать в качестве ID. Это невозможно исправить.
handle нельзя использовать в качестве ID
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
handle нельзя использовать в качестве ID
https://t.me/FarManager — Telegram чат
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
John Doe, В вопросе про handle есть два подвопроса:
1.) Можно ли дать handle Search-у ? не в качестве ИД а просто чтобы был для начала
2.) Почему нельзя?
Большинство hаndles уникальны в пределах сессии (но не все),
и остаются теми же для того же окна, потому в принципе можно их использовать в качестве ИД с ограниченным успехом.
Для полного успеха хотелось бы чтобы все были уникальны, если же есть того техническая невозможность - то Ок.
В целом пункт (2.) действительно некриитичен,
так как для уникальной идентификации придуман CRC32,
но остается предложение (1.)
1.) Можно ли дать handle Search-у ? не в качестве ИД а просто чтобы был для начала
2.) Почему нельзя?
Большинство hаndles уникальны в пределах сессии (но не все),
и остаются теми же для того же окна, потому в принципе можно их использовать в качестве ИД с ограниченным успехом.
Для полного успеха хотелось бы чтобы все были уникальны, если же есть того техническая невозможность - то Ок.
В целом пункт (2.) действительно некриитичен,
так как для уникальной идентификации придуман CRC32,
но остается предложение (1.)
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Хэндл это свойство диалога (и меню).
А FastFind не диалог.
Хэндл это по сути указатель. Адрес диалога в памяти.
Он уникален в момент своего существования, а более ничего не гарантируется.
И как по мне, это не очень хорошо, лучше был бы Integer, уникальный для сессии (как Id редакторов и вьюверов).
Для ваших же задач нужна не только уникальность, а ещё и постоянство, которым обладает guid (там где задан).
А где не задан, но востребован - открываем реквест на мантисе.
Боюсь это какая-то ненадёжная галиматья.
https://t.me/FarManager — Telegram чат
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
search не диалог. то что он внутри фара реализован как диалог, детали реализации. и да, меню — тоже не диалог. и с одной стороны каждому меню полезно иметь гуид, с другой — я не вижу рациональной составляющей в увеличении размеров меню.
приплыли. handle — это адрес экземпляра класса Dialog. то, что у вас где-то там что-то совпадает — просто стечение обстоятельств. откройте немодальный диалог и скорее всего hаndle у всех диалогов поменяется.citRiks wrote: ↑Fri 06 Mar, 2020 09:17Большинство hаndles уникальны в пределах сессии (но не все),
и остаются теми же для того же окна, потому в принципе можно их использовать в качестве ИД с ограниченным успехом.
Для полного успеха хотелось бы чтобы все были уникальны, если же есть того техническая невозможность - то Ок.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
сложно ли разработчикам будет сделать его диалогом?
тогда можно будет двигать, расширять, и наверное сделать ему autocompletion и историю?
на практике до перезапуска ФАРа остается тем же самым, может когда такое поведение и сломается, Ок
Реквест можно открыть, но какой реквест?
запретить неуникальные ГУИДы диалогов?
Допустим внутри ФАРа станадартные плагины (netbox, etc) вы задали все уникальное,
но ведь есть всякие third-party плагины, да и технически можно назапускать любых диалогов с любыми повторящимися ГУИДами.
far.DialogInit("<whatever-guid-here>", ...)
Если запрещать, и даже если это технически вомзможно, то видимо что много чего сломается в плагинах
Если же не запрещать, то рассчитывать нельзя ни на что.
Боятся не надо, галиматья надежная, да и caм принцип работы известен и прост.
Last edited by citRiks on Fri 06 Mar, 2020 15:50, edited 1 time in total.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
продублирую вопрос на всякий случай - можно ли, сложно ли сделать его полноценным в этом смысле диалогом?
* меню можно захотет подвинуть чтобы видеть что за ним
* меню можно захотет временно уменьшить чтобы видеть что за ним
* можно хотеть его видеть в определенной части экрана а не всегда посередине
* возможно динамически его использовать для разных целей, я видел как меню и для показа содержания файла например применяли,
чтобы иметь фильрацию и спрятывание элементов.
т.е. получается динамическая штуковина которой состоянием наверное лучше иметь возможность управлять
* может захотеться видеть меню на весь экран.
для этого всего нужен хэндл (в меню он есть) и постоянный идентификатор (ГУИД).
Может быть ФАР может на основе CRC32/MD5/etc или чего еще генерировать если не задан.
Или же луа-писатель с той же целью применить CRC32@ХеRoX.
немодальный диалог это так?
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.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Сломается ровно в этот момент:
Плюс, неуникальность.
"Присвоить гуид такому-то диалогу"
Я сильно подозреваю что не все диалоги на практике требуется ресайзить.
Реквест их авторам.
Это прямо запрещено документацией.
Возможно для каких-то узких рамок использования он и годится, но точно не как универсальный идентификатор.
https://t.me/FarManager — Telegram чат
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
проверял, не ломается, как уже говорилocь мнoю
Хотя интересно получить инсайд, почему это немодалный диалог должен так все переворошить?
да, есть такой минус
почему не все?
В винде например, вообще все окна можно ресайзить
(я кажется начинаю любить дядю Билли)
потому что мало ли чего юзеру или программеру захочется, пусть нужный размер.
я выше приводил сображения по которым это может быть удобно.
даже консерватор HaRT имеет скрипты которые двигают окнa.
мне совесть не позволяет, потому что на месте плугинописателей я посылал бы таких реквесторов далеко и надолго
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
А карающие процедуры предусмотрены для нарушающих?
Ну кроме банов? а тo они негодяи все равно будут на Ру-Борде каком публиковаться
Другими словами, я думаю что превентивное правосудие лучше карающего,
тем более если нет карательных механизмов (?)
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
а с этого места можно подробнее?
вероятность коллизий у четрырех-байтного значения это один на 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.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Основываться на CRC32 может иметь проблему там где будет произвольное содержание,
например диалог результатов поиска файлов.
Тогда тут проще всего идти методом исключения, пре-задать список ГУИДов,
которые таки да берутся как уникальный неменяемый ИД, и не считать для них CRC32.
Опять же, если по ошибке получать каждый раз новый ГУИД и потому забывать прежнее состояние,
то для юзера большой беды все же не случиться
например диалог результатов поиска файлов.
Тогда тут проще всего идти методом исключения, пре-задать список ГУИДов,
которые таки да берутся как уникальный неменяемый ИД, и не считать для них CRC32.
Опять же, если по ошибке получать каждый раз новый ГУИД и потому забывать прежнее состояние,
то для юзера большой беды все же не случиться
- buniak_a_h
- Posts: 4265
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
По определению GUID-а он уникальный. Вроде бы. Если кто-то, вместо того, чтобы сгенерировать новый, использует чужой - ну, пусть сам и расхлёбывает.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
buniak_a_h,
может и свой личный использовать в разных своих диалогах, как NetBox например.
Не вижу технического способа это запретить
может и свой личный использовать в разных своих диалогах, как NetBox например.
Не вижу технического способа это запретить
Last edited by citRiks on Fri 06 Mar, 2020 18:23, edited 1 time in total.
- buniak_a_h
- Posts: 4265
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
citRiks, Свой личный GUID? а зачем?
Не надо запрещать. Если кому-то приятно сидеть в луже - его право. Только сетовать не надо.
Не надо запрещать. Если кому-то приятно сидеть в луже - его право. Только сетовать не надо.
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
значит вам повезло, либо вы закрыли немодальный диалог, а не переключились с него. в любом случае это зависит от менеджера памяти и думаю даже у текущих vc и gcc сборок разное поведение.