View Issue Details

IDProjectCategoryView StatusLast Update
0001736Far ManagerMacropublic2012-05-13 14:43
ReporterSUSim Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0001736: akey(1,0)==akey(1,1) Far 3.0.1931 far2.0.1807
DescriptionВ макросах вызванных по eval("MyKey",2) команда akey(1,0) возвращает "MyKey", а должна возвращать имя клавиши которой запустили первый-вызывающтй макрос.
Steps To ReproduceПервый макпрос назначен на клавишу CtrlShift1:
msgbox(akey(1,0),akey(1,1))
Второй макрос назначен на клавишу CtrlShift2:
eval("CtrlShift1",2)

Нажав CtrlShift2 получаем:
╔═ CtrlShift1 ═╗
║ CtrlShift1 ║
а должны бы:
╔═ CtrlShift2 ═╗
║ CtrlShift1 ║

Additional InformationWindows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Far Manager\KeyMacros\Shell]

[HKEY_CURRENT_USER\Software\Far Manager\KeyMacros\Shell\CtrlShift1]
"Sequence"="msgbox(akey(1,0),akey(1,1))"

[HKEY_CURRENT_USER\Software\Far Manager\KeyMacros\Shell\CtrlShift2]
"Sequence"="eval(\"CtrlShift1\",2)"
TagsNo tags attached.
Build2670

Activities

JohnDoe

2011-03-28 10:20

updater   bugnote:0006591

Замечание вроде бы резонное.
Но вначале хотелось бы вспомнить историю появления второго параметра akey.
Я что-то на форуме не нахожу...

vskirdin

2011-03-28 11:02

administrator   bugnote:0006594

svs 17.01.2010 21:26:17 +0300 - build 1345

2. Mantis#0001239: Получение через AKey нажатой клавиши с учетом раскладки клавиатуры
   Добавлен необязательный параметр функции akey()
     V=akey(Mode[,Type])
       Mode = 0 - число
              1 - строка
       Type = 0 - возвращает реально-нажатое сочетание, которым вызывался макрос
              1 - возвращает клавишу, на которую назначен макрос.

JohnDoe

2011-03-28 12:00

updater   bugnote:0006599

Ага. Очевидно в Писание нужно добавить эти подробности.

SUSim
Как вы видите, akey(1,0) задумывался для других целей, и свои задачи выполняет.
Возможно стоит добавить akey(...,2), но хотелось бы сначала увидеть примеры применения.

SUSim

2011-03-28 17:22

reporter   bugnote:0006614

Last edited: 2011-03-28 17:47

Я не понимаю, или Вы не понимаете:
клавиша вызвавшая макрос НЕ ВСЕГДА равна клавише на которую повешен макрос!

JohnDoe, akey(1,0) НЕ ВЫПОЛНЯЕТ своих обязанностей при использовании eval - он не возвращает реально нажатую клавишу!
akey(1,0) должна всегда возвращать нажатую клавишу, а не клавишу на которую повешен макрос(думаете почему я откатился с 1807 на 1803{там все работает как надо})! или я чего не понимаю?

SUSim

2011-03-28 17:37

reporter   bugnote:0006615

Last edited: 2011-03-28 17:52

vskirdin, меня волнует именно второй параметр akey(?,ЭТО)
ЭТО=0 - раньше всегда возвращало клавишу которую я нажал = которая вызвала макрос-связку,ЭТО=1 клавишу на которую повешен макрос вызванный макропоследовательностью, а теперь ЭТО всегда возвращает клавишу на которую назначен последний макрос.

Пример Вам не подходит? из первого поста?

SUSim

2011-03-28 17:56

reporter   bugnote:0006616

Last edited: 2011-03-28 17:57

