====== Keybindings ======
Tastenkürzel verbinden eine Tastenkombination mit einem [[commands|Command]]. Der Benutzer drückt die Tasten, der Host löst den zugehörigen Command aus. Wie bei [[menus|Menüs]] und [[toolbar|Toolbar-Buttons]] kann ein ''when''-Ausdruck die Gültigkeit auf bestimmte Kontexte einschränken.
Zurück zur [[start|Contributions-Übersicht]] oder zur [[..:start|Hauptübersicht]].
===== Manifest-Deklaration =====
"contributes": {
"keybindings": [
{
"command": "assets.list",
"key": "Ctrl+Shift+A",
"mac": "Cmd+Shift+A",
"when": ""
},
{
"command": "assets.save",
"key": "Ctrl+S",
"when": "activeDocument == assets.editor && isDirty"
}
]
}
| **Feld** | **Pflicht** | **Beschreibung** |
| ''command'' | ja | Referenz auf den auszuführenden [[commands|Command]]. |
| ''key'' | ja | Tastenkombination für Windows und Linux (z.B. ''Ctrl+Shift+A''). |
| ''mac'' | nein | Alternative Kombination für macOS. Wenn das Feld fehlt, wird ''key'' auch auf macOS verwendet. |
| ''when'' | nein | Kontextausdruck für bedingte Gültigkeit. Das Tastenkürzel wird nur ausgewertet, wenn der Ausdruck wahr ist. |
===== Tastenkombinationen =====
Tastenkombinationen werden als String angegeben. Die Notation folgt einem einfachen Schema:
| **Modifier** | **Windows/Linux** | **macOS** |
| Steuerung | ''Ctrl'' | ''Cmd'' |
| Umschalt | ''Shift'' | ''Shift'' |
| Alt | ''Alt'' | ''Alt'' |
Modifier werden mit ''+'' verkettet, gefolgt von der Taste:
* ''Ctrl+S'' — Steuerung + S
* ''Ctrl+Shift+P'' — Steuerung + Umschalt + P
* ''Alt+F4'' — Alt + F4
* ''F5'' — Funktionstaste ohne Modifier
Der Host wandelt den String intern in einen ''TShortCut''-Wert um. Ungültige Kombinationen werden beim Laden gemeldet und ignoriert.
===== Kontextbezogene Kürzel =====
Der ''when''-Ausdruck ermöglicht es, dass dasselbe Tastenkürzel in verschiedenen Kontexten verschiedene Commands auslöst:
"keybindings": [
{
"command": "assets.save",
"key": "Ctrl+S",
"when": "activeDocument == assets.editor"
},
{
"command": "reports.save",
"key": "Ctrl+S",
"when": "activeDocument == reports.editor"
}
]
In diesem Beispiel löst ''Ctrl+S'' den Speichern-Command des jeweils aktiven Editors aus. Wenn der Asset-Editor aktiv ist, wird ''assets.save'' ausgeführt; wenn der Berichts-Editor aktiv ist, wird ''reports.save'' ausgeführt. Ohne ''when''-Ausdruck würde der Host bei Konflikten den zuletzt registrierten Command verwenden.
===== Konflikterkennung =====
Wenn zwei Add-ins dasselbe Tastenkürzel ohne ''when''-Ausdruck registrieren, entsteht ein Konflikt. Der Host löst Konflikte nach dem First-Registered-Wins-Prinzip: Das zuerst registrierte Kürzel gewinnt, das zweite wird ignoriert und im Log protokolliert. Um Konflikte zu vermeiden, sollten Add-ins möglichst spezifische ''when''-Ausdrücke verwenden oder ungewöhnliche Tastenkombinationen wählen.
===== Programmatische Registrierung =====
Wie bei allen Contribution-Typen ist die deklarative Registrierung im [[..:manifest|Manifest]] der bevorzugte Weg. Für dynamische Szenarien steht ''IKeybindingService'' bereit:
AContext.Subscribe(
FHost.Keybindings.RegisterKeybinding('Ctrl+Shift+R',
'assets.refresh', 'activeDocument == assets.editor')
);
Weiter zum [[..:skin-contract|Skin-Vertrag]] oder zurück zur [[start|Contributions-Übersicht]].