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

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

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

Post by NightRoman » Sat 26 Jul, 2014 06:10

При открытии редактора EE_REDRAW происходит до EE_READ.

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

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

Post by zg » Sat 26 Jul, 2014 08:50

NightRoman wrote:При открытии редактора EE_REDRAW происходит до EE_READ.
так и задумано.

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

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

Post by NightRoman » Sat 26 Jul, 2014 09:03

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

И надо документировать, какое именно событие в редакторе первое. Это важно.

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

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

Post by zg » Sat 26 Jul, 2014 09:27

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

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

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

Post by NightRoman » Sat 26 Jul, 2014 20:37

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

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

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

P.S. Надо бы перенести это обсуждение, раз речь не об ошибках.

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

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

Post by zg » Sun 27 Jul, 2014 00:40

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

ps: farnet, как я понимаю, про редакторы, которые были открыты до его загрузки, ничего не знает?

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

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

Post by NightRoman » Sun 27 Jul, 2014 06:19

сейчас это происходит безусловно. в принципе в будущем в целях оптимизации, если в ee_read плагины ничего не наменяли, может и не будет вызываться.
Хорошо, попробую пропускать первую перерисовку. В будущем могут быть проблемы с пропуском, если после чтения перерисовки не будет. Там видно будет.
ps: farnet, как я понимаю, про редакторы, которые были открыты до его загрузки, ничего не знает?
Фарнет всегда грузится. Редакторы открываются уже при нем.

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

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

Post by zg » Sun 27 Jul, 2014 11:09

NightRoman wrote:Фарнет всегда грузится. Редакторы открываются уже при нем.
любой плагин может быть загружен вручную через load: или другими аналогичными средствами.

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

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

Post by NightRoman » Sun 27 Jul, 2014 11:57

Тогда да.

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Mon 28 Jul, 2014 09:46

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

Расскажите для чего задумано именно так?

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

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

Post by NightRoman » Mon 28 Jul, 2014 12:06

zg
С EE_READ ясно, это не обязательно первое событие. А как обстоит дело с EE_CLOSE, это последнее событие?

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Mon 28 Jul, 2014 12:09

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

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

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

Post by NightRoman » Mon 28 Jul, 2014 12:12

Да, вроде напрашивается вывод. Но там не написано, что это последнее событие. Потом можно нарваться на вопрос "а с чего вы взяли, что это последнее событие"?

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Mon 28 Jul, 2014 12:19

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

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

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

Post by zg » Mon 28 Jul, 2014 15:07

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

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Mon 28 Jul, 2014 16:18

например до недавнего времени ee_close могло прийти раньше, чем ee_read. что-то вас это не смущало.
Не смущало, т.к. не сталкивался, и даже не представляю как воспроизвести.
Подымаю те вопросы, на которые сам напоролся. Надо как-то иначе?
ответе на три вопроса:
1. Для плагинописателя не принципиально. До рефакторинга отображалась информация о "предыдущем" активном окне.
2. Не принципиально, хоть и пустое окно.
3. Не знаю, на вопросы отвечал как пользователь апи, а не не как разработчик фара.

Я вроде бы не утверждал, будто знаю лучше всех.
Наоборот, пытаюсь выяснить в чём задумка, и как вообще плагин может применить ранние EE_REDRAW, EE_GOTFOCUS до EE_READ.

Post Reply

Return to “Development”

Who is online

Users browsing this forum: No registered users and 1 guest