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
друзья, не забывайте обновлять ньюсы в энциклопедии. у меня нет возможности это делать.