Как обработать и, например, предотвратить закрытие редактора?

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
Post Reply
User avatar
NightRoman
Posts: 5950
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 14 times
Been thanked: 15 times
Contact:

Как обработать и, например, предотвратить закрытие редактора?

Post by NightRoman »

Если такого способа нет, нельзя ли доработать API редактора?

Use case: при закрытии редактора плагину нужно проверить текст.
Если все нормально, закрываем. Если нет, пишем сообщение, не закрываем.

Событие редактора EE_CLOSE не годится для этого.
Нельзя проверить текст в редакторе. Нельзя отменить закрытие.
Все, что можно сделать, это освободить данные плагина для редактора.

Code: Select all

EE_CLOSE
Плагин может использовать это сообщение для освобождения внутренних структур данных...
Но плагин не должен вызывать EditorControl при обработке этого сообщения потому что редактор уже закрыт...
Функция ProcessEditorEventW должна вернуть 0. 
Для сравнения, события DN_CLOSE и FE_CLOSE диалога и панели намного более "полезные".
Именно, все еще доступны данные диалога или панели. И можно предотвратить закрытие.

Code: Select all

DN_CLOSE
Return
TRUE - да, согласен с выходом из диалога
FALSE - продолжить работу диалога. 

FE_CLOSE
Панель закрывается.
Param равен NULL.
Верните в ProcessPanelEventW FALSE для закрытия панели или TRUE для отмены этого.
User avatar
DrKnS
Posts: 5744
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 319 times

Как обработать и, например, предотвратить закрытие редактора?

Post by DrKnS »

NightRoman wrote: Thu 19 Nov, 2020 08:02 Если такого способа нет, нельзя ли доработать API редактора?
Если надо прямо сейчас, то, наверное, можно обрабатывать editor input и реагировать на Esc / F10.
Если это сильно костыльно, то можно и доработать, предлагайте варианты.
User avatar
NightRoman
Posts: 5950
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 14 times
Been thanked: 15 times
Contact:

Как обработать и, например, предотвратить закрытие редактора?

Post by NightRoman »

Для конкретного случая я выкрутился, организовав цикл перезапусков редактора.
Очень костыльно и не просто. И не хочется повторять, когда еще понадобится.

Вариант в лоб: если можно вызывать EE_CLOSE, когда еще редактор "жив", то
так и сделать. Если возвращается 0, как плагины обязаны делать по энц.,
то закрываем, как и было раньше. Если 1 (или оговоренную константу),
то не закрываем.

Такое поведение будет подобно DN_CLOSE и FE_CLOSE.
Неаккуратные плагины, возвращавшие 1, получат проблемы, конечно.
Если это важно, использование константы с вычурным числом уменьшит вероятность.

Если технически сложно вызывать EE_CLOSE при живом редакторе, то ввести новое
событие, скажем, EE_CLOSING.
User avatar
NightRoman
Posts: 5950
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 14 times
Been thanked: 15 times
Contact:

Как обработать и, например, предотвратить закрытие редактора?

Post by NightRoman »

P.S.

Про обработку клавиш выхода - редактор может и через ECTL_QUIT закрываться.

В связи с этим, если новое или измененное старое событие будет, ECTL_QUIT
потребует доработки. Сейчас "Эта команда всегда возвращает TRUE".
С отменой закрытия логично возвращать FALSE.
pepak
Posts: 519
Joined: Sun 13 Jul, 2008 11:18
Has thanked: 13 times
Been thanked: 42 times

Как обработать и, например, предотвратить закрытие редактора?

Post by pepak »

I wasn't able to prevent the editor from closing down, but in some of my plugins I am using a workaround of opening the same editor with as-close settings as possible. It seems to work reasonably well, although it is not a proper solution either. Download DirSync3 source codes and check Source\Lib\Far\DelphiFar.pas for ProcessEditorEventW.
Last edited by pepak on Sun 22 Nov, 2020 06:39, edited 1 time in total.
User avatar
NightRoman
Posts: 5950
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 14 times
Been thanked: 15 times
Contact:

Как обработать и, например, предотвратить закрытие редактора?

Post by NightRoman »

pepak wrote: Sun 22 Nov, 2020 06:38 a workaround of opening the same editor with as-close settings as possible
Yes, that is what I do, too. It's rather painful.
- Cannot use the auto-delete file mode if you want to use same temp file
- With no history mode you have to take care of opening at last position
- Session bookmarks are lost on reopening (and no workaround for this)
- etc., etc.
Last edited by NightRoman on Sun 22 Nov, 2020 07:18, edited 1 time in total.
Post Reply

Return to “Предложения и идеи”