Всё я выдохся, разяснять чего я хочу :( (что раньше работало)
Говорю конкретно: как мне узнать какой клавишей вызвали макрос, а не на какую клавишу он повешен? (раньше это выяснялось по akey(1) а теперь нет...)

JohnDoe

2011-03-29 08:57

updater   bugnote:0006617

Last edited: 2011-03-29 09:22

>akey(1,0) НЕ ВЫПОЛНЯЕТ своих обязанностей при использовании eval - он не возвращает реально нажатую клавишу!
А вы внимательнее почитайте историю его создания, "реально_нажатая_клавиша" это не совсем то что вы думаете. И появилось оно ещё в 1345, тогда как eval расширили позже - в 1528.

>Всё я выдохся, разяснять чего я хочу :( (что раньше работало)
Раз оно раньше работало, то с этого и надо было начать.
У меня в 1807 тоже кое-что в макросах не так работает (вроде бы $AKey, всё никак не найду время разобраться)

JohnDoe

2011-03-29 10:10

updater   bugnote:0006622

P.S.
Судя по changelog'у всё "поломалось" из-за 0001677 (всё ещё ожидает фидбэка).

vskirdin

2011-03-29 11:45

administrator   bugnote:0006624

Тестим.
Far 1807, macro.cpp, ищем и меняем:

case MCODE_OP_AKEY: // $AKey
case MCODE_F_AKEY: // V=akey(Mode[,Type])
{
...
}

на

        case MCODE_OP_AKEY: // $AKey
        {
            DWORD aKey=KEY_NONE;
            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);
            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)
            {
                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);
            }

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

JohnDoe

2011-03-29 13:32

updater   bugnote:0006626

Last edited: 2011-03-29 13:37

Вроде как толку от этого фикса нет, но пусть ещё SUSim проверит.
Приаттачил бинарник.

vskirdin

2011-03-29 13:55

administrator   bugnote:0006627

в смысле нету? поподробнее с этого места.

JohnDoe

2011-03-29 14:25

updater   bugnote:0006628

Last edited: 2011-03-29 15:03

Виноват, перепроверил. Проблема из описания тикета ушла: akey(1,0) теперь != akey(1,1)

JohnDoe

2011-03-29 15:18

updater   bugnote:0006629

Вопрос: при запуске eval("й",2) должен ли запускаться макрос, назначеный на "q"?

SUSim

2011-03-29 18:31

reporter   bugnote:0006630

Last edited: 2011-03-29 18:34

JohnDoe> Судя по changelog'у всё "поломалось" из-за 0001677 (всё ещё ожидает фидбэка).
Это поломалось при адаптации macrolib к фару во время второй попытки...
FAR (1803->1806)

JohnDoe>А вы внимательнее почитайте историю его создания...
Я внимательно прочитал ПИСАНИЕ и оно раньше (1803) соответствовало действительности:
"Type = 0 - возвращает реально нажатое сочетание, которым вызывался макрос,
Type = 1 - возвращает клавишу, на которую назначен макрос."
а после 1807 перестало!

vskirdin>... на Си не программист - я Си читаю, но говорю только на Фортране и на паскале...

JohnDoe>... извените, не понял что и как проверить, где БИНАРНИК?

JohnDoe> Проблема из описания тикета ушла: akey(1,0) теперь != akey(1,1)
всегда??? а почему? если макрос вызвали его же клавишей то тоже не ровна?
надеюсь это не так! (расскажите как проверить)

JohnDoe> по поводу eval("й",2) я считаю запускать макрос надо ТОЛЬКО по конкретному имени, и имя это не должно быть клавишей, но быть однозначным!

vskirdin

2011-03-29 19:01

administrator   bugnote:0006631

вот это вообще про чё?
SUSim, трабла, описанная в этом Инце ушла или нет?
Если ушла, то смысл дальше слюнявить? Если нет, не слюни убираем и описываем конкретные "непонятки".

SUSim

2011-03-29 19:08

reporter   bugnote:0006632

Какие слюни? как проверить ушла она или нет?
скажи конкретно где бинарник? (Сам я бинарник собрать не могу)

vskirdin

2011-03-30 06:26

administrator   bugnote:0006635

Читай внимательно.
специально для тебя:
2011-03-29 15:26 JohnDoe Файл добавлен: Release.32.gcc.7z

JohnDoe

2011-03-30 10:44

updater   bugnote:0006641

