View Issue Details

IDProjectCategoryView StatusLast Update
0002310WishesMacropublic2017-10-23 15:24
ReporterJohnDoeAssigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Product Version3.0 
Target VersionFixed in Version 
Summary0002310: Передавать макросу полный разбор регэкспа - клавиши
DescriptionНередко возникает потребность в разборе клавиатурной комбинации на составляющие.

Название клавиши, служащей для вызова макроса, задано регулярным выражение, например key="/(R?Ctrl)?(R?Alt)(.+)/";

Но чтобы проанализировать комбинацию внутри action - необходимо применить этот же регэксп повторно.

Чтобы избежать дублирования, предлагаю передавать функции action результат применения регэкспа, в виде таблицы.
Additional Informationhttp://forum.farmanager.com/viewtopic.php?p=103918#p103918
TagsNo tags attached.
Build

Activities

JohnDoe

2013-02-20 20:34

updater   bugnote:0010356

Актуально также для condition

SUSim

2013-02-23 14:21

reporter   bugnote:0010382

Пример таблицы?

JohnDoe

2013-02-23 14:26

updater   bugnote:0010383

{"RCtrl","Alt","Del"}

SUSim

2013-02-23 15:23

reporter   bugnote:0010384

Last edited: 2013-02-23 15:24

View 3 revisions

Спорно - её разбор будет не намного проще разбора имени клавиши...
вот если таблица будет:
{LCtrl,RCtrl,LAlt,RAlt,Shift,Key} где все поля, кроме последнего логические то это упростит работу! ещё бы туда Win...
а если уж совсем ленится в макросе, то лучше всего:
{Win,LWin,RWin,Ctrl,LCtrl,RCtrl,Alt,LAlt,RAlt,Shift,Key}

JohnDoe

2013-02-23 15:34

updater   bugnote:0010385

Речь не о разборе кнопкосочетания на _все_ отдельные составляющие.
А всего лишь о разборе регэкспа, чтобы не разбирать его второй раз.
Упрощения тут нет, просто убирается повторный разбор.

Ваше пожелание конечно тоже имеет право на существование.

JohnDoe

2013-02-27 04:03

updater   bugnote:0010392

Упомяну ещё 2 момента
1. Регэкспы lua отличаются от фаровских, поэтому приходится или адаптировать регэксп (что хоть и несложно, но может потенциально внести ошибку), или использовать фаровские функции regex.*
2. Даже используя regex.* всё равно регэксп надо менять, потому что в akey(1) приходит немного не то: левосторонние модификаторы приходят без L.

И эти отличия приводят к мелким, но досадным ошибкам.

JohnDoe

2013-03-22 15:00

updater   bugnote:0010598

Ещё один пример потенциального использования http://forum.farmanager.com/viewtopic.php?p=106256#p106256

JohnDoe

2014-01-23 12:46

updater   bugnote:0011737

Last edited: 2014-01-23 12:53

View 2 revisions

Сейчас для функции condition первым параметром передаётся имя нажатой клавиши (akey)

Предлагаю:
1) передавать и action и condition одинаковые параметры
2) в случае если клавиша задана регекспом - передавать таблицу с разбором клавиши
3) в таблице каждый индекс соответствует значению, возвращаемому regex.match, а нулевой индекс - полное имя клавиши.

P.S.
Если это предложение будет принято, то автоматически решится и другой тикет: 0002309

JohnDoe

2017-10-23 15:24

updater   bugnote:0015739

Альтернативно.
Макрос мог бы получать таблицу, используя функцию mf.akey. Впрочем, для condition это проблематично..

Issue History

Date Modified Username Field Change
2013-02-20 20:32 JohnDoe New Issue
2013-02-20 20:34 JohnDoe Note Added: 0010356
2013-02-23 14:21 SUSim Note Added: 0010382
2013-02-23 14:26 JohnDoe Note Added: 0010383
2013-02-23 15:23 SUSim Note Added: 0010384
2013-02-23 15:24 SUSim Note Edited: 0010384 View Revisions
2013-02-23 15:24 SUSim Note Edited: 0010384 View Revisions
2013-02-23 15:34 JohnDoe Note Added: 0010385
2013-02-27 04:03 JohnDoe Note Added: 0010392
2013-03-22 15:00 JohnDoe Note Added: 0010598
2014-01-23 12:46 JohnDoe Note Added: 0011737
2014-01-23 12:53 JohnDoe Note Edited: 0011737 View Revisions
2017-10-23 15:24 JohnDoe Note Added: 0015739