Page 1 of 2
ECTL_ADDCOLOR - добавить флаг ECF_AUTODELETE
Posted: Tue 07 Oct, 2014 12:05
by Shmuel
Нельзя ли добавить флаг ECF_TEMPORARY, чтобы плагину не надо было вести учёт, что он там раньше раскрашивал в редакторе, а чтобы Фар сам удалял добавленный цвет после очередной перерисовки? То-есть, при перерисовке Фар использует данный цвет, затем проверяет наличие флага ECF_TEMPORARY, и если флаг установлен, Фар этот цвет удаляет.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Tue 07 Oct, 2014 12:21
by NightRoman
Думаю, дельное предложение. Только, наверное, Фар должен удалять *перед* очередной перерисовкой (вызова события)? Ну или это внутренние детали, Фару видней, когда это правильно сделать.
В частности, в Фарнет так и сделано, в каком-то смысле. По умолчанию модули-рисовальщики или скрипты PowerShell только добавляют цвета по требованию ядра Фарнет. А ядро само все эти цвета удаляет. И вроде еще ни разу не понадобилось действовать "не по умолчанию". Итого, авторам модулей-рисовальщиков получается меньше хлопот.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Wed 15 Oct, 2014 19:27
by Shmuel
Реакции от коллег нет. Как интерпретировать молчание - непонятно.
Нет возражений, если я это реализую?
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Wed 15 Oct, 2014 20:05
by zg
если фар удалять будет всё таки перед очередной перерисовкоой, а точнее даже перед очередным ee_redraw, то нет.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Wed 15 Oct, 2014 22:23
by Shmuel
Сделано в 4134.
Поскольку с данной областью кода Фара я ознакомился только сегодня, возможна неоптимальность внесённых изменений.
Новый флаг назван ECF_AUTODELETE.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Wed 15 Oct, 2014 22:59
by Shmuel
Да, похоже тут не только неоптимальность. Удаляются автоматически только цветовые области, видимые на экране.
А делать цикл по всем строкам приведёт к тормозам на больших файлах.
Стоит это оставить как есть или откатить?
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Wed 15 Oct, 2014 23:27
by DrKnS
А делать цикл по всем строкам приведёт к тормозам на больших файлах.
"All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection."
Храни цвета с ECF_AUTODELETE в отдельном контейнере и удаляй оттуда, а не перебором всех строк.
Возможно, это также потребует более масштабных изменений.
Стоит это оставить как есть или откатить?
Как есть - это с утечками памяти, что ли?
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Wed 15 Oct, 2014 23:56
by Shmuel
DrKnS wrote:Стоит это оставить как есть или откатить?
Как есть - это с утечками памяти, что ли?
Я бы не назвал это утечками, скорее отложенным, не немедленным, удалением. Хотя можно рассматривать и как утечки.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Thu 16 Oct, 2014 07:00
by Shmuel
DrKnS wrote:Храни цвета с ECF_AUTODELETE в отдельном контейнере и удаляй оттуда, а не перебором всех строк.
Просматривается более простое решение:
1. Перед посылкой плагинам EE_REDRAW запоминать верхнюю и нижнюю границы видимой области экрана, предварительно удалив цветовые сегменты с ECF_AUTODELETE в предыдущей запомненной видимой области.
2. Разрешать плагинам добавление цветовых сегментов с флагом ECF_AUTODELETE только в видимую область экрана. Иначе ECTL_ADDCOLOR будет возвращать FALSE.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Thu 16 Oct, 2014 07:10
by NightRoman
Выглядит как практичное решение для временных/авто-удаляемых цветов. Если это плагину не годится, то плагин использует постоянные цвета. Для многих плагинов подойдут временные, наверняка.
Имя ECF_TEMPORARY лучше отражает суть, учитывая такой подход.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Thu 16 Oct, 2014 07:19
by Shmuel
NightRoman wrote:Выглядит как практичное решение для временных/авто-удаляемых цветов. Если это плагину не годится, то плагин использует постоянные цвета.
К сожалению (только сейчас осознал) это решение не учитывает вставку и удаление строк или блоков. Эти операции сделают прежнюю запомненную видимую область невалидной.
Да, всё сложнее, чем казалось поначалу.
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Thu 16 Oct, 2014 07:35
by NightRoman
Пожалуй. Но хоть какой-то механизм для упрощения жизни плагинам было бы лучше иметь, чем никакого. Он может совершенствоваться, по мере наличия желания и сил.
В Фарнет, вероятно, сделано, как сейчас с ECF_AUTODELETE, с неудаленными сразу автоматически цветами за пределами экрана. Наверняка это неоптимально. Но кого волнует на практике?
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Thu 16 Oct, 2014 07:44
by NightRoman
И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке? Удалять все цвета (потенциально долго) или только с текущего экрана (остаются неудаленные за пределами)?
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Thu 16 Oct, 2014 09:00
by Shmuel
NightRoman wrote:И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке?
Это правда. Наверное, пока оставлю как есть (никто ведь не заставляет пользоваться новым флагом).
Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY
Posted: Fri 17 Oct, 2014 06:55
by Alexey Samlyukov
>ECF_AUTODELETE
друзья, не забывайте обновлять ньюсы в энциклопедии. у меня нет возможности это делать.