View Issue Details

IDProjectCategoryView StatusLast Update
0003703Far ManagerGeneralpublic2021-06-26 15:49
ReporterJohnDoe Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Platformx86OSWindowsOS VersionXP SP3
Product Version3.0 
Fixed in Version3.0 
Summary0003703: Colorer: невидимый диалог при ошибке создания лога
DescriptionЕсли при открытии редактора вместе с ворнингом FarColorer выводится и какое-либо сообщение (другим плагином), то наблюдается странное поведение: ворнинг может стать невидимым (вероятно затирается перерисовкой редактора или RestoreScreen).
Steps To Reproduce1. Создать макрос, выводящий сообщение при открытии редактора.
Event {
  group="EditorEvent";
  action=function(EditorID,Event,Param)
    if Event==far.Flags.EE_READ then
      far.Message("")
    end
  end;
}

2. В настройках Colorer задать путь лога в несуществующей папке

3. Перезапустить фар Far.exe /p%FARHOME%\Plugins\

4. Открыть редактор:

   ╔═════════════════════════════════ FarColorer ═════════════════════════════════╗
   ║                             Problem with Colorer                             ║
   ║ Exception: Can't open output stream for error handler: 'c:\apps\colorer.log' ║
   ╟──────────────────────────────────────────────────────────────────────────────╢
   ║                                    { Ok }                                    ║
   ╚══════════════════════════════════════════════════════════════════════════════╝
Поверх этого сообщения будет также выведенное макросом:

   ╔═ Message ═╗
   ║           ║
   ╟───────────╢
   ║  { OK }   ║
   ╚═══════════╝

5. После нажатия Enter - Message закрывается, а диалог FarColorer "пропадает" с экрана, но не закрывается (а курсорными клавишами можно проявить { OK } в невидимом диалоге).

6. Ещё один Enter закрывает диалог, при этом можно наблюдать на экране странную последовательность проявления разных окон, позволяющую заподозрить эффекты Save/RestoreScreen.
TagsNo tags attached.
Build5583

Activities

sonar

2020-04-01 19:46

developer   bugnote:0016766

Это не ошибка Colorer. вероятно ошибка Lua.
колорер не делает Save/RestoreScreen при данных вызовах. скорее Lua это делает, и т.к. его окно выше, при нажатии enter обрабатывает нажатие и восстанавливает старый экран

JohnDoe

2020-04-03 14:38

updater   bugnote:0016772

Last edited: 2020-04-03 14:44

Lua совершенно точно ничего такого не делает. И проблема вопроизводится только с Колорер.

> колорер не делает Save/RestoreScreen при данных вызовах.

Я и не предполагал, что он делает это при ЭТИХ вызовах.
Такое поведение типично при выводе прогресса с помощью Message (без кнопок).
При этом плагин должен самостоятельно обновить экран, и именно эта функцию я подозреваю в некорректном использовании RestoreScreen.

https://github.com/colorer/FarColorer/search?q=restorescreen&unscoped_q=restorescreen

Рекомендуемое исправление: вместо восстанавления сохранённого экрана - обновлять.

sonar

2020-04-03 15:38

developer   bugnote:0016773

Last edited: 2020-04-03 15:40

я не помню как было на текущей версии плагина, сколько там Save/RestoreScreen. проверяю на новой , и тут такая же ошибка. и Save/RestoreScreen используется только в одном месте - в диалоге настроек. (остальные удалены по заветам отцов)
что получаем.
1. происходит ошибка открытия файла.
2. на это событие вызывается Info.Message(&MainGuid, &ErrorMessage, FMSG_WARNING, L"exception", &exceptionMessage[0], std::size(exceptionMessage), 1);
3. в это время управление возвращается к фару, который в начале рисует мой message, а потом обрабатывает другие собывтия - в частности от макроса рисует поверх моего своё сообщение.
4. и тут мы ждем реакцию пользователя. как только он нажимает ок на диалоге из макроса , происходит зачистка экрана. а функция из пункта 2 еще не вернула управление, ждет ответа.
5. и только после попвток нажать ok на невидимом окне управление возвращается и плагин работает дальше

вывод - пока не вижу ошибки колорера

JohnDoe

2020-04-03 21:20

updater   bugnote:0016774

Внутреннюю логику понять иногда сложно, я вот просто вижу в файле 5 вызовов Restore.
 Проще всего проверить тупо закомментировав их...

sonar

2020-04-04 14:57

developer   bugnote:0016775

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

sonar

2020-04-10 05:52

developer   bugnote:0016782

реализовано в 1.3.0 - убраны все save/Restore . но эффект сохраняется, поскольку дело в lua

JohnDoe

2020-04-12 09:26

updater   bugnote:0016788

В 1.3.1 при указании несуществующей папки для лога - не выдаётся никаких ошибок.

sonar

2020-04-12 09:39

developer   bugnote:0016789

потому как логер создает эту папку. но если указать, например, не существующий диск, где создание не возможно - будет ошибка

JohnDoe

2020-04-12 10:18

updater   bugnote:0016790

Last edited: 2020-04-12 10:20

> потому как логер создает эту папку

У меня похоже лог вообще не создаётся при детализации INFO

shmuel

2020-04-12 11:15

developer   bugnote:0016791

То, что окошко LuaMacro выводится поверх окошка колорера, мне не очень понятно. Event это не макрос, который может что-то вывести поверх.
При выводе первого модального диалога на экран, полагаю, что Фар не вызывает редакторные события других плагинов вплоть до закрытия этого диалога.

