View Issue Details

IDProjectCategoryView StatusLast Update
0002290Far ManagerMacropublic2013-03-06 06:11
ReporterJohnDoe Assigned Toshmuel  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0002290: Функция akey() не работает в condition
DescriptionФункция востребована при проверке условия запуска.
http://forum.farmanager.com/viewtopic.php?p=102845#p102845
TagsNo tags attached.
Build3203.5

Activities

shmuel

2013-02-16 21:07

developer   bugnote:0010305

shmuel 16.02.2013 23:01:07 +0200 - build

1. Макросы: функция condition() вызывается с одним аргументом-строкой: имя ключа.
   * Это не касается макросов, вызываемых во время 'RunAfterFARStart'.
   * Это не касается событий.
   * Это сделано потому, что akey() не работает, будучи вызвана из condition().

JohnDoe

2013-02-20 13:19

updater   bugnote:0010331

Last edited: 2013-02-20 13:25

Работает.
Но обнаружилось несоответствие функции akey(1,1), при вызове макроса через eval(S,2)

Пример:

Macro {area="Common"; key="F2"; action=function() mf.eval("F1",2) end;}

Macro {
  area="Common"; key="F1";
  condition=function(akey) msgbox(akey); return true end;
  action=function() msgbox(akey(1,1)) end;
}

В результате при нажатии F2 мы получим разные значения в condition поступит "F1", а в action "F2".

Похоже на баг в функции mf.akey()

JohnDoe

2013-02-20 13:27

updater   bugnote:0010332

Last edited: 2013-02-20 13:28

Ещё веселее, если запускать из панелей через
lm:post mf.eval("F1",2)
В этом случае akey вернёт ☺
(это смайлик, символ с десятичным кодом 11)

JohnDoe

2013-02-20 13:38

updater   bugnote:0010333

Проверил в Far 2 - там всё нормально.
Однозначно это баг функции akey, внесённый в тройке

Полагаю, это выходит за рамки тикета, создам отдельный.

JohnDoe

2013-02-20 13:42

updater   bugnote:0010334

По данному тикету тоже есть вопрос для обсуждения:
В функцию передаётся название клавиши, на которую назначен макрос.
Но если пользоваться eval, то бывает нужно знать и реальную, изначально нажатую клавишу.

Для этого в action служит (временно поломанный) akey(1,1).

shmuel

2013-02-20 13:59

developer   bugnote:0010336

Давайте не отходить от исходно заявленной темы.
В condition() всегда приходит аргументом реально нажатая клавиша.
На мой взгляд, данный тикет разрешён, все прочие вопросы должны обсуждаться не здесь.

JohnDoe

2013-02-20 14:06

updater   bugnote:0010337

Формально тикет не решён: akey всё так же не работает в condition
Реализована замена для akey(1,0)
А akey(1,1) заменить пока нечем.

Возможно стоит передавать в condition параметр-таблицу с двумя полями

shmuel

2013-02-20 14:13

developer   bugnote:0010338

А что значит сейчас "клавиша, на которую назначен макрос"? Это может быть и несколько клавиш, и регулярное выражение.

И вообще я не собираюсь слепо копировать функциональность макроязыка.

JohnDoe

2013-02-20 14:17

updater   bugnote:0010339

Last edited: 2013-02-20 14:41

Это клавиша, на которую определён макрос.
Но не список и не регэксп, а одна реально сработавшая клавиша.

Как правило akey(1,1)=akey(1,0)
Кроме случая когда макрос вызван из другого макроса, с помощью eval(Key,2)

shmuel

2013-02-20 14:29

developer   bugnote:0010340

> Реализована замена для akey(1,1)
Неверно.

И вообще, никакая "замена" не реализовывалась. Реализована передача имени реально нажатой клавиши в функцию condition, так как она бывает там востребована.

JohnDoe

2013-02-20 14:35

updater   bugnote:0010341

Last edited: 2013-02-20 14:40

Я понимаю, что это не было вашей целью, однако это не меняет факта.
Передаваемое имя в точности соответствует поведению akey(1,0), если akey починить.

shmuel

2013-02-20 14:41

developer   bugnote:0010342

John Doe:
> Передаваемое имя в точности соответствует поведению akey(1,1),
> если akey починить.

Из Энциклопедии:
> Type = 0 - возвращает реально нажатое сочетание, которым вызывался макрос,
> Type = 1 - возвращает клавишу, на которую назначен макрос.

Функция condition получает аргументом реально нажатое сочетание, то-есть соответствует akey(1,0).

JohnDoe

2013-02-20 14:42

updater   bugnote:0010343

100%, исправил своё сообщение.

shmuel

2013-02-20 14:47

developer   bugnote:0010344

Не очень логично исправлять сообщения после того, как они уже процитированы.