>по поводу eval("й",2) я считаю запускать макрос надо ТОЛЬКО по конкретному имени, и имя это не должно быть клавишей, но быть однозначным!
Предлагаю обсудить это на форуме: http://forum.farmanager.com/viewtopic.php?p=79725#p79725

vskirdin

2011-03-30 12:55

administrator   bugnote:0006642

ну в это тикете однозначно про eval не должно быть речи

JohnDoe

2011-03-30 13:33

updater   bugnote:0006643

>ну в это тикете однозначно про eval не должно быть речи
Не так уж однозначно. Если принять что eval("й",2) должен быть равнозначен eval("Q",2), то нужен способ определить как же макрос на самом деле вызван. Возможно нужен akey(...,2).

SUSim

2011-03-30 14:50

reporter   bugnote:0006644

ПОРЯДОК, так все работает!
теперь у меня опять 1807 а не 1803

SUSim

2011-03-30 15:54

reporter   bugnote:0006645

Last edited: 2011-03-30 15:56

только $Akey и Akey в макролиб отвалились!!! хотя они ив 1803 не работали, так что я привык...

JohnDoe

2011-03-31 08:10

updater   bugnote:0006647

>только $Akey и Akey в макролиб отвалились
Вероятно, придётся завести akey(...,2)?

vskirdin

2011-03-31 09:51

administrator   bugnote:0006648

build 1938

JohnDoe

2011-03-31 15:11

updater   bugnote:0006651

Не рано ли закоммитили? Ведь SUSim пишет что теперь макролиб не работает.

SUSim

2011-03-31 15:27

reporter   bugnote:0006653

Я думаю прежде всего сам ФАР, с макролиб в ФАР-3 придется разбираться я думаю отдельно, тем более должно многое поменяться...

vskirdin

2011-04-01 08:52

administrator   bugnote:0006654

Закоммитил в самый раз.
Со своим макролибом сами разбирайтесь - я его не писал и какие хаки там применены не знаю.
Без него, без плагина, траблы нет? Тогда на нет и суда нет. Мы здесь про ФАР говорим, а не про плагин.
Если есть без него - давайте уточнение.

JohnDoe

2011-04-01 13:43

updater   bugnote:0006655

>Со своим макролибом сами разбирайтесь
Справедливо.
Вот только стоит учесть, что "трабла" произошла именно ради макролиба, и если теперь всё просто вернуть назад, то получится топтание на месте.

vskirdin

2011-04-01 16:07

administrator   bugnote:0006657

IMHO пусть макролиб подстраивается под ФАР, а не наоброт, ибо завтра появится макролибEx... и чё?

Проблема в этом тиките решена?

SUSim

2011-04-02 08:57

reporter   bugnote:0006658

Проблема этого тикета решена, но я гляжу пром Mantis#0001677 не забыли...
Дополнительная инфа: там все работает до вызова обычного макроса, потом все время возвращает клавишу последнего обычного макроса...

vskirdin

2011-04-05 05:56

administrator   bugnote:0006664

если здесь решено - ставь решено, а про "там" - вот там и надо обсуждать.

vskirdin

2011-04-06 10:01

administrator   bugnote:0006717

build 1946

SUSim

2011-04-17 16:45

reporter   bugnote:0006801

Last edited: 2011-04-17 16:46

Макрос на CtrlShifF1:
msgbox(akey(1,0),akey(1,1))
работает нормально:
╔═ CtrlShiftF1 ═╗
║ CtrlShiftF1 ║
а вот:
CtrlO msgbox(akey(1,0),akey(1,1))
неправильно (куда то потерялся модификатор Shift) :
╔══ CtrlF1 ═══╗
║ CtrlShiftF1 ║
а если макрос выглядит так:
msgbox() msgbox(akey(1,0),akey(1,1))
то модификаторов вообще нет:
╔════ F1 ═════╗
║ CtrlShiftF1 ║

фар 1807 "Release.32.gcc.7z"
в 1803 тоже не работало...

SUSim

2011-04-17 16:50

reporter   bugnote:0006802

