ECTL_ADDCOLOR - добавить флаг ECF_AUTODELETE

Разработка Far.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

ECTL_ADDCOLOR - добавить флаг ECF_AUTODELETE

Post by Shmuel »

Нельзя ли добавить флаг ECF_TEMPORARY, чтобы плагину не надо было вести учёт, что он там раньше раскрашивал в редакторе, а чтобы Фар сам удалял добавленный цвет после очередной перерисовки? То-есть, при перерисовке Фар использует данный цвет, затем проверяет наличие флага ECF_TEMPORARY, и если флаг установлен, Фар этот цвет удаляет.
Last edited by Shmuel on Fri 17 Oct, 2014 10:40, edited 1 time in total.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by NightRoman »

Думаю, дельное предложение. Только, наверное, Фар должен удалять *перед* очередной перерисовкой (вызова события)? Ну или это внутренние детали, Фару видней, когда это правильно сделать.

В частности, в Фарнет так и сделано, в каком-то смысле. По умолчанию модули-рисовальщики или скрипты PowerShell только добавляют цвета по требованию ядра Фарнет. А ядро само все эти цвета удаляет. И вроде еще ни разу не понадобилось действовать "не по умолчанию". Итого, авторам модулей-рисовальщиков получается меньше хлопот.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Shmuel »

Реакции от коллег нет. Как интерпретировать молчание - непонятно.
Нет возражений, если я это реализую?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by zg »

если фар удалять будет всё таки перед очередной перерисовкоой, а точнее даже перед очередным ee_redraw, то нет.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Shmuel »

Сделано в 4134.
Поскольку с данной областью кода Фара я ознакомился только сегодня, возможна неоптимальность внесённых изменений.
Новый флаг назван ECF_AUTODELETE.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Shmuel »

Да, похоже тут не только неоптимальность. Удаляются автоматически только цветовые области, видимые на экране.
А делать цикл по всем строкам приведёт к тормозам на больших файлах.

Стоит это оставить как есть или откатить?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post 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 в отдельном контейнере и удаляй оттуда, а не перебором всех строк.
Возможно, это также потребует более масштабных изменений.
Стоит это оставить как есть или откатить?
Как есть - это с утечками памяти, что ли?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Shmuel »

DrKnS wrote:
Стоит это оставить как есть или откатить?
Как есть - это с утечками памяти, что ли?
Я бы не назвал это утечками, скорее отложенным, не немедленным, удалением. Хотя можно рассматривать и как утечки.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Shmuel »

DrKnS wrote:Храни цвета с ECF_AUTODELETE в отдельном контейнере и удаляй оттуда, а не перебором всех строк.
Просматривается более простое решение:

1. Перед посылкой плагинам EE_REDRAW запоминать верхнюю и нижнюю границы видимой области экрана, предварительно удалив цветовые сегменты с ECF_AUTODELETE в предыдущей запомненной видимой области.

2. Разрешать плагинам добавление цветовых сегментов с флагом ECF_AUTODELETE только в видимую область экрана. Иначе ECTL_ADDCOLOR будет возвращать FALSE.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by NightRoman »

Выглядит как практичное решение для временных/авто-удаляемых цветов. Если это плагину не годится, то плагин использует постоянные цвета. Для многих плагинов подойдут временные, наверняка.

Имя ECF_TEMPORARY лучше отражает суть, учитывая такой подход.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Shmuel »

NightRoman wrote:Выглядит как практичное решение для временных/авто-удаляемых цветов. Если это плагину не годится, то плагин использует постоянные цвета.
К сожалению (только сейчас осознал) это решение не учитывает вставку и удаление строк или блоков. Эти операции сделают прежнюю запомненную видимую область невалидной.

Да, всё сложнее, чем казалось поначалу.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by NightRoman »

Пожалуй. Но хоть какой-то механизм для упрощения жизни плагинам было бы лучше иметь, чем никакого. Он может совершенствоваться, по мере наличия желания и сил.

В Фарнет, вероятно, сделано, как сейчас с ECF_AUTODELETE, с неудаленными сразу автоматически цветами за пределами экрана. Наверняка это неоптимально. Но кого волнует на практике?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by NightRoman »

И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке? Удалять все цвета (потенциально долго) или только с текущего экрана (остаются неудаленные за пределами)?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Shmuel »

NightRoman wrote:И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке?
Это правда. Наверное, пока оставлю как есть (никто ведь не заставляет пользоваться новым флагом).
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: ECTL_ADDCOLOR - добавить флаг ECF_TEMPORARY

Post by Alexey Samlyukov »

>ECF_AUTODELETE
друзья, не забывайте обновлять ньюсы в энциклопедии. у меня нет возможности это делать.
Post Reply

Return to “Development”