View Issue Details

IDProjectCategoryView StatusLast Update
0001793WishesMacropublic2018-11-15 10:39
ReporterMaximus Assigned Tovskirdin  
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status closedResolutionduplicate 
Product Version3.0 
Summary0001793: Разрешить прерывание макроса по CtrlBreak во время "визуальных" функций
DescriptionЕсли макрос ничего не спрашивает у юзера - все хорошо, если он завис - можно прервать по CtrlBreak.
Но если на экране в цикле отображается MsgBox (например) - макрос уже фиг прервешь.
TagsNo tags attached.
Build

Relationships

has duplicate 0000924 closed Far Manager 1.7x В момент msgbox невозможно прервать макрос с помощью CtrlBreak 
related to 0002692 closedvskirdin Far Manager Невозможно прервать операцию, если она запущена из макроса 

Activities

JohnDoe

2011-06-05 12:48

updater   bugnote:0007143

0000924

vskirdin

2011-06-06 13:52

administrator   bugnote:0007156

Как себя Menu.Show ведет?
А Prompt?
А Waitkey?

vskirdin

2011-06-06 14:13

administrator   bugnote:0007157

нашел.
build 2064

Maximus

2011-06-06 14:28

reporter   bugnote:0007158

macro:post $while(1) menu.show("AAA\r\nBBB") $end
все плохо, CtrlBreak не прерывает. Нажатие крестика в консоли - приводит к зависанию фара:
меню уже не отрисовывается, видны панели, зеленая 'P' в левом верхнем углу, фар ни на что не реагирует
(кроме как на CtrlBreak, нажатие CtrlBreak приводит к закрытию фара)

macro:post $while(1) prompt("test") $end
почти все то же что и menu.show, но после нажатия крестика в консоли
на экране мельтешит окно ввода (возможно меню тоже мельтешит, но его не видно)
Нажатие крестика и CtrlBreak приводит к закрытию фара

macro:post $while(1) waitkey() $end
Зеленая 'P' в левом верхнем углу не горит.
На крестик - не реагирует, CtrlBreak после крестика - игнорируется.
Повторное нажатие на крестик через некоторое время закрывает фар

И только
macro:post $while(1) waitkey(1) $end
можно прервать по CtrlBreak

vskirdin

2011-06-06 16:52

administrator   bugnote:0007159

это в 2064?

Maximus

2011-06-06 19:26

reporter   bugnote:0007160

не, когда проверял - 2064 еще не было
в 2064 вроде прерывается нормально

vskirdin

2011-06-07 06:16

administrator   bugnote:0007161

закрываем?

Maximus

2011-06-08 10:37

reporter   bugnote:0007170

Фигня какая-то. Почему CalcKeyCode думает, что VK_CANCEL может быть нажат без Ctrl?
Из-за этого прерывание или вообще не срабатывает (в conemu) или срабатывает не сразу (в отладчике видно, что Menu.Show дергается еще раз, и только потом прерывается).

Maximus

2011-06-08 10:37

reporter  

CtrlBreak.diff (475 bytes)   
Index: keyboard.cpp
===================================================================
--- keyboard.cpp	(revision 6321)
+++ keyboard.cpp	(working copy)
@@ -2917,6 +2917,10 @@
 				return KEY_PRNTSCRN;
 		}
 	}
+	else if (KeyCode == VK_CANCEL && IntKeyState.CtrlPressed && !IntKeyState.AltPressed && !IntKeyState.ShiftPressed)
+	{
+		return(KEY_BREAK);
+	}
 
 	/* ------------------------------------------------------------- */
 	if (IntKeyState.CtrlPressed)
CtrlBreak.diff (475 bytes)   

vskirdin

2011-06-08 13:53

administrator   bugnote:0007173

см. WriteInput (и вызов в KeyMacro::SendDropProcess())
походу надо 4 вызова делать...
VK_CONTROL down
VK_CANCEL down
VK_CANCEL up
VK_CONTROL up
и соответственно для WriteInput добавлять третий параметр - флаги...
не?

Maximus

2011-06-08 14:47

reporter   bugnote:0007175

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

vskirdin

2011-06-08 15:17

administrator   bugnote:0007177

> Не лучше ли при получении CtrlBreak взводить флаг и ориентироваться на него?
возможно и так...
...надо подумать

vskirdin

2011-06-10 07:22

administrator   bugnote:0007179

http://skirda-file.googlecode.com/files/m1793.2.7z

Maximus

2011-06-10 08:55

reporter   bugnote:0007185

ага, все прерывается нормально. в том числе и в conemu

vskirdin

2011-06-10 09:35

administrator   bugnote:0007187

build 2066

Maximus

2011-07-12 11:20

reporter   bugnote:0007269

Last edited: 2011-07-12 11:22

После очередного патча прерывания макроса поломалась отрисовка при mmode(1,0)

[HKEY_CURRENT_USER\Software\Far Manager\KeyMacros\Shell\MsRClick]
"Sequence"="mmode(1,0) MsLClick mmode(1,1) F11 e Enter 1"
"Description"="EMenu - показать графическое меню по RClick, hotkey для emenu - 'e'"
"DisableOutput"=dword:00000001

