Allow any character(s) as a key in key binding.

Summary:
The key (the part before modifiers) is interpreted by QKeySequence.
For special keys (everything except printable characters), it uses names
from `Qt::Key` without `Key_` prefix. For character keys, it uses the
character itself, and it is not possible to use e.g. `Comma`. For this
reason limited set of characters limits possible key bindings.

BUG: 385380
FIXED-IN: 18.08

Test Plan:
* In profile's key bindings settings (or your keysym file) create entry:
```
key ,-Shift+Ctrl-Alt+Ansi : "Hello from keysym"
```
* Change `-Alt` to `+Alt` if you have a conflict. Do not change shift
  (the shortcut would trigger on `<` instead of `,`). You can also use
   e.g. ``;'[]=` instead of `,`. AltGr+letter works too, so `ą`, `á`, etc.
   can be used.
* Save and close settings
* Press `Ctrl+,`

Expected result: "Hello from keysym" is typed

Actual result:
* the key binding does not work
* empty rows appear in key bindings table

Reviewers: #konsole, hindenburg

Reviewed By: #konsole, hindenburg

Subscribers: hindenburg, konsole-devel, #konsole

Tags: #konsole

Differential Revision: https://phabricator.kde.org/D13081
wilder-portage
Mariusz Glebocki 8 years ago committed by Kurt Hindenburg
parent d547d1d177
commit 47199ba564
  1. 2
      src/KeyboardTranslator.cpp

@ -391,7 +391,7 @@ QList<KeyboardTranslatorReader::Token> KeyboardTranslatorReader::tokenize(const
QRegularExpression::OptimizeOnFirstUsageOption);
// key line: key KeySequence : "output"
// key line: key KeySequence : command
static const QRegularExpression key(QStringLiteral("key\\s+([\\w\\+\\s\\-\\*\\.]+)\\s*:\\s*(\"(.*)\"|\\w+)"),
static const QRegularExpression key(QStringLiteral("key\\s+(.+?)\\s*:\\s*(\"(.*)\"|\\w+)"),
QRegularExpression::OptimizeOnFirstUsageOption);
QList<Token> list;

Loading…
Cancel
Save