JohnDoe

2013-02-20 14:49

updater   bugnote:0010345

Я исправил не для того, чтобы показать какой я молодец, а для того, чтобы прояснить сказанное, не внося ещё большую путаницу.

shmuel

2013-02-20 14:51

developer   bugnote:0010346

Как раз при этом путаница и вносится. Человек, который это будет читать сверху вниз, не поймёт в чём дело. Написано одно, процитировано другое.

JohnDoe

2013-02-20 15:00

updater   bugnote:0010347

Возможно вы и правы, не буду сейчас спорить.

Проблему с akey(1,1) я заявил в 0002309
После её решения (если такое произойдёт) вернёмся к теме тут.

shmuel

2013-02-20 15:04

developer   bugnote:0010348

Навряд ли я вернусь, с моей точки зрения данный тикет разрешён (по сути, а не по форме).

JohnDoe

2013-02-20 15:37

updater   bugnote:0010352

Last edited: 2013-02-20 15:39

Давайте тогда начнём сначала.
Нужна ли возможность вызвать макрос из макроса?
Макрос, привязанный к клавише, из другого макроса, привязанного на клавишу.

shmuel

2013-02-20 15:39

developer   bugnote:0010353

> Нужна ли возможность вызвать макрос из макроса?

При вызове макроса из макроса не вызывается condition().

JohnDoe

2013-02-20 15:45

updater   bugnote:0010354

Вызывается, см. выше 0002290:0010331

shmuel

2013-02-20 16:10

developer   bugnote:0010355

Сейчас проверил, вызывается, но это оказался баг, внесённый в билде 3078.
Не будет вызываться.

shmuel

2013-03-06 06:11

developer   bugnote:0010463

John Doe, к сведению, изменение в плагине LuaMacro:

shmuel 06.03.2013 08:00:28 +0200 - build 103

1. При вызове eval(str,2) целевой макрос выбирается обычным алгоритмом выбора,
   с учётом флагов, приоритетов и функции condition.

Issue History

Date Modified Username Field Change
2013-02-05 13:51 JohnDoe New Issue
2013-02-16 21:07 shmuel Note Added: 0010305
2013-02-16 21:07 shmuel Assigned To => shmuel
2013-02-16 21:07 shmuel Status new => feedback
2013-02-20 13:19 JohnDoe Note Added: 0010331
2013-02-20 13:19 JohnDoe Status feedback => assigned
2013-02-20 13:25 JohnDoe Note Edited: 0010331
2013-02-20 13:27 JohnDoe Note Added: 0010332
2013-02-20 13:28 JohnDoe Note Edited: 0010332
2013-02-20 13:38 JohnDoe Note Added: 0010333
2013-02-20 13:42 JohnDoe Note Added: 0010334
2013-02-20 13:59 shmuel Note Added: 0010336
2013-02-20 14:06 JohnDoe Note Added: 0010337
2013-02-20 14:13 shmuel Note Added: 0010338
2013-02-20 14:17 JohnDoe Note Added: 0010339
2013-02-20 14:19 JohnDoe Note Edited: 0010339
2013-02-20 14:20 JohnDoe Note Edited: 0010339
2013-02-20 14:29 shmuel Note Added: 0010340
2013-02-20 14:29 shmuel Assigned To shmuel =>
2013-02-20 14:29 shmuel Status assigned => new
2013-02-20 14:35 JohnDoe Note Added: 0010341
2013-02-20 14:40 JohnDoe Note Edited: 0010341
2013-02-20 14:41 JohnDoe Note Edited: 0010339
2013-02-20 14:41 shmuel Note Added: 0010342
2013-02-20 14:42 JohnDoe Note Added: 0010343
2013-02-20 14:47 shmuel Note Added: 0010344
2013-02-20 14:49 JohnDoe Note Added: 0010345
2013-02-20 14:51 shmuel Note Added: 0010346
2013-02-20 15:00 JohnDoe Note Added: 0010347
2013-02-20 15:04 shmuel Note Added: 0010348
2013-02-20 15:37 JohnDoe Note Added: 0010352
2013-02-20 15:39 JohnDoe Note Edited: 0010352
2013-02-20 15:39 shmuel Note Added: 0010353
2013-02-20 15:45 JohnDoe Note Added: 0010354
2013-02-20 16:10 shmuel Note Added: 0010355
2013-02-20 16:16 JohnDoe Status new => resolved
2013-02-20 16:36 shmuel Build => 3203.5
2013-02-20 16:36 shmuel Status resolved => closed
2013-02-20 16:36 shmuel Assigned To => shmuel
2013-02-20 16:36 shmuel Resolution open => fixed
2013-02-20 16:36 shmuel Fixed in Version => 3.0
2013-03-06 06:11 shmuel Note Added: 0010463