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

Разработка Far.
Post Reply
Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Tue 07 Oct, 2014 12:05

Нельзя ли добавить флаг ECF_TEMPORARY, чтобы плагину не надо было вести учёт, что он там раньше раскрашивал в редакторе, а чтобы Фар сам удалял добавленный цвет после очередной перерисовки? То-есть, при перерисовке Фар использует данный цвет, затем проверяет наличие флага ECF_TEMPORARY, и если флаг установлен, Фар этот цвет удаляет.
Last edited by Shmuel on Fri 17 Oct, 2014 10:40, edited 1 time in total.

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Tue 07 Oct, 2014 12:21

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

В частности, в Фарнет так и сделано, в каком-то смысле. По умолчанию модули-рисовальщики или скрипты PowerShell только добавляют цвета по требованию ядра Фарнет. А ядро само все эти цвета удаляет. И вроде еще ни разу не понадобилось действовать "не по умолчанию". Итого, авторам модулей-рисовальщиков получается меньше хлопот.

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Wed 15 Oct, 2014 19:27

Реакции от коллег нет. Как интерпретировать молчание - непонятно.
Нет возражений, если я это реализую?

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

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

Post by zg » Wed 15 Oct, 2014 20:05

если фар удалять будет всё таки перед очередной перерисовкоой, а точнее даже перед очередным ee_redraw, то нет.

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Wed 15 Oct, 2014 22:23

Сделано в 4134.
Поскольку с данной областью кода Фара я ознакомился только сегодня, возможна неоптимальность внесённых изменений.
Новый флаг назван ECF_AUTODELETE.

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Wed 15 Oct, 2014 22:59

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

Стоит это оставить как есть или откатить?

User avatar
DrKnS
Posts: 4640
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Wed 15 Oct, 2014 23:27

А делать цикл по всем строкам приведёт к тормозам на больших файлах.
"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: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Wed 15 Oct, 2014 23:56

DrKnS wrote:
Стоит это оставить как есть или откатить?
Как есть - это с утечками памяти, что ли?
Я бы не назвал это утечками, скорее отложенным, не немедленным, удалением. Хотя можно рассматривать и как утечки.

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Thu 16 Oct, 2014 07:00

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

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

2. Разрешать плагинам добавление цветовых сегментов с флагом ECF_AUTODELETE только в видимую область экрана. Иначе ECTL_ADDCOLOR будет возвращать FALSE.

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Thu 16 Oct, 2014 07:10

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

Имя ECF_TEMPORARY лучше отражает суть, учитывая такой подход.

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Thu 16 Oct, 2014 07:19

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

Да, всё сложнее, чем казалось поначалу.

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Thu 16 Oct, 2014 07:35

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

В Фарнет, вероятно, сделано, как сейчас с ECF_AUTODELETE, с неудаленными сразу автоматически цветами за пределами экрана. Наверняка это неоптимально. Но кого волнует на практике?

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Thu 16 Oct, 2014 07:44

И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке? Удалять все цвета (потенциально долго) или только с текущего экрана (остаются неудаленные за пределами)?

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Thu 16 Oct, 2014 09:00

NightRoman wrote:И потом, если нет такого флага (как было до него), разве все эти проблемы/нюансы с удалением не стоят перед самим плагином при отрисовке?
Это правда. Наверное, пока оставлю как есть (никто ведь не заставляет пользоваться новым флагом).

User avatar
Alexey Samlyukov
Posts: 1759
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 2 times
Contact:

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

Post by Alexey Samlyukov » Fri 17 Oct, 2014 06:55

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

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Fri 17 Oct, 2014 10:10

Changelog wrote:zg 17.10.2014 03:27:45 +0200 - build 4137

1. уточнение 4134: убрана копипаста и удаляются реально все цветовые области.
Билд 4138. Ставим этот , открываем файл в редакторе, выделяем несколько строк (или всё содержимое), нажимаем CtrlD, падаем.

Post Reply

Return to “Development”