До кучи - MsWheelDown и т.п. неправильно отдается в Akey()
Макрос на MsWheelDown:
msgbox(Akey(0),MsWheelDown)
╔═ 196609 ═╗
║ 131076 ║

vskirdin

2011-05-20 06:34

administrator   bugnote:0006957

с шифтом разобрался...
...а вот с Wheel - бяда...

vskirdin

2011-05-20 07:05

administrator   bugnote:0006958

build 2037

SUSim

2012-05-10 16:35

reporter   bugnote:0009131

Last edited: 2012-05-10 16:37

Напомню... Остались недоделанными мышиные кнопки (клавиатурные возвращаются правильно, спасибо!)...

ЗЫ подумалось - а как будет если макрос повешен на мышку, а вызвали его по eval(*,2) клавиатурой, и наоборот... А если макрос имеет произвольное имя, а не кнопкосочетание... Поэксперементирую, подумаю...

vskirdin

2012-05-10 17:24

administrator   bugnote:0009133

> Остались недоделанными мышиные кнопки
свежие примеры давай... ибо msgbox(Akey(0),MsWheelDown) у меня 131076 x 131076

SUSim

2012-05-11 03:13

reporter   bugnote:0009136

Речь про eval(*,2)


<?xml version="1.0" encoding="UTF-8" ?>
<farconfig>
    <macros>
        <keymacros>
            <macro area="Common" key="CtrlAltMsLClick" flags="" description="Тест - этот макрос надо удалить;)">
                <text>
                    <![CDATA[msgbox("ТЕСТ","Реально нажали "+akey(1,0)+"\n"+"Макрос назначен на "+akey(1,1))]]>
                </text>
            </macro>
            <macro area="Common" key="CtrlAltMsRClick" flags="" description="Тест - этот макрос надо удалить;)">
                <text>
                    <![CDATA[eval("Common/CtrlAltMsLClick",2) msgbox("Должно было бы быть", "Реально нажали "+"CtrlAltMsRClick"+"\n"+"Макрос назначен на "+"CtrlAltMsLClick {eval(\"Common/CtrlAltMsLClick\",2)}")]]>
                </text>
            </macro>
        </keymacros>
    </macros>
</farconfig>

vskirdin

2012-05-11 06:01

administrator   bugnote:0009137

тест: http://skirda-file.googlecode.com/files/m1736.1.7z

vskirdin

2012-05-11 07:42

administrator   bugnote:0009147

build 2670

SUSim

2012-05-11 15:28

reporter   bugnote:0009162

Ок!, жду официальной сборки и тему про неудобства на форуме поправлю!

SUSim

2012-05-13 14:33

reporter   bugnote:0009178

Всё ок, закрывайте!

Issue History

