Проблемы оконного менеджера

Здесь можно сообщить о найденных багах в 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:

Re: Проблемы оконного менеджера

Post by NightRoman »

Latest post of the previous page:

Если открыть два редактора из уже открытого редактора и закрыть их в порядке открытия (это важно), то окажемся не в начальном редакторе, как ожидается, а в панелях. Если закрывать сначала второй, потом первый, то окажемся в начальном редакторе (это ожиданно и работает).

Обнаружил PowerShellFar скриптом (прикреплен). Запускать так:
- открыть какой-нибудь файл в редакторе
- будучи в редакторе выполнить F11 \ PowerShellFar \ Invoke commands
- в появившемся диалоге набрать путь скрипта C:\tmp\Test-Editor-Open-2-From-Editor-.ps1
- энтер, в итоге оказываемся в панелях

Попробовал что-то похожее изобразить на Lua (ниже). Но что-то не так, наверное, делаю. Во-первых, не знаю, как сначала закрыть первый редактор ("a"), а потом второй ("b"). Ладно, пробую закрыть хотя бы двумя Quit() подряд, но они не делают то, что мне хочется, редактор "a" остается открытым.

Code: Select all

Macro {
area="Editor"; key="CtrlAltP"; description="Test: open 2 editors, close them"; action=function()
local F=far.Flags
editor.Editor("a",nil,0,0,-1,-1,bit64.bor(F.EF_NONMODAL,F.EF_CREATENEW,F.EF_IMMEDIATERETURN))
editor.Editor("b",nil,0,0,-1,-1,bit64.bor(F.EF_NONMODAL,F.EF_CREATENEW,F.EF_IMMEDIATERETURN))
editor.Quit()
editor.Quit()
end;
}
Attachments
Test-Editor-Open-2-From-Editor-.ps1.7z
(253 Bytes) Downloaded 98 times
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

редактор "a" остается открытым.
В editor.Quit надо передавать id, в противном случае используется текущий.
Проблема в том, что в обоих случаях текущим является почему-то один и тот же редактор "b".

Похоже на баг.

А вот так воспроизводится ваш сценарий:
  1. local F=far.Flags
  2.  
  3. editor.Editor("a",nil,0,0,-1,-1,bit64.bor(F.EF_NONMODAL,F.EF_CREATENEW,F.EF_IMMEDIATERETURN))
  4.  
  5. local a = editor.GetInfo().EditorID
  6.  
  7. editor.Editor("b",nil,0,0,-1,-1,bit64.bor(F.EF_NONMODAL,F.EF_CREATENEW,F.EF_IMMEDIATERETURN))
  8.  
  9. local b = editor.GetInfo().EditorID
  10.  
  11. editor.Quit(a)
  12.  
  13. editor.Quit(b)
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 »

John Doe, ага работает (то есть воспроизводится), спасибо.

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

Re: Проблемы оконного менеджера

Post by zg »

NightRoman wrote:Если открыть два редактора из уже открытого редактора и закрыть их в порядке открытия (это важно), то окажемся не в начальном редакторе, как ожидается, а в панелях
откуда такие ожидания? так всегда было.
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
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

NightRoman wrote:Я не говорю, что было иначе. Ожидания из интуитивного понимания "стека окон".
моё интуитивное понимание этой темы предпологает, что сюда постятся баги, вылезшие после замены оконного менеджера. с вишами – куда-нибудь в другое место.
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
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 »

Примечание к моему скрипту http://forum.farmanager.com/viewtopic.p ... 44#p120844
В конце добавил строку

Code: Select all

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

UPDATE: Да, вероятно, фича. Ассерт начинает срабатывать, например, если перед ним добавить $Far.UI.Redraw() (то есть вызов ACTL_REDRAWALL).
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

