о событиях в редакторе

Разработка Far.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

о событиях в редакторе

Post by NightRoman »

При открытии редактора EE_REDRAW происходит до EE_READ.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by zg »

NightRoman wrote:При открытии редактора EE_REDRAW происходит до EE_READ.
так и задумано.
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: Глюки и баги, появившиеся в «ночных сборках»

Post by NightRoman »

Breaking change... В EE_READ в плагине выполнялась инициализация данных редактора. Было удобно, так как это первое событие и оно вызывается однократно. А сейчас первым будет EE_REDRAW? Можно приспособиться, конечно, но это менее удобно, надо отслеживать первый вызов и использовать его для инициализации тогда.

И надо документировать, какое именно событие в редакторе первое. Это важно.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by zg »

NightRoman wrote:Breaking change...
вообще-то раньше тоже так было. есть два плагина 1 и 2. если первый вызовет в ee_read actl_commit, ectl_redraw, просто покажет меню/диалог, то второму плагину ee_redraw придёт раньше ee_read. если ваш плагин падает от такого поведения, то раньше бы он тоже упал, но в менее воспроизводимых условиях.
И надо документировать, какое именно событие в редакторе первое. Это важно.
вот тут документировано. пункт 1.3.
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: Глюки и баги, появившиеся в «ночных сборках»

Post by NightRoman »

Проводить инициализацию в EE_REDRAW не хотелось бы. Согласно энц., в обработке этого события нежелательны некоторые методы, которые могут привести к рекурсивному EE_REDRAW. В EE_READ эти ограничения не упомянуты, то есть это событие выглядит более привлекательным для инициализации (то есть модули Фарнет имеют больше свободы в обработчиках этого события).

Можно, конечно, пропустить первый EE_REDRAW и дождаться EE_READ, чтобы инициализировать редактор без ограничений. Для Фарнет это также означает, что модули могут подписаться на события редактора в момент инициализации. В том числе на перерисовку. Но тогда получится, что модули пропустят первый вызов EE_REDRAW. Будет ли EE_REDRAW вызван после EE_READ, чтобы модули могли обработать первую свою (фактически вторую для редактора) перерисовку по-своему?

И еще вопрос. Если при открытии редактора плагин хочет изменить текст в редакторе, то в обработке какого события это лучше делать?

P.S. Надо бы перенести это обсуждение, раз речь не об ошибках.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by zg »

NightRoman wrote:Можно, конечно, пропустить первый EE_REDRAW и дождаться EE_READ, чтобы инициализировать редактор без ограничений. Для Фарнет это также означает, что модули могут подписаться на события редактора в момент инициализации. В том числе на перерисовку. Но тогда получится, что модули пропустят первый вызов EE_REDRAW. Будет ли EE_REDRAW вызван после EE_READ, чтобы модули могли обработать первую свою (фактически вторую для редактора) перерисовку по-своему?
сейчас это происходит безусловно. в принципе в будущем в целях оптимизации, если в ee_read плагины ничего не наменяли, может и не будет вызываться.
NightRoman wrote:И еще вопрос. Если при открытии редактора плагин хочет изменить текст в редакторе, то в обработке какого события это лучше делать?
как бы ee_read для этого и предназначен, не?

ps: farnet, как я понимаю, про редакторы, которые были открыты до его загрузки, ничего не знает?
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: о событиях в редакторе

Post by NightRoman »

сейчас это происходит безусловно. в принципе в будущем в целях оптимизации, если в ee_read плагины ничего не наменяли, может и не будет вызываться.
Хорошо, попробую пропускать первую перерисовку. В будущем могут быть проблемы с пропуском, если после чтения перерисовки не будет. Там видно будет.
ps: farnet, как я понимаю, про редакторы, которые были открыты до его загрузки, ничего не знает?
Фарнет всегда грузится. Редакторы открываются уже при нем.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: о событиях в редакторе

Post by zg »

NightRoman wrote:Фарнет всегда грузится. Редакторы открываются уже при нем.
любой плагин может быть загружен вручную через load: или другими аналогичными средствами.
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: о событиях в редакторе

Post by NightRoman »

Тогда да.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by John Doe »

zg wrote:
NightRoman wrote:При открытии редактора EE_REDRAW происходит до EE_READ.
так и задумано.
На данный момент при открытии редактора события приходят в такой последовательности: EE_REDRAW, EE_GOTFOCUS, EE_READ.
При открытии вьювера: VE_GOTFOCUS, VE_READ.

Расскажите для чего задумано именно так?
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: о событиях в редакторе

Post by NightRoman »

zg
С EE_READ ясно, это не обязательно первое событие. А как обстоит дело с EE_CLOSE, это последнее событие?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: о событиях в редакторе

Post by John Doe »

Это следует из Энциклопедии:
http://api.farmanager.com/ru/structures/processeditoreventinfo.html wrote:Плагин может использовать это сообщение для освобождения внутренних структур данных.
...
Но плагин не должен вызывать EditorControl при обработке этого сообщения потому что редактор уже закрыт.
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: о событиях в редакторе

Post by NightRoman »

Да, вроде напрашивается вывод. Но там не написано, что это последнее событие. Потом можно нарваться на вопрос "а с чего вы взяли, что это последнее событие"?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: о событиях в редакторе

Post by John Doe »

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

Re: о событиях в редакторе

Post by zg »

John Doe wrote:Я могу понять, если это происходит в результате трудно преодолимых особенностей имплементации, но выше утверждается что так и задумано...
если говорить о том, кто изначально вводил это событие, то он, судя по всему, вообще ни о чём не думал. например до недавнего времени ee_close могло прийти раньше, чем ee_read. что-то вас это не смущало. что касается ee_read и ee_redraw, то если вы такой станиславский, вот вам макрос:
  1. local F = far.Flags
  2.  
  3. Event {
  4.  
  5.   group="EditorEvent";
  6.  
  7.   action=function(id,event,param)
  8.  
  9.     if event==F.EE_READ then
  10.  
  11.       far.Show(far.AdvControl(F.ACTL_GETWINDOWTYPE).Type,far.MacroGetArea())
  12.  
  13.     end
  14.  
  15.   end
  16.  
  17. }
ответе на три вопроса:
1. что должен выводить far.Show.
2. что должно отображаться под far.Show.
3. как сущность из второго пункта должна отображаться?
если в ваших ответах внутренних противоречий не будет, мы их канонизируем, а вас назначим ответственным за соблюдение канона. ок?
Post Reply

Return to “Development”