После MsLClick панели должны были отрисоваться

Раньше отрисовка проходила в PeekInputRecord, вызываемом из KeyMacro::GetKey()

    // Mantis#0000581: Добавить возможность прервать выполнение макроса
    {
        INPUT_RECORD rec;

        if (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL)


Теперь PeekInputRecord там больше нет

    // Mantis#0000581: Добавить возможность прервать выполнение макроса
    {
        INPUT_RECORD rec;

        //if (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL)
        if (StopMacro)
        {

Maximus

2011-07-12 22:12

reporter   bugnote:0007281

Index: macro.cpp
===================================================================
--- macro.cpp (revision 6465)
+++ macro.cpp (working copy)
@@ -4695,8 +4695,7 @@
     {
         INPUT_RECORD rec;
 
- //if (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL)
- if (StopMacro)
+ if (StopMacro || (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL))
         {
             GetInputRecord(&rec,true); // удаляем из очереди эту "клавишу"...
             Work.KeyProcess=0;

vskirdin

2011-07-24 06:24

administrator   bugnote:0007302

build 2115

Maximus

2011-08-23 14:05

reporter   bugnote:0007507

Продолжение банкета.

делаем макрос на F3
mmode(1,0) F3

выбираем толстую папку, например "C:\Program Files", жмем F3
в углу горит индикатор - зеленый P, бодро отсчитываются гигабайты, приходится ждать, пока до конца не досчитает - прервать нельзя
исключение - если появляется Elevation, тогда макрос завершается.

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

Maximus

2011-08-23 14:06

reporter   bugnote:0007508

Под "прервать" в данном случая понимаем, что нет реакции ни на Esc ни на CtrlBreak

JohnDoe

2011-08-23 15:04

updater   bugnote:0007512

Тема на форуме: http://forum.farmanager.com/viewtopic.php?f=15&t=6428

JohnDoe

2013-04-10 16:55

updater   bugnote:0010724

Last edited: 2015-01-24 19:15

С CtrlBreak сейчас более глобальная проблема: 0002288

Но и проблема с F3 никуда не делась: lm:post mmode(1,0) Keys'F3'
По Esc не прервать
Update: 0002692

JohnDoe

2015-01-24 19:16

updater   bugnote:0013434

Предлагаю закрыть, в пользу 0002288 и 0002692.

Issue History

Date Modified Username Field Change
2011-06-05 12:32 Maximus New Issue
2011-06-05 12:48 JohnDoe Note Added: 0007143
2011-06-06 13:52 vskirdin Note Added: 0007156
2011-06-06 13:52 vskirdin Assigned To => vskirdin
2011-06-06 13:52 vskirdin Status new => assigned
2011-06-06 14:13 vskirdin Note Added: 0007157
2011-06-06 14:13 vskirdin Status assigned => feedback
2011-06-06 14:28 Maximus Note Added: 0007158
2011-06-06 14:28 Maximus Status feedback => assigned
2011-06-06 16:52 vskirdin Note Added: 0007159
2011-06-06 19:26 Maximus Note Added: 0007160
2011-06-07 06:16 vskirdin Note Added: 0007161
2011-06-07 06:16 vskirdin Status assigned => feedback
2011-06-08 10:37 Maximus Note Added: 0007170
2011-06-08 10:37 Maximus Status feedback => assigned
2011-06-08 10:37 Maximus File Added: CtrlBreak.diff
2011-06-08 13:53 vskirdin Note Added: 0007173
2011-06-08 14:47 Maximus Note Added: 0007175
2011-06-08 15:17 vskirdin Note Added: 0007177
2011-06-10 07:22 vskirdin Note Added: 0007179
2011-06-10 08:55 Maximus Note Added: 0007185
2011-06-10 09:35 vskirdin Note Added: 0007187
2011-06-10 09:35 vskirdin Status assigned => feedback
2011-07-12 11:20 Maximus Note Added: 0007269
2011-07-12 11:20 Maximus Status feedback => assigned
2011-07-12 11:22 Maximus Note Edited: 0007269
2011-07-12 22:12 Maximus Note Added: 0007281
2011-07-24 06:24 vskirdin Note Added: 0007302
2011-07-24 06:24 vskirdin Status assigned => feedback
2011-08-23 14:05 Maximus Note Added: 0007507
2011-08-23 14:05 Maximus Status feedback => assigned
2011-08-23 14:06 Maximus Note Added: 0007508
2011-08-23 15:04 JohnDoe Note Added: 0007512
2013-02-03 00:33 alexy Severity minor => feature
2013-04-10 16:55 JohnDoe Note Added: 0010724
2015-01-24 19:15 JohnDoe Note Edited: 0010724
2015-01-24 19:16 JohnDoe Note Added: 0013434
2018-11-15 10:35 JohnDoe Relationship added duplicate of 0000924
2018-11-15 10:36 JohnDoe Relationship deleted 0000924
2018-11-15 10:36 JohnDoe Relationship added has duplicate 0000924
2018-11-15 10:38 JohnDoe Relationship added related to 0002692
2018-11-15 10:39 JohnDoe Status assigned => closed
2018-11-15 10:39 JohnDoe Resolution open => duplicate