Date Modified Username Field Change
2011-03-27 17:29 SUSim New Issue
2011-03-28 10:20 JohnDoe Note Added: 0006591
2011-03-28 11:02 vskirdin Note Added: 0006594
2011-03-28 12:00 JohnDoe Note Added: 0006599
2011-03-28 17:22 SUSim Note Added: 0006614
2011-03-28 17:23 SUSim Note Edited: 0006614
2011-03-28 17:27 SUSim Note Edited: 0006614
2011-03-28 17:30 SUSim Note Edited: 0006614
2011-03-28 17:37 SUSim Note Added: 0006615
2011-03-28 17:38 SUSim Note Edited: 0006615
2011-03-28 17:47 SUSim Note Edited: 0006615
2011-03-28 17:47 SUSim Note Edited: 0006614
2011-03-28 17:52 SUSim Note Edited: 0006615
2011-03-28 17:56 SUSim Note Added: 0006616
2011-03-28 17:57 SUSim Note Edited: 0006616
2011-03-29 08:57 JohnDoe Note Added: 0006617
2011-03-29 09:04 JohnDoe Note Edited: 0006617
2011-03-29 09:22 JohnDoe Note Edited: 0006617
2011-03-29 10:10 JohnDoe Note Added: 0006622
2011-03-29 11:45 vskirdin Note Added: 0006624
2011-03-29 13:26 JohnDoe File Added: Release.32.gcc.7z
2011-03-29 13:32 JohnDoe Note Added: 0006626
2011-03-29 13:37 JohnDoe Note Edited: 0006626
2011-03-29 13:55 vskirdin Note Added: 0006627
2011-03-29 14:25 JohnDoe Note Added: 0006628
2011-03-29 15:03 JohnDoe Note Edited: 0006628
2011-03-29 15:18 JohnDoe Note Added: 0006629
2011-03-29 18:31 SUSim Note Added: 0006630
2011-03-29 18:33 SUSim Note Edited: 0006630
2011-03-29 18:34 SUSim Note Edited: 0006630
2011-03-29 19:01 vskirdin Note Added: 0006631
2011-03-29 19:08 SUSim Note Added: 0006632
2011-03-30 06:26 vskirdin Note Added: 0006635
2011-03-30 10:44 JohnDoe Note Added: 0006641
2011-03-30 12:55 vskirdin Note Added: 0006642
2011-03-30 13:33 JohnDoe Note Added: 0006643
2011-03-30 14:50 SUSim Note Added: 0006644
2011-03-30 15:54 SUSim Note Added: 0006645
2011-03-30 15:56 SUSim Note Edited: 0006645
2011-03-31 08:10 JohnDoe Note Added: 0006647
2011-03-31 09:51 vskirdin Note Added: 0006648
2011-03-31 09:51 vskirdin Assigned To => vskirdin
2011-03-31 09:51 vskirdin Status new => feedback
2011-03-31 15:11 JohnDoe Note Added: 0006651
2011-03-31 15:27 SUSim Note Added: 0006653
2011-03-31 15:27 SUSim Status feedback => assigned
2011-04-01 08:52 vskirdin Note Added: 0006654
2011-04-01 08:52 vskirdin Status assigned => feedback
2011-04-01 13:43 JohnDoe Note Added: 0006655
2011-04-01 16:07 vskirdin Note Added: 0006657
2011-04-02 08:57 SUSim Note Added: 0006658
2011-04-02 08:57 SUSim Status feedback => assigned
2011-04-05 05:56 vskirdin Note Added: 0006664
2011-04-05 05:56 vskirdin Status assigned => feedback
2011-04-06 10:01 vskirdin Note Added: 0006717
2011-04-17 16:45 SUSim Note Added: 0006801
2011-04-17 16:45 SUSim Status feedback => assigned
2011-04-17 16:46 SUSim Note Edited: 0006801
2011-04-17 16:50 SUSim Note Added: 0006802
2011-05-20 06:34 vskirdin Note Added: 0006957
2011-05-20 07:05 vskirdin Note Added: 0006958
2011-05-20 07:05 vskirdin Status assigned => feedback
2011-12-23 09:01 alexy Build => 2037
2011-12-23 09:01 alexy Status feedback => closed
2011-12-23 09:01 alexy Resolution open => fixed
2011-12-23 09:01 alexy Fixed in Version => 3.0
2012-05-10 16:35 SUSim Note Added: 0009131
2012-05-10 16:35 SUSim Status closed => feedback
2012-05-10 16:35 SUSim Resolution fixed => reopened
2012-05-10 16:37 SUSim Note Edited: 0009131
2012-05-10 17:24 vskirdin Note Added: 0009133
2012-05-11 03:13 SUSim Note Added: 0009136
2012-05-11 03:13 SUSim Status feedback => assigned
2012-05-11 06:01 vskirdin Note Added: 0009137
2012-05-11 06:01 vskirdin File Deleted: Release.32.gcc.7z
2012-05-11 07:42 vskirdin Note Added: 0009147
2012-05-11 07:42 vskirdin Status assigned => feedback
2012-05-11 15:28 SUSim Note Added: 0009162
2012-05-11 15:28 SUSim Status feedback => assigned
2012-05-13 14:33 SUSim Note Added: 0009178
2012-05-13 14:43 vskirdin Build 2037 => 2670
2012-05-13 14:43 vskirdin Status assigned => closed
2012-05-13 14:43 vskirdin Resolution reopened => fixed