mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-21 16:38:23 +01:00
Keybind UI utils (#487)
* added utils to get all of the keybinds and pretty print them, for display purposes * added info section * clarifying meta and alt behavior * changed keybinduidescription to keybind config
This commit is contained in:
parent
646e260488
commit
376e339dfe
@ -1,7 +1,8 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "system:toggleDeveloperTools",
|
"command": "system:toggleDeveloperTools",
|
||||||
"keys": ["Cmd:Option:i"]
|
"keys": ["Cmd:Option:i"],
|
||||||
|
"info": "Opens the chrome developer tool menu"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"command": "system:hideWindow",
|
"command": "system:hideWindow",
|
||||||
@ -127,7 +128,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"command": "app:restartCommand",
|
"command": "app:restartCommand",
|
||||||
"keys": ["Cmd:r"]
|
"keys": ["Cmd:r"],
|
||||||
|
"info": "Restarts the command running in the current selected line"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"command": "app:restartLastCommand",
|
"command": "app:restartLastCommand",
|
||||||
|
@ -25,7 +25,7 @@ const KeyTypeCode = "code";
|
|||||||
|
|
||||||
type KeybindCallback = (event: WaveKeyboardEvent) => boolean;
|
type KeybindCallback = (event: WaveKeyboardEvent) => boolean;
|
||||||
type KeybindConfigArray = Array<KeybindConfig>;
|
type KeybindConfigArray = Array<KeybindConfig>;
|
||||||
type KeybindConfig = { command: string; keys: Array<string>; commandStr?: string };
|
type KeybindConfig = { command: string; keys: Array<string>; commandStr?: string; info?: string };
|
||||||
|
|
||||||
const Callback = "callback";
|
const Callback = "callback";
|
||||||
const Command = "command";
|
const Command = "command";
|
||||||
@ -94,6 +94,7 @@ class KeybindManager {
|
|||||||
throw new Error("invalid keybind key");
|
throw new Error("invalid keybind key");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if user doesn't specify a command string or a description, we will revert to the old one
|
||||||
let defaultCmd = this.keyDescriptionsMap.get(curKeybind.command);
|
let defaultCmd = this.keyDescriptionsMap.get(curKeybind.command);
|
||||||
if (
|
if (
|
||||||
defaultCmd != null &&
|
defaultCmd != null &&
|
||||||
@ -102,6 +103,13 @@ class KeybindManager {
|
|||||||
) {
|
) {
|
||||||
curKeybind.commandStr = this.keyDescriptionsMap.get(curKeybind.command).commandStr;
|
curKeybind.commandStr = this.keyDescriptionsMap.get(curKeybind.command).commandStr;
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
defaultCmd != null &&
|
||||||
|
defaultCmd.info != null &&
|
||||||
|
(curKeybind.info == null || curKeybind.info == "")
|
||||||
|
) {
|
||||||
|
curKeybind.info = this.keyDescriptionsMap.get(curKeybind.command).info;
|
||||||
|
}
|
||||||
newKeyDescriptions.set(curKeybind.command, curKeybind);
|
newKeyDescriptions.set(curKeybind.command, curKeybind);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -115,6 +123,83 @@ class KeybindManager {
|
|||||||
this.keyDescriptionsMap = newKeyDescriptions;
|
this.keyDescriptionsMap = newKeyDescriptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prettyPrintKeybind(keyDescription: string): string {
|
||||||
|
let keyPress = parseKeyDescription(keyDescription);
|
||||||
|
let returnString = "";
|
||||||
|
if (keyPress.mods.Cmd) {
|
||||||
|
returnString += "⌘";
|
||||||
|
}
|
||||||
|
if (keyPress.mods.Ctrl) {
|
||||||
|
returnString += "⌃";
|
||||||
|
}
|
||||||
|
if (keyPress.mods.Option) {
|
||||||
|
returnString += "⌥";
|
||||||
|
}
|
||||||
|
if (keyPress.mods.Shift) {
|
||||||
|
returnString += "⇧";
|
||||||
|
}
|
||||||
|
if (keyPress.mods.Meta) {
|
||||||
|
returnString += "M";
|
||||||
|
}
|
||||||
|
if (keyPress.mods.Alt) {
|
||||||
|
returnString += "⌥";
|
||||||
|
}
|
||||||
|
returnString += keyPress.key;
|
||||||
|
return returnString;
|
||||||
|
}
|
||||||
|
|
||||||
|
getUIDescription(keyDescription: string, prettyPrint: boolean = true): KeybindConfig {
|
||||||
|
let keybinds = this.getKeybindsFromDescription(keyDescription, prettyPrint);
|
||||||
|
if (!this.keyDescriptionsMap.has(keyDescription)) {
|
||||||
|
return { keys: keybinds, info: "", command: keyDescription, commandStr: "" };
|
||||||
|
}
|
||||||
|
let curKeybindConfig = this.keyDescriptionsMap.get(keyDescription);
|
||||||
|
let curInfo = "";
|
||||||
|
if (curKeybindConfig.info) {
|
||||||
|
curInfo = curKeybindConfig.info;
|
||||||
|
}
|
||||||
|
let curCommandStr = "";
|
||||||
|
if (curKeybindConfig.commandStr) {
|
||||||
|
curCommandStr = curKeybindConfig.commandStr;
|
||||||
|
}
|
||||||
|
return { keys: keybinds, info: curInfo, commandStr: curCommandStr, command: keyDescription };
|
||||||
|
}
|
||||||
|
|
||||||
|
getKeybindsFromDescription(keyDescription: string, prettyPrint: boolean = true): Array<string> {
|
||||||
|
if (!this.keyDescriptionsMap.has(keyDescription)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
let keyBinds = this.keyDescriptionsMap.get(keyDescription).keys;
|
||||||
|
if (!prettyPrint) {
|
||||||
|
return keyBinds;
|
||||||
|
}
|
||||||
|
let keybindsArray = [];
|
||||||
|
for (let index = 0; index < keyBinds.length; index++) {
|
||||||
|
let curKeybind = keyBinds[index];
|
||||||
|
let curPrettyPrintString = this.prettyPrintKeybind(curKeybind);
|
||||||
|
keybindsArray.push(curPrettyPrintString);
|
||||||
|
}
|
||||||
|
return keybindsArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
getAllKeybindUIDescriptions(prettyPrint: boolean = true): KeybindConfigArray {
|
||||||
|
let keybindsList = [];
|
||||||
|
let keybindDescriptions = this.keyDescriptionsMap.keys();
|
||||||
|
for (let keyDesc of keybindDescriptions) {
|
||||||
|
keybindsList.push(this.getUIDescription(keyDesc, prettyPrint));
|
||||||
|
}
|
||||||
|
return keybindsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
getAllKeybinds(prettyPrint: boolean = true): Array<Array<string>> {
|
||||||
|
let keybindsList = [];
|
||||||
|
let keybindDescriptions = this.keyDescriptionsMap.keys();
|
||||||
|
for (let keyDesc of keybindDescriptions) {
|
||||||
|
keybindsList.push(this.getKeybindsFromDescription(keyDesc, prettyPrint));
|
||||||
|
}
|
||||||
|
return keybindsList;
|
||||||
|
}
|
||||||
|
|
||||||
runSlashCommand(curKeybind: Keybind): boolean {
|
runSlashCommand(curKeybind: Keybind): boolean {
|
||||||
let curConfigKeybind = this.keyDescriptionsMap.get(curKeybind.keybinding);
|
let curConfigKeybind = this.keyDescriptionsMap.get(curKeybind.keybinding);
|
||||||
if (curConfigKeybind == null || curConfigKeybind.commandStr == null || curKeybind.commandStr == "") {
|
if (curConfigKeybind == null || curConfigKeybind.commandStr == null || curKeybind.commandStr == "") {
|
||||||
@ -369,7 +454,6 @@ function parseKeyDescription(keyDescription: string): KeyPressDecl {
|
|||||||
for (let key of keys) {
|
for (let key of keys) {
|
||||||
if (key == "Cmd") {
|
if (key == "Cmd") {
|
||||||
rtn.mods.Cmd = true;
|
rtn.mods.Cmd = true;
|
||||||
rtn.mods.Meta = true;
|
|
||||||
} else if (key == "Shift") {
|
} else if (key == "Shift") {
|
||||||
rtn.mods.Shift = true;
|
rtn.mods.Shift = true;
|
||||||
} else if (key == "Ctrl") {
|
} else if (key == "Ctrl") {
|
||||||
@ -419,10 +503,10 @@ function notMod(keyPressMod, eventMod) {
|
|||||||
|
|
||||||
function checkKeyPressed(event: WaveKeyboardEvent, keyDescription: string): boolean {
|
function checkKeyPressed(event: WaveKeyboardEvent, keyDescription: string): boolean {
|
||||||
let keyPress = parseKeyDescription(keyDescription);
|
let keyPress = parseKeyDescription(keyDescription);
|
||||||
if (notMod(keyPress.mods.Option, event.option)) {
|
if (!keyPress.mods.Alt && notMod(keyPress.mods.Option, event.option)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (notMod(keyPress.mods.Cmd, event.cmd)) {
|
if (!keyPress.mods.Meta && notMod(keyPress.mods.Cmd, event.cmd)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (notMod(keyPress.mods.Shift, event.shift)) {
|
if (notMod(keyPress.mods.Shift, event.shift)) {
|
||||||
@ -431,10 +515,10 @@ function checkKeyPressed(event: WaveKeyboardEvent, keyDescription: string): bool
|
|||||||
if (notMod(keyPress.mods.Ctrl, event.control)) {
|
if (notMod(keyPress.mods.Ctrl, event.control)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (notMod(keyPress.mods.Alt, event.alt)) {
|
if (keyPress.mods.Alt && !event.alt) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (notMod(keyPress.mods.Meta, event.meta)) {
|
if (keyPress.mods.Meta && !event.meta) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let eventKey = "";
|
let eventKey = "";
|
||||||
|
Loading…
Reference in New Issue
Block a user