View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001736 | Far Manager | Macro | public | 2011-03-27 18:29 | 2012-05-13 15:43 |
Reporter | SUSim | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001736: 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 Information | Windows 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)" | ||||
Tags | No tags attached. | ||||
Build | 2670 | ||||
|
Замечание вроде бы резонное. Но вначале хотелось бы вспомнить историю появления второго параметра akey. Я что-то на форуме не нахожу... |
|
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 - возвращает клавишу, на которую назначен макрос. |
|
Ага. Очевидно в Писание нужно добавить эти подробности. SUSim Как вы видите, akey(1,0) задумывался для других целей, и свои задачи выполняет. Возможно стоит добавить akey(...,2), но хотелось бы сначала увидеть примеры применения. |
|
Я не понимаю, или Вы не понимаете: клавиша вызвавшая макрос НЕ ВСЕГДА равна клавише на которую повешен макрос! JohnDoe, akey(1,0) НЕ ВЫПОЛНЯЕТ своих обязанностей при использовании eval - он не возвращает реально нажатую клавишу! akey(1,0) должна всегда возвращать нажатую клавишу, а не клавишу на которую повешен макрос(думаете почему я откатился с 1807 на 1803{там все работает как надо})! или я чего не понимаю? |
|
vskirdin, меня волнует именно второй параметр akey(?,ЭТО) ЭТО=0 - раньше всегда возвращало клавишу которую я нажал = которая вызвала макрос-связку,ЭТО=1 клавишу на которую повешен макрос вызванный макропоследовательностью, а теперь ЭТО всегда возвращает клавишу на которую назначен последний макрос. Пример Вам не подходит? из первого поста? |
|
Всё я выдохся, разяснять чего я хочу :( (что раньше работало) Говорю конкретно: как мне узнать какой клавишей вызвали макрос, а не на какую клавишу он повешен? (раньше это выяснялось по akey(1) а теперь нет...) |
|
>akey(1,0) НЕ ВЫПОЛНЯЕТ своих обязанностей при использовании eval - он не возвращает реально нажатую клавишу! А вы внимательнее почитайте историю его создания, "реально_нажатая_клавиша" это не совсем то что вы думаете. И появилось оно ещё в 1345, тогда как eval расширили позже - в 1528. >Всё я выдохся, разяснять чего я хочу :( (что раньше работало) Раз оно раньше работало, то с этого и надо было начать. У меня в 1807 тоже кое-что в макросах не так работает (вроде бы $AKey, всё никак не найду время разобраться) |
|
P.S. Судя по changelog'у всё "поломалось" из-за 0001677 (всё ещё ожидает фидбэка). |
|
Тестим. 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; } |
|
Вроде как толку от этого фикса нет, но пусть ещё SUSim проверит. Приаттачил бинарник. |
|
в смысле нету? поподробнее с этого места. |
|
Виноват, перепроверил. Проблема из описания тикета ушла: akey(1,0) теперь != akey(1,1) |
|
Вопрос: при запуске eval("й",2) должен ли запускаться макрос, назначеный на "q"? |
|
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) я считаю запускать макрос надо ТОЛЬКО по конкретному имени, и имя это не должно быть клавишей, но быть однозначным! |
|
вот это вообще про чё? SUSim, трабла, описанная в этом Инце ушла или нет? Если ушла, то смысл дальше слюнявить? Если нет, не слюни убираем и описываем конкретные "непонятки". |
|
Какие слюни? как проверить ушла она или нет? скажи конкретно где бинарник? (Сам я бинарник собрать не могу) |
|
Читай внимательно. специально для тебя: 2011-03-29 15:26 JohnDoe Файл добавлен: Release.32.gcc.7z |
|
>по поводу eval("й",2) я считаю запускать макрос надо ТОЛЬКО по конкретному имени, и имя это не должно быть клавишей, но быть однозначным! Предлагаю обсудить это на форуме: http://forum.farmanager.com/viewtopic.php?p=79725#p79725 |
|
ну в это тикете однозначно про eval не должно быть речи |
|
>ну в это тикете однозначно про eval не должно быть речи Не так уж однозначно. Если принять что eval("й",2) должен быть равнозначен eval("Q",2), то нужен способ определить как же макрос на самом деле вызван. Возможно нужен akey(...,2). |
|
ПОРЯДОК, так все работает! теперь у меня опять 1807 а не 1803 |
|
только $Akey и Akey в макролиб отвалились!!! хотя они ив 1803 не работали, так что я привык... |
|
>только $Akey и Akey в макролиб отвалились Вероятно, придётся завести akey(...,2)? |
|
build 1938 |
|
Не рано ли закоммитили? Ведь SUSim пишет что теперь макролиб не работает. |
|
Я думаю прежде всего сам ФАР, с макролиб в ФАР-3 придется разбираться я думаю отдельно, тем более должно многое поменяться... |
|
Закоммитил в самый раз. Со своим макролибом сами разбирайтесь - я его не писал и какие хаки там применены не знаю. Без него, без плагина, траблы нет? Тогда на нет и суда нет. Мы здесь про ФАР говорим, а не про плагин. Если есть без него - давайте уточнение. |
|
>Со своим макролибом сами разбирайтесь Справедливо. Вот только стоит учесть, что "трабла" произошла именно ради макролиба, и если теперь всё просто вернуть назад, то получится топтание на месте. |
|
IMHO пусть макролиб подстраивается под ФАР, а не наоброт, ибо завтра появится макролибEx... и чё? Проблема в этом тиките решена? |
|
Проблема этого тикета решена, но я гляжу пром Mantis#0001677 не забыли... Дополнительная инфа: там все работает до вызова обычного макроса, потом все время возвращает клавишу последнего обычного макроса... |
|
если здесь решено - ставь решено, а про "там" - вот там и надо обсуждать. |
|
build 1946 |
|
Макрос на 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 тоже не работало... |
|
До кучи - MsWheelDown и т.п. неправильно отдается в Akey() Макрос на MsWheelDown: msgbox(Akey(0),MsWheelDown) ╔═ 196609 ═╗ ║ 131076 ║ |
|
с шифтом разобрался... ...а вот с Wheel - бяда... |
|
build 2037 |
|
Напомню... Остались недоделанными мышиные кнопки (клавиатурные возвращаются правильно, спасибо!)... ЗЫ подумалось - а как будет если макрос повешен на мышку, а вызвали его по eval(*,2) клавиатурой, и наоборот... А если макрос имеет произвольное имя, а не кнопкосочетание... Поэксперементирую, подумаю... |
|
> Остались недоделанными мышиные кнопки свежие примеры давай... ибо msgbox(Akey(0),MsWheelDown) у меня 131076 x 131076 |
|
Речь про 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> |
|
тест: http://skirda-file.googlecode.com/files/m1736.1.7z |
|
build 2670 |
|
Ок!, жду официальной сборки и тему про неудобства на форуме поправлю! |
|
Всё ок, закрывайте! |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-03-27 18:29 | SUSim | New Issue | |
2011-03-28 11:20 | JohnDoe | Note Added: 0006591 | |
2011-03-28 12:02 | vskirdin | Note Added: 0006594 | |
2011-03-28 13:00 | JohnDoe | Note Added: 0006599 | |
2011-03-28 18:22 | SUSim | Note Added: 0006614 | |
2011-03-28 18:23 | SUSim | Note Edited: 0006614 | |
2011-03-28 18:27 | SUSim | Note Edited: 0006614 | |
2011-03-28 18:30 | SUSim | Note Edited: 0006614 | |
2011-03-28 18:37 | SUSim | Note Added: 0006615 | |
2011-03-28 18:38 | SUSim | Note Edited: 0006615 | |
2011-03-28 18:47 | SUSim | Note Edited: 0006615 | |
2011-03-28 18:47 | SUSim | Note Edited: 0006614 | |
2011-03-28 18:52 | SUSim | Note Edited: 0006615 | |
2011-03-28 18:56 | SUSim | Note Added: 0006616 | |
2011-03-28 18:57 | SUSim | Note Edited: 0006616 | |
2011-03-29 09:57 | JohnDoe | Note Added: 0006617 | |
2011-03-29 10:04 | JohnDoe | Note Edited: 0006617 | |
2011-03-29 10:22 | JohnDoe | Note Edited: 0006617 | |
2011-03-29 11:10 | JohnDoe | Note Added: 0006622 | |
2011-03-29 12:45 | vskirdin | Note Added: 0006624 | |
2011-03-29 14:26 | JohnDoe | File Added: Release.32.gcc.7z | |
2011-03-29 14:32 | JohnDoe | Note Added: 0006626 | |
2011-03-29 14:37 | JohnDoe | Note Edited: 0006626 | |
2011-03-29 14:55 | vskirdin | Note Added: 0006627 | |
2011-03-29 15:25 | JohnDoe | Note Added: 0006628 | |
2011-03-29 16:03 | JohnDoe | Note Edited: 0006628 | |
2011-03-29 16:18 | JohnDoe | Note Added: 0006629 | |
2011-03-29 19:31 | SUSim | Note Added: 0006630 | |
2011-03-29 19:33 | SUSim | Note Edited: 0006630 | |
2011-03-29 19:34 | SUSim | Note Edited: 0006630 | |
2011-03-29 20:01 | vskirdin | Note Added: 0006631 | |
2011-03-29 20:08 | SUSim | Note Added: 0006632 | |
2011-03-30 07:26 | vskirdin | Note Added: 0006635 | |
2011-03-30 11:44 | JohnDoe | Note Added: 0006641 | |
2011-03-30 13:55 | vskirdin | Note Added: 0006642 | |
2011-03-30 14:33 | JohnDoe | Note Added: 0006643 | |
2011-03-30 15:50 | SUSim | Note Added: 0006644 | |
2011-03-30 16:54 | SUSim | Note Added: 0006645 | |
2011-03-30 16:56 | SUSim | Note Edited: 0006645 | |
2011-03-31 09:10 | JohnDoe | Note Added: 0006647 | |
2011-03-31 10:51 | vskirdin | Note Added: 0006648 | |
2011-03-31 10:51 | vskirdin | Assigned To | => vskirdin |
2011-03-31 10:51 | vskirdin | Status | new => feedback |
2011-03-31 16:11 | JohnDoe | Note Added: 0006651 | |
2011-03-31 16:27 | SUSim | Note Added: 0006653 | |
2011-03-31 16:27 | SUSim | Status | feedback => assigned |
2011-04-01 09:52 | vskirdin | Note Added: 0006654 | |
2011-04-01 09:52 | vskirdin | Status | assigned => feedback |
2011-04-01 14:43 | JohnDoe | Note Added: 0006655 | |
2011-04-01 17:07 | vskirdin | Note Added: 0006657 | |
2011-04-02 09:57 | SUSim | Note Added: 0006658 | |
2011-04-02 09:57 | SUSim | Status | feedback => assigned |
2011-04-05 06:56 | vskirdin | Note Added: 0006664 | |
2011-04-05 06:56 | vskirdin | Status | assigned => feedback |
2011-04-06 11:01 | vskirdin | Note Added: 0006717 | |
2011-04-17 17:45 | SUSim | Note Added: 0006801 | |
2011-04-17 17:45 | SUSim | Status | feedback => assigned |
2011-04-17 17:46 | SUSim | Note Edited: 0006801 | |
2011-04-17 17:50 | SUSim | Note Added: 0006802 | |
2011-05-20 07:34 | vskirdin | Note Added: 0006957 | |
2011-05-20 08:05 | vskirdin | Note Added: 0006958 | |
2011-05-20 08: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 17:35 | SUSim | Note Added: 0009131 | |
2012-05-10 17:35 | SUSim | Status | closed => feedback |
2012-05-10 17:35 | SUSim | Resolution | fixed => reopened |
2012-05-10 17:37 | SUSim | Note Edited: 0009131 | |
2012-05-10 18:24 | vskirdin | Note Added: 0009133 | |
2012-05-11 04:13 | SUSim | Note Added: 0009136 | |
2012-05-11 04:13 | SUSim | Status | feedback => assigned |
2012-05-11 07:01 | vskirdin | Note Added: 0009137 | |
2012-05-11 07:01 | vskirdin | File Deleted: Release.32.gcc.7z | |
2012-05-11 08:42 | vskirdin | Note Added: 0009147 | |
2012-05-11 08:42 | vskirdin | Status | assigned => feedback |
2012-05-11 16:28 | SUSim | Note Added: 0009162 | |
2012-05-11 16:28 | SUSim | Status | feedback => assigned |
2012-05-13 15:33 | SUSim | Note Added: 0009178 | |
2012-05-13 15:43 | vskirdin | Build | 2037 => 2670 |
2012-05-13 15:43 | vskirdin | Status | assigned => closed |
2012-05-13 15:43 | vskirdin | Resolution | reopened => fixed |