о событиях в редакторе
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Глюки и баги, появившиеся в «ночных сборках»
так и задумано.NightRoman wrote:При открытии редактора EE_REDRAW происходит до EE_READ.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Глюки и баги, появившиеся в «ночных сборках»
Breaking change... В EE_READ в плагине выполнялась инициализация данных редактора. Было удобно, так как это первое событие и оно вызывается однократно. А сейчас первым будет EE_REDRAW? Можно приспособиться, конечно, но это менее удобно, надо отслеживать первый вызов и использовать его для инициализации тогда.
И надо документировать, какое именно событие в редакторе первое. Это важно.
И надо документировать, какое именно событие в редакторе первое. Это важно.
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Глюки и баги, появившиеся в «ночных сборках»
вообще-то раньше тоже так было. есть два плагина 1 и 2. если первый вызовет в ee_read actl_commit, ectl_redraw, просто покажет меню/диалог, то второму плагину ee_redraw придёт раньше ee_read. если ваш плагин падает от такого поведения, то раньше бы он тоже упал, но в менее воспроизводимых условиях.NightRoman wrote:Breaking change...
вот тут документировано. пункт 1.3.И надо документировать, какое именно событие в редакторе первое. Это важно.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Глюки и баги, появившиеся в «ночных сборках»
Проводить инициализацию в EE_REDRAW не хотелось бы. Согласно энц., в обработке этого события нежелательны некоторые методы, которые могут привести к рекурсивному EE_REDRAW. В EE_READ эти ограничения не упомянуты, то есть это событие выглядит более привлекательным для инициализации (то есть модули Фарнет имеют больше свободы в обработчиках этого события).
Можно, конечно, пропустить первый EE_REDRAW и дождаться EE_READ, чтобы инициализировать редактор без ограничений. Для Фарнет это также означает, что модули могут подписаться на события редактора в момент инициализации. В том числе на перерисовку. Но тогда получится, что модули пропустят первый вызов EE_REDRAW. Будет ли EE_REDRAW вызван после EE_READ, чтобы модули могли обработать первую свою (фактически вторую для редактора) перерисовку по-своему?
И еще вопрос. Если при открытии редактора плагин хочет изменить текст в редакторе, то в обработке какого события это лучше делать?
P.S. Надо бы перенести это обсуждение, раз речь не об ошибках.
Можно, конечно, пропустить первый EE_REDRAW и дождаться EE_READ, чтобы инициализировать редактор без ограничений. Для Фарнет это также означает, что модули могут подписаться на события редактора в момент инициализации. В том числе на перерисовку. Но тогда получится, что модули пропустят первый вызов EE_REDRAW. Будет ли EE_REDRAW вызван после EE_READ, чтобы модули могли обработать первую свою (фактически вторую для редактора) перерисовку по-своему?
И еще вопрос. Если при открытии редактора плагин хочет изменить текст в редакторе, то в обработке какого события это лучше делать?
P.S. Надо бы перенести это обсуждение, раз речь не об ошибках.
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Глюки и баги, появившиеся в «ночных сборках»
сейчас это происходит безусловно. в принципе в будущем в целях оптимизации, если в ee_read плагины ничего не наменяли, может и не будет вызываться.NightRoman wrote:Можно, конечно, пропустить первый EE_REDRAW и дождаться EE_READ, чтобы инициализировать редактор без ограничений. Для Фарнет это также означает, что модули могут подписаться на события редактора в момент инициализации. В том числе на перерисовку. Но тогда получится, что модули пропустят первый вызов EE_REDRAW. Будет ли EE_REDRAW вызван после EE_READ, чтобы модули могли обработать первую свою (фактически вторую для редактора) перерисовку по-своему?
как бы ee_read для этого и предназначен, не?NightRoman wrote:И еще вопрос. Если при открытии редактора плагин хочет изменить текст в редакторе, то в обработке какого события это лучше делать?
ps: farnet, как я понимаю, про редакторы, которые были открыты до его загрузки, ничего не знает?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: о событиях в редакторе
Хорошо, попробую пропускать первую перерисовку. В будущем могут быть проблемы с пропуском, если после чтения перерисовки не будет. Там видно будет.сейчас это происходит безусловно. в принципе в будущем в целях оптимизации, если в ee_read плагины ничего не наменяли, может и не будет вызываться.
Фарнет всегда грузится. Редакторы открываются уже при нем.ps: farnet, как я понимаю, про редакторы, которые были открыты до его загрузки, ничего не знает?
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: о событиях в редакторе
любой плагин может быть загружен вручную через load: или другими аналогичными средствами.NightRoman wrote:Фарнет всегда грузится. Редакторы открываются уже при нем.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Re: Глюки и баги, появившиеся в «ночных сборках»
На данный момент при открытии редактора события приходят в такой последовательности: EE_REDRAW, EE_GOTFOCUS, EE_READ.zg wrote:так и задумано.NightRoman wrote:При открытии редактора EE_REDRAW происходит до EE_READ.
При открытии вьювера: VE_GOTFOCUS, VE_READ.
Расскажите для чего задумано именно так?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: о событиях в редакторе
zg
С EE_READ ясно, это не обязательно первое событие. А как обстоит дело с EE_CLOSE, это последнее событие?
С EE_READ ясно, это не обязательно первое событие. А как обстоит дело с EE_CLOSE, это последнее событие?
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Re: о событиях в редакторе
Это следует из Энциклопедии:
http://api.farmanager.com/ru/structures/processeditoreventinfo.html wrote:Плагин может использовать это сообщение для освобождения внутренних структур данных.
...
Но плагин не должен вызывать EditorControl при обработке этого сообщения потому что редактор уже закрыт.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: о событиях в редакторе
Да, вроде напрашивается вывод. Но там не написано, что это последнее событие. Потом можно нарваться на вопрос "а с чего вы взяли, что это последнее событие"?
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Re: о событиях в редакторе
А я вот не очень верю, что событие EE_READ задумано вызываться не первым.
Я могу понять, если это происходит в результате трудно преодолимых особенностей имплементации, но выше утверждается что так и задумано...
Я могу понять, если это происходит в результате трудно преодолимых особенностей имплементации, но выше утверждается что так и задумано...
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: о событиях в редакторе
если говорить о том, кто изначально вводил это событие, то он, судя по всему, вообще ни о чём не думал. например до недавнего времени ee_close могло прийти раньше, чем ee_read. что-то вас это не смущало. что касается ee_read и ee_redraw, то если вы такой станиславский, вот вам макрос: ответе на три вопроса:John Doe wrote:Я могу понять, если это происходит в результате трудно преодолимых особенностей имплементации, но выше утверждается что так и задумано...
1. что должен выводить far.Show.
2. что должно отображаться под far.Show.
3. как сущность из второго пункта должна отображаться?
если в ваших ответах внутренних противоречий не будет, мы их канонизируем, а вас назначим ответственным за соблюдение канона. ок?