shmuel

2020-04-12 11:42

developer   bugnote:0016792

Сейчас сделал опыт: в двух плагинах (LuaMacro и LF4Editor) поставил вывод Message по событию EE_READ. Результат: второй диалог выводится только после закрытия первого.

JohnDoe

2020-04-12 12:26

updater   bugnote:0016793

Воспроизвёл:
Event {
  group="EditorEvent";
  action=function(EditorID,Event,Param)
    if Event==far.Flags.EE_READ then
        far.Message("2")
    end
  end;
}

local processed = {}
Event {
  group="EditorEvent";
  action=function(EditorID,Event,Param)
    if Event==far.Flags.EE_REDRAW and not processed[EditorID] then
      processed[EditorID] = true
      far.Message("11111111111111111111111111111111","1",nil,"w")
    end
  end;
}

zg

2020-04-12 12:28

developer   bugnote:0016794

5583.
> При выводе первого модального диалога на экран, полагаю, что Фар не вызывает редакторные события других плагинов вплоть до закрытия этого диалога.

вызывает.

shmuel

2020-04-12 12:31

developer   bugnote:0016795

> вызывает.
Может в 5583 и вызывает (может он там и кино показывает), а в 5580 - не вызывает.

zg

2020-04-12 13:29

developer   bugnote:0016796

> Может в 5583 и вызывает (может он там и кино показывает), а в 5580 - не вызывает.
а что так грубо? я вам что-то плохое сделал?
я не знаю, что вы имеете ввиду под редакторными событиями других плагинов, но вот простой макрос + airbrush:
MenuItem {
  description='test';
  menu='Plugins';
  area='Dialog';
  guid='CCFF5933-05E0-44F3-A148-6CB44E62F0AD';
  text='test';
  action = function(OpenFrom,Item)
    Plugin.SyncCall('9860393A-918D-450F-A3EA-84186F21B0A2',0,-1,'208B30EE-E89E-4050-BADF-299B80D02FFE')
  end;
}
если вызвать его из диалога поиска, то раскраска сменится, т.е. ee_redraw в airbrush пришёл, при этом диалог поиска всё так же на экране.

shmuel

2020-04-12 14:12

developer   bugnote:0016797

@zg, написал я вам длинный ответ но движок его не принял, сказал нажать back у браузера, после чего ответ исчез. Повторять его времени нет, но насчёт грубости вы не правы, намерения вас как-либо обидеть не было и нет.

JohnDoe

2020-04-12 14:47

updater   bugnote:0016798

> я не знаю, что вы имеете ввиду под редакторными событиями других плагинов

Вероятно только то, что EE_READ обрабатывается синхронно: управление следующему обработчику передаётся после получения управления от предыдущего.

zg

2020-04-12 17:40

developer   bugnote:0016800

> Вероятно только то, что EE_READ обрабатывается синхронно: управление следующему обработчику передаётся после получения управления от предыдущего.
да. но в исходном сообщение говорилось о событиях в общем, а в общем есть ee_redraw и он может быть вложенным и т.д. и фраза про модальный диалог сбивает с толку, потому что показ модального диалога в ee_read не влияет на порядок исполнения обработчиков ee_read никак.

Issue History

Date Modified Username Field Change
2019-03-15 11:53 JohnDoe New Issue
2019-03-16 07:20 JohnDoe Steps to Reproduce Updated
2020-04-01 19:46 sonar Note Added: 0016766
2020-04-03 14:38 JohnDoe Note Added: 0016772
2020-04-03 14:40 JohnDoe Note Edited: 0016772
2020-04-03 14:44 JohnDoe Note Edited: 0016772
2020-04-03 15:38 sonar Note Added: 0016773
2020-04-03 15:39 sonar Note Edited: 0016773
2020-04-03 15:40 sonar Note Edited: 0016773
2020-04-03 21:20 JohnDoe Note Added: 0016774
2020-04-04 14:57 sonar Note Added: 0016775
2020-04-10 05:52 sonar Note Added: 0016782
2020-04-12 09:26 JohnDoe Note Added: 0016788
2020-04-12 09:39 sonar Note Added: 0016789
2020-04-12 10:18 JohnDoe Note Added: 0016790
2020-04-12 10:20 JohnDoe Note Edited: 0016790
2020-04-12 11:15 shmuel Note Added: 0016791
2020-04-12 11:42 shmuel Note Added: 0016792
2020-04-12 12:26 JohnDoe Note Added: 0016793
2020-04-12 12:28 zg Note Added: 0016794
2020-04-12 12:31 shmuel Note Added: 0016795
2020-04-12 13:29 zg Note Added: 0016796
2020-04-12 14:12 shmuel Note Added: 0016797
2020-04-12 14:47 JohnDoe Note Added: 0016798
2020-04-12 17:40 zg Note Added: 0016800
2020-04-13 09:29 JohnDoe Project Plugins => Far Manager
2020-04-13 09:29 JohnDoe Category Colorer => General
2020-04-13 09:31 JohnDoe Status new => resolved
2021-06-26 15:49 JohnDoe Status resolved => closed
2021-06-26 15:49 JohnDoe Resolution open => fixed
2021-06-26 15:49 JohnDoe Fixed in Version => 3.0
2021-06-26 15:49 JohnDoe Build => 5583