краткая историческая справка, для тех кто принципиально не хочет смотреть в исходники фара. до 1.6* включительно в фаре оконного менеджера не было. апи позволяло мало, как-то всё работало. в 1.70 добавили диалоговые процедуры, немодальные редакторы и просмотры и попёрли баги. сделали оконный менеджер. вкратце в этом менеджере 6 одноэлементных очередей для каждого типа сообщений. почему так — это отдельная история, но последствия всего этого не очень хорошие: сообщения теряются (очереди одноэлементные), сообщения обрабатываются не в том порядке, в котором поступили, а в фиксированной последовательности по типу (очередей 6). всё это порождало кучу глюков. т.е. к примеру послали рефреш панелям и диалогу, отрефрешится только диалог. всё это 13 лет костылилось, причём не в менеджере, а равномерно по всему коду. плюс на это всё накладывается то, что некоторые элементы не всегда были окнами, это костылилось, потом они становились окнами, часть костылей оставалась и аукается до сих пор. на всё это накладываются макросы. та же проблема с mctl_getarea и getplugininfo/open — растёт как раз из костылей оконного менеджера. если их убрать, она решится сама собой, даже ничего делать специально не придётся. actl_commit — это очень огромный костыль, отданный наружу. человек, который это сделал к сожалению вообще не понимал, что делает.
в итоге, так как принцип «работает, не трож» уже не работал, я потратил свой отпуск на то, чтобы по крайней мере заменить 6 одноэлементных очередей на одну бесконечной длины и убрать часть костылей. также стоить заметить, что большинство багов вылезших после этого были и раньше. из чисто новых пока только исправление в билде 3999. всё остальное было и раньше.
это бэкграунд. теперь на этом фоне мы имеем некоторых плагинописателей, которые считают, что их плагины самые важные и если что-то сломалась, то срочно нужно починить (что в принципе само по себе не является чем-то плохим) при этом как-то локализовывать проблему никак не хотят (а вот это не очень хорошо).
NightRoman wrote:Мое понимание темы - "Проблемы оконного менеджера". На мой взгляд, описанное поведение - проблема оконного менеджера.
тема находится в разделе глюки и баги, описанное поведение ни тем, ни другим не является. если я правильно помню, это не первый случай, когда ты пытаешься пропихнуть фичу под видом бага.
NightRoman wrote:Сейчас подходящее время проблему поднять, раз идет работа над менеджером. Речь не о више, а о дефекте.
речь именно о више. на фоне того, что в менеджере просто гора дефектов, время для вишей неподходящее.
NightRoman wrote:бюрократия, так бюрократия.
никакой бюрократии, тебе влом локализовать проблему, сразу грамотно о ней написать, мне после такого отношения влом реализовывать виши, которые ты ещё и за дефекты пытаешься выдать, особенно на фоне того, что есть и без этого чем занятся.
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
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

NightRoman wrote:Помогать пытаюсь, а не страдать ерундой, которая мне выше вменяется в весьма сомнительной форме. И непонятно, чем вызван такой негативный отклик.
негативный отклик конкретно вызван вот этим:
NightRoman wrote:- открываем редактор 1, в EE_READ EditorID равен 0 - OK
- открываем диалог плагина, наверное, неважно какой (но Фар мессадж не годится), закрываем его
- открываем редактор 2, в EE_READ EditorID опять равен 0 - плохо, у нас уже есть открытый редактор с этим ИД
сообщение ложно. для установления ложностии было потрачено моё личное время. так понятнее?
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
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 19 times
Been thanked: 1 time

Re: Проблемы оконного менеджера

Post by Kerberos464 »

zg wrote:сообщение ложно. для установления ложностии было потрачено моё личное время. так понятнее?
в таком случае юзеру будет надёжнее (проще, безопаснее - нужное подчеркнуть) вообще не репортить о багах.
ибо очевидно, что некоторые баги могут багами и не являться.
а могут и являться, но не проявиться в ваших условиях тестирования.
но зачем юзеру испытывать на себе терпение разработчиков и тратить их личное время? лучше промолчать о том, что выглядит как баг, авось разработчики сами когда-нибудь наткнутся и пофиксят.
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

  1. local F=far.Flags
  2.  
  3. editor.Editor("a",nil,0,0,-1,-1,bit64.bor(F.EF_NONMODAL,F.EF_CREATENEW,F.EF_IMMEDIATERETURN))
  4.  
  5. local a = editor.GetInfo().EditorID
  6.  
  7. editor.Editor("b",nil,0,0,-1,-1,bit64.bor(F.EF_NONMODAL,F.EF_CREATENEW,F.EF_IMMEDIATERETURN))
  8.  
  9. local b = editor.GetInfo().EditorID
  10.  
  11. editor.Quit(b)
  12.  
  13. editor.Quit(a)
При выполнении этого кода событие EE_CLOSE вызывается только для редактора b.
(4005)
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

Kerberos464 wrote:в таком случае юзеру будет надёжнее (проще, безопаснее - нужное подчеркнуть) вообще не репортить о багах.
1. для юзеров есть правила. если они не соблюдаются, то проблема обычно даже не рассматривается.
2. даже в коммерческих проектах от бестолковых багрепортов вреда больше, чем пользы. фар проект некоммерческий — тут вообще один вред.
3. здесь речь не о юзерах, поэтому ваше сообщение вообще не в тему и офтопик.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

В 4006 проблема с очерёдностью событий:

Update
В 4008 что-то правилось, проверю завтра.
Post Reply

Return to “Глюки и баги”