View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002309 | Far Manager | Macro | public | 2013-02-20 14:54 | 2015-01-14 10:41 |
Reporter | JohnDoe | Assigned To | shmuel | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0002309: В Far 3 поломалась функция akey(1,1) | ||||
Description | akey(1,1) должна вернуть имя клавиши, на которую реально назначен макрос. Это нужно для случая, когда макрос вызывается из другого макроса. В Far 2 1807 работает как и заявлено. В Far 3 3212 не работает, т.е. возвращает то же, что и akey(1,0) | ||||
Steps To Reproduce | Macro {area="Common"; key="F2"; action=function() mf.eval("F1",2) end;} Macro {area="Common"; key="F1"; action=function() msgbox(akey(1,0),akey(1,1) end;} При вызове макроса, назначенного на F2 ожидается akey(1,0)=="F1". akey(1,1)=="F2". В реальности оба вызова вернут "F2" | ||||
Additional Information | V=akey(Mode[,Type]) Возвращает название или код клавиши, вызвавшей макропоследовательность. Mode = 0 - возвращается код клавиши, Mode = 1 - возвращается наименование клавиши. Type = 0 - возвращает реально нажатое сочетание, которым вызывался макрос, Type = 1 - возвращает клавишу, на которую назначен макрос. | ||||
Tags | No tags attached. | ||||
Build | LMb472 | ||||
|
Хотелось бы увидеть пример полезности и необходимости данной фичи. Ибо затрачивать время "просто чтобы работало" не хочется. |
|
Есть макрос, key="Up Down", в action в зависимости от key выполняет разные действия. Есть другой макрос (назначенный совсем на другую клавишу), и в нём есть вызов eval("Up",2). В результате вызываемые макрос получает akey вызывающего макроса, и соответственно не может выполнить нужное действие. |
|
Но вообще в современных условиях я считаю что akey() это неправильное средство. У нас Lua, и макросы это функции, поэтому клавишу лучше передавать параметром. Это прямее, и понятнее. Предлагаю подкрутить Eval. |
|
> У нас Lua, и макросы это функции, поэтому клавишу лучше передавать параметром. > Это прямее, и понятнее. > Предлагаю подкрутить Eval. Мне кажется, что eval(str,2) - это просто пережиток прошлого, когда не было функций и таблиц. Культивировать это сейчас, и тем более расширять, зачем? Можно, например, в макрофайлах создавать псевдо-модули (глобальные таблицы с функциями) и вызывать эти функции откуда угодгно. eval(str,2) вообще не нужен. -- file 1.lua _G.JohnDoe = _G.JohnDoe or {} function JohnDoe.Foo (param1, param2, ......) ...... return ret1, ret2, ...... end function JohnDoe.Bar (param1, param2, ......) ...... return ret1, ret2, ...... end Таких файлов, таблиц, функций можно создать сколько угодно. Вызов функций из любых макросов в любом файле будет работать, с любым количеством параметров и возвратов любого типа. Это сильно отличается от убогого вызова eval(str,2), не так ли? Так зачем продолжать ковыряться с eval ? |
|
@shmuel Если не собираешься делать как в far2, просто оставь у akey() только один параметр и задокументируй это, чтобы не возникало лишних вопросов. |
|
Этот вопрос всего лишь один из многих. Может быть так и сделаем, как ты говоришь. |
|
Тикет можно полностью решить, передавая в action параметр - имя клавиши, как сейчас делается для condition. То же самое предложено в другом (несвязанном) тикете: 0002310:0011737 Update: Связанный тикет: 0002580 |
|
После LuaMacro build 465 проблема видоизменилась: в результате и akey(1,0) и akey(1,1) возвращают "F1" (клавишу, на которую назначен макрос). Т.е. сейчас невозможно получить клавишу, вызвавшую изначальный макрос. Скорее всего это сейчас и не нужно. Но!!! Присутствует баг, если клавиша задана регэкспом: Macro {area="Common"; key="F2"; action=function() mf.eval("F1",2) end;} Macro {area="Common"; key="/.1/"; action=function() far.Show(akey(1,0),akey(1,1)) end;} При нажатии F2 видно, что akey(1,0) возвращает смайл ☺, а akey(1,1) ничего. P.S. >Присутствует баг, если клавиша задана регэкспом: Аналогично в случаях если макрос назначен более чем на 1 клавишу, или если клавиша с таким имененем не существует. |
|
Ещё один баг: если нажать F2 два раза (второй раз получается в меню), то это приводит к ошибке: Step: called on macro in dead status Причём при закрытии сообщения оно сразу появляется вновь, пока не прибьёшь фар. |
|
build 467 - осталась только одна проблема, при вызове "ненастоящей" клавиши. На примере вышеприведённого макроса: mf.eval("A1",2) |
|
build 470 - проблем с akey(1,1) больше нет, тикет решён. akey(1,0) сейчас равнозначно akey(1,1), но практических проблем я из этого пока не вижу. |
|
build 472 - есть небольшая проблема с akey(1,0): Macro {area="Common"; key="abc"; action=function() far.Show(akey(1,0),akey(1,1) end;} lua:eval("abc",2) В результате akey(1,0) не работает. |
|
> В результате akey(1,0) не работает. Из справки: "Type = 0 - возвращает реально нажатое сочетание, которым вызывался макрос". Реально нажатого сочетания здесь нет, возвращается пустая строка. Что не так? |
|
Вы правы, действительно всё работает согласно Энциклопедии. |
Date Modified | Username | Field | Change |
---|---|---|---|
2013-02-20 14:54 | JohnDoe | New Issue | |
2013-02-20 21:41 | shmuel | Summary | В Far 3 поломалась функция akey(1,0) => В Far 3 поломалась функция akey(1,1) |
2013-02-21 07:52 | shmuel | Note Added: 0010359 | |
2013-02-21 08:18 | JohnDoe | Note Added: 0010360 | |
2013-02-21 08:35 | JohnDoe | Note Added: 0010361 | |
2013-02-21 09:49 | shmuel | Note Added: 0010362 | |
2013-07-02 20:34 | 2useven10 | Note Added: 0011241 | |
2013-07-02 21:05 | shmuel | Note Added: 0011242 | |
2014-01-23 08:52 | JohnDoe | Note Added: 0011738 | |
2014-01-27 15:32 | JohnDoe | Note Edited: 0011738 | |
2014-01-27 15:33 | JohnDoe | Note Edited: 0011738 | |
2015-01-05 09:17 | JohnDoe | Note Added: 0013386 | |
2015-01-05 09:18 | JohnDoe | Note Edited: 0013386 | |
2015-01-05 09:19 | JohnDoe | Note Edited: 0013386 | |
2015-01-05 09:31 | JohnDoe | Note Edited: 0013386 | |
2015-01-05 09:33 | JohnDoe | Note Added: 0013388 | |
2015-01-07 11:11 | JohnDoe | Note Added: 0013390 | |
2015-01-13 07:27 | JohnDoe | Note Added: 0013400 | |
2015-01-14 07:35 | JohnDoe | Note Added: 0013402 | |
2015-01-14 07:36 | JohnDoe | Note Edited: 0013402 | |
2015-01-14 08:24 | shmuel | Note Added: 0013404 | |
2015-01-14 08:31 | JohnDoe | Note Added: 0013405 | |
2015-01-14 10:41 | shmuel | Build | => LMb472 |
2015-01-14 10:41 | shmuel | Status | new => closed |
2015-01-14 10:41 | shmuel | Assigned To | => shmuel |
2015-01-14 10:41 | shmuel | Resolution | open => fixed |
2015-01-14 10:41 | shmuel | Fixed in Version | => 3.0 |