View Issue Details

IDProjectCategoryView StatusLast Update
0002310WishesMacropublic2021-06-26 16:12
ReporterJohnDoe Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Product Version3.0 
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 16:34

updater   bugnote:0010356

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

SUSim

2013-02-23 10:21

reporter   bugnote:0010382

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

JohnDoe

2013-02-23 10:26

updater   bugnote:0010383

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

SUSim

2013-02-23 11:23

reporter   bugnote:0010384

Last edited: 2013-02-23 11:24

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

JohnDoe

2013-02-23 11:34

updater   bugnote:0010385

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

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

JohnDoe

2013-02-27 00:03

updater   bugnote:0010392

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

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

JohnDoe

2013-03-22 11:00

updater   bugnote:0010598

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

JohnDoe

2014-01-23 08:46

updater   bugnote:0011737

Last edited: 2014-01-23 08:53

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

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

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

JohnDoe

2017-10-23 13:24

updater   bugnote:0015739

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

JohnDoe

2021-06-26 16:12

updater   bugnote:0017096

Новый взгляд.
(1)
Внутри utils.lua "разбор" не хранится (там только match), а создавать его для каждого макроса "на всякий случай" отчасти расточительство.

К тому же с момента создания тикета у макросов появилась возможность обращаться к собственным полям.
Поэтому предлагаю передавать макросу не разбор, а исходные данные: key: lctrllshiftspace
https://github.com/FarGroup/FarManager/blob/2969451303b0d8743878e1a7db388d71e7569d73/plugins/luamacro/utils.lua#L999

(2)
Как именно передавать этот и подобные аргументы обсуждается тут https://forum.farmanager.com/viewtopic.php?f=15&t=11950&p=157671#p157671

Issue History

Date Modified Username Field Change
2013-02-20 16:32 JohnDoe New Issue
2013-02-20 16:34 JohnDoe Note Added: 0010356
2013-02-23 10:21 SUSim Note Added: 0010382
2013-02-23 10:26 JohnDoe Note Added: 0010383
2013-02-23 11:23 SUSim Note Added: 0010384
2013-02-23 11:24 SUSim Note Edited: 0010384
2013-02-23 11:24 SUSim Note Edited: 0010384
2013-02-23 11:34 JohnDoe Note Added: 0010385
2013-02-27 00:03 JohnDoe Note Added: 0010392
2013-03-22 11:00 JohnDoe Note Added: 0010598
2014-01-23 08:46 JohnDoe Note Added: 0011737
2014-01-23 08:53 JohnDoe Note Edited: 0011737
2017-10-23 13:24 JohnDoe Note Added: 0015739
2021-06-26 16:12 JohnDoe Note Added: 0017096