View Issue Details

IDProjectCategoryView StatusLast Update
0002899WishesMacropublic2024-05-07 20:03
ReporterJohnDoe Assigned To 
PrioritynormalSeverityminorReproducibilityN/A
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0002899: eval(S,2) и макросы, содержащие слэш в имени клавиши
DescriptionЕсть потребность запускать макросы, назначенные на имена с "ненастоящими" клавишами, в частности это используется скриптом MacroEx.
При этом возможны случаи, когда в середине оказывается "/", пример из практики: "Ctrl/:Double" (http://forum.farmanager.com/viewtopic.php?p=126709#p126709)

Проблема в том, что слеш тут воспринимается как разделитель "область/клавиша", соответственно вызов eval("Ctrl/:Double",2) сработать не может.
Additional InformationПредлагаю учесть подобные случаи:

Если часть строки перед слешам не распознана как название области, то считать всю строку нахванием клавиши (пример кода здесь: http://forum.farmanager.com/viewtopic.php?p=126711#p126711)
TagsNo tags attached.
Build6331

Activities

JohnDoe

2024-05-01 15:05

updater   bugnote:0017544

Last edited: 2024-05-01 15:15

Альтернативно:
- При необходимости выполнить макрос, который может содержать слэш, всегда указывать и макрообласть.
  При этом умолчательное значение (текущая+common) может быть представлено например пустой строкой.
  Таким образом получится нечто вроде этого:

mf.eval("/Ctrl/:Double",2) -- "" для current+common

JohnDoe

2024-05-01 15:12

updater   bugnote:0017545

Last edited: 2024-05-01 15:15

Вообще в условиях Lua считаю пережитком впихивание макрообласти вместе с самой клавиатурной комбинацией в одну строку.
Удобнее указывать отдельным аргументом. В данном случае (Mode=2) последний аргумент не задействован, соответственно можно было бы использовать его.
Тогда получилось бы например так:
mf.eval("Ctrl/:Double",2,"") -- "" для current+common

JohnDoe

2024-05-01 15:31

updater   bugnote:0017546

Можно пойти ещё дальше.
В настоящий момент функция eval жутко перегружена: https://farmanagerlegacy.github.io/macro-api/general.html#:~:text=%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BB%D0%B8%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C%20%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C

В основном в целях обратной совместимости с эпохой "до Lua".
Реально почти все её задачи могут быть выполнены стандартными средствами Lua.
(С моей точки зрения "могут" практически равно "должны", но это отдельный вопрос, ломать я ничего не предлагаю)

Единственная специфичная задача, которая важна, и не никак может быть заменена ничем другим, это выполнение макросов.
Так вот: чтобы не нагружать какими-то усовершенствованиями и без того перегруженный eval, возможно стоит завести совсем отдельную фунцию, служащую именно (и только) для выполнения макросов.

JohnDoe

2024-05-07 20:03

updater   bugnote:0017556

https://github.com/shmuz/far2m/issues/64

Issue History

Date Modified Username Field Change
2015-01-09 11:08 JohnDoe New Issue
2024-05-01 14:59 JohnDoe Additional Information Updated
2024-05-01 15:05 JohnDoe Note Added: 0017544
2024-05-01 15:12 JohnDoe Note Added: 0017545
2024-05-01 15:12 JohnDoe Note Edited: 0017545
2024-05-01 15:13 JohnDoe Note Edited: 0017545
2024-05-01 15:15 JohnDoe Note Edited: 0017545
2024-05-01 15:15 JohnDoe Note Edited: 0017544
2024-05-01 15:31 JohnDoe Note Added: 0017546
2024-05-07 20:03 JohnDoe Status new => closed
2024-05-07 20:03 JohnDoe Resolution open => fixed
2024-05-07 20:03 JohnDoe Fixed in Version => 3.0
2024-05-07 20:03 JohnDoe Build => 6331
2024-05-07 20:03 JohnDoe Note Added: 0017556