View Issue Details

IDProjectCategoryView StatusLast Update
0001677WishesPlugins APIpublic2013-02-03 00:33
Reportermax rusov Assigned Tovskirdin  
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionfixed 
Product Version2.0 
Fixed in Version3.0 
Summary0001677: При запуске макроса через MCMD_POSTMACROSTRING задавать код "запускающей" клавиши
DescriptionВ макросах, запускаемых программно по команде MCMD_POSTMACROSTRING функции AKey()/$AKey не имеют смысла, они, похоже, возвращают клавишу запустившую предыдущую клавиатурную макропоследовательность.

Предлагается добавить возможность при вызове сообщить FAR'у код клавиши, как будто запустившей этот макрос. Этот код можно передать через структуру ActlKeyMacro, задействовав одно из Reserved полей.

Это было бы полезно для плагина MacroLib, чтобы не приходилось модифицировать макросы, использующие AKey()/$AKey
TagsNo tags attached.
Build2208

Activities

vskirdin

2011-01-25 13:58

administrator   bugnote:0006241

build 1800 - тестим

max rusov

2011-01-27 07:47

reporter   bugnote:0006251

Все работает, спасибо. Поддержал в MacroLib'е

max rusov

2011-01-29 19:26

reporter   bugnote:0006270

Обнаружилась проблема. Код передаваемой в MCMD_POSTMACROSTRING клавиши перестает корректно обрабатываться после срабатывания любого макроса из реестра.

Подробные шаги для воспроизведения ошибки на примере плагина MacroLib:
http://forum.farmanager.com/viewtopic.php?p=76870#p76870

vskirdin

2011-01-30 06:38

administrator   bugnote:0006271

"на примере плагина MacroLib" - ну устраивает (это твой плагин и кто скажет, что это не он глючит). Давай что-то "более дикое и необузданное" :-)
Лучше, если повторить можно вообще без плагинов.

max rusov

2011-01-30 19:36

reporter   bugnote:0006288

Как ты себе это представляешь? Это же API для плагинов. Не думаю, что глючит MacroLib. Разве сложно поставить точку останова, и убедиться, что в качестве параметра передан один код а AKey возвращает другой?

vskirdin

2011-01-31 10:21

administrator   bugnote:0006289

Я не в претензиях к этому плагину, но,
* во-первых, он не входит в стандартную поставку, а потому не показатель
* во-вторых, если есть трабла (и, как заявлено, в Far`е), то необходимо минимизировать количество инструментария, чтобы выявить ее (читай - воспроизводится у всех, а не только у тех, у кого этот плагин стоит) - идеал: без плагинов вообще ;-)

max rusov

2011-01-31 11:09

reporter   bugnote:0006290

Last edited: 2011-01-31 11:33

Валентин, я не понимаю в чем вопрос. Речь идет о новой фиче в плагинном API. Есть _только_один_ плагин, который этой фичей пользуется. На нем ошибка воспроизводится, стабильно. Что ты предлагаешь? Написать _другой_ плагин, чтобы получить ту-же ошибку? Или что?

vskirdin

2011-01-31 12:56

administrator   bugnote:0006296

build 1804

vskirdin

2011-03-29 12:47

administrator   bugnote:0006625

Макс, обрати внимание на 0001736
С той правкой решенность этого тикета не отвалилась?

vskirdin

2011-04-05 10:17

administrator   bugnote:0006671

тест (на основе 1807 original)

В macro.cpp кусок для "case MCODE_OP_AKEY" и "case MCODE_F_AKEY:" заменяем на

          case MCODE_OP_AKEY: // $AKey
          {
            DWORD aKey=KEY_NONE;
            if (!(MR->Flags&MFLAGS_POSTFROMPLUGIN))
            {
                INPUT_RECORD *inRec=&Work.cRec;
                if (!inRec->EventType)
                    inRec->EventType = KEY_EVENT;
                if(inRec->EventType == KEY_EVENT || inRec->EventType == FARMACRO_KEY_EVENT)
                    aKey=CalcKeyCode(inRec,TRUE,nullptr);
            }
            else
                aKey=MR->Key;
            return aKey;
        }
        case MCODE_F_AKEY: // V=akey(Mode[,Type])
        {
            int tmpType=(int)VMStack.Pop().getInteger();
            int tmpMode=(int)VMStack.Pop().getInteger();

            DWORD aKey=MR->Key;

            if (!tmpType)
            {
                if (!(MR->Flags&MFLAGS_POSTFROMPLUGIN))
                {
                    INPUT_RECORD *inRec=&Work.cRec;
                    if (!inRec->EventType)
                        inRec->EventType = KEY_EVENT;
                    if(inRec->EventType == KEY_EVENT || inRec->EventType == FARMACRO_KEY_EVENT)
                        aKey=CalcKeyCode(inRec,TRUE,nullptr);
                }
                else if (!aKey)
                    aKey=KEY_NONE;
            }

            if (!tmpMode)
                tmpVar=(__int64)aKey;
            else
            {
                KeyToText(aKey,value);
                tmpVar=value.CPtr();
                tmpVar.toString();
            }
            VMStack.Push(tmpVar);
            goto begin;
        }




В macro.hpp добавляем
MFLAGS_POSTFROMPLUGIN =0x20000000, // последовательность пришла от АПИ
перед MFLAGS_NEEDSAVEMACRO

В plugapi.cpp вместо
return Macro.PostNewMacro(KeyMacro->Param.PlainText.SequenceText,KeyMacro->Param.PlainText.Flags<<8,KeyMacro->Param.PlainText.AKey);
ставим
return Macro.PostNewMacro(KeyMacro->Param.PlainText.SequenceText,(KeyMacro->Param.PlainText.Flags|MFLAGS_POSTFROMPLUGIN)<<8,KeyMacro->Param.PlainText.AKey);

vskirdin

2011-04-06 11:01

administrator   bugnote:0006716

build 1946

samlyukov

2011-09-10 09:05

reporter   bugnote:0007647

Валь, у тебя масса топиков не закрытых по макросам.

vskirdin

2011-09-12 06:51

administrator   bugnote:0007654

А че я могу поделать? По правилам я при исправлении должен выставить "нужен отклик", податель - "отработан" и только потом уже я "закрыт".

max rusov

2011-09-12 07:31

reporter   bugnote:0007655

Я не могу откликнуться, потому что у меня нет Far3. Если кто-нибудь все протестировал и убедился в работоспособности - пусть напишет.

max rusov

2011-09-26 23:32

reporter   bugnote:0007752

Не могу понять - то ли я что-то не так делаю, то ли какая-то ошибка в Far 3. Код запускающей клавиши нормально возвращается функцией AKey(), однако команда $AKey не срабатывает. Попробуйте, например, такой макрос для MacroLib'а:

macro Descr="Test" Key="F1 AltF1 F2 AltF2 F12 AltF12"
{{
  MsgBox("Key", "Code: " + AKey(0) + ", Name: " + AKey(1) );
  $AKey // Так - не работает...
// Eval(AKey(1)); // А так - работает.
}}

MacroLib для Far3 можно взять в шапке темы http://forum.farmanager.com/viewtopic.php?f=5&t=5994

vskirdin

2011-09-30 13:21

administrator   bugnote:0007784

Last edited: 2011-09-30 13:28

просто так макрос правильно отрабатывает - возможно в плагине начудил... (или в апи трабла).

Хрень какая то - под дебагером плагин не реагирует на клавиши (не отлавливает)...

max rusov

2011-09-30 20:34

reporter   bugnote:0007792

> Хрень какая то - под дебагером плагин не реагирует на клавиши (не отлавливает)...

А ты это учитываешь:

Используется ProcessConsoleInput (вместо хаков), поэтому Far должен быть собран с ключом MANTIS_0001687.

?

vskirdin

2011-10-01 07:21

administrator   bugnote:0007796

build 2208

max rusov

2011-10-01 20:18

reporter   bugnote:0007801

Ну вот - и ложечки нашлись :)
Спасибо, вроде все работает.

vskirdin

2011-10-03 07:37

administrator   bugnote:0007805

закрываем?

max rusov

2011-10-03 08:43

reporter   bugnote:0007808

Да. Если будут ошибки - заведем новый тикет.

Issue History

Date Modified Username Field Change
2011-01-18 20:37 max rusov New Issue
2011-01-25 11:36 vskirdin Assigned To => vskirdin
2011-01-25 11:36 vskirdin Status new => assigned
2011-01-25 13:58 vskirdin Note Added: 0006241
2011-01-25 13:58 vskirdin Status assigned => feedback
2011-01-27 07:47 max rusov Note Added: 0006251
2011-01-27 07:47 max rusov Status feedback => assigned
2011-01-27 07:47 max rusov Status assigned => resolved
2011-01-27 10:55 vskirdin Build => 1800
2011-01-27 10:55 vskirdin Status resolved => closed
2011-01-27 10:55 vskirdin Resolution open => fixed
2011-01-27 10:55 vskirdin Fixed in Version => 2.0
2011-01-29 19:26 max rusov Note Added: 0006270
2011-01-29 19:26 max rusov Status closed => feedback
2011-01-29 19:26 max rusov Resolution fixed => reopened
2011-01-30 06:38 vskirdin Note Added: 0006271
2011-01-30 19:36 max rusov Note Added: 0006288
2011-01-30 19:36 max rusov Status feedback => assigned
2011-01-31 10:21 vskirdin Note Added: 0006289
2011-01-31 11:09 max rusov Note Added: 0006290
2011-01-31 11:10 max rusov Note Edited: 0006290
2011-01-31 11:33 max rusov Note Edited: 0006290
2011-01-31 12:56 vskirdin Note Added: 0006296
2011-01-31 12:56 vskirdin Status assigned => feedback
2011-03-29 12:47 vskirdin Note Added: 0006625
2011-04-05 10:17 vskirdin Note Added: 0006671
2011-04-06 11:01 vskirdin Note Added: 0006716
2011-09-10 09:05 samlyukov Note Added: 0007647
2011-09-12 06:51 vskirdin Note Added: 0007654
2011-09-12 07:31 max rusov Note Added: 0007655
2011-09-12 07:31 max rusov Status feedback => assigned
2011-09-26 23:32 max rusov Note Added: 0007752
2011-09-30 13:21 vskirdin Note Added: 0007784
2011-09-30 13:28 vskirdin Note Edited: 0007784
2011-09-30 20:34 max rusov Note Added: 0007792
2011-10-01 07:21 vskirdin Note Added: 0007796
2011-10-01 07:21 vskirdin Status assigned => feedback
2011-10-01 20:18 max rusov Note Added: 0007801
2011-10-01 20:18 max rusov Status feedback => assigned
2011-10-03 07:37 vskirdin Note Added: 0007805
2011-10-03 07:37 vskirdin Status assigned => feedback
2011-10-03 08:43 max rusov Note Added: 0007808
2011-10-03 08:43 max rusov Status feedback => assigned
2011-10-03 08:56 vskirdin Build 1800 => 2208
2011-10-03 08:56 vskirdin Status assigned => closed
2011-10-03 08:56 vskirdin Resolution reopened => fixed
2011-10-03 08:56 vskirdin Fixed in Version 2.0 => 3.0
2013-02-03 00:33 alexy Severity minor => feature