mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-20 08:30:12 +01:00
This commit is contained in:
parent
59169d0479
commit
70acd57c4b
3 changed files with 116 additions and 104 deletions
|
|
@ -425,36 +425,8 @@ export const keymap = {
|
||||||
keymapStr += "⌘";
|
keymapStr += "⌘";
|
||||||
}
|
}
|
||||||
if (event.key !== "Shift" && event.key !== "Alt" && event.key !== "Meta" && event.key !== "Control") {
|
if (event.key !== "Shift" && event.key !== "Alt" && event.key !== "Meta" && event.key !== "Control") {
|
||||||
if (event.key === "ArrowUp") {
|
keymapStr += event.key === "Unidentified" ? "" :
|
||||||
keymapStr += "↑";
|
(Constants.KEYCODELIST[event.keyCode] || (event.key.length > 1 ? event.key : event.key.toUpperCase()));
|
||||||
} else if (event.key === "ArrowDown") {
|
|
||||||
keymapStr += "↓";
|
|
||||||
} else if (event.key === "ArrowLeft") {
|
|
||||||
keymapStr += "←";
|
|
||||||
} else if (event.key === "ArrowRight") {
|
|
||||||
keymapStr += "→";
|
|
||||||
} else if (event.key === "Tab") {
|
|
||||||
keymapStr += "⇥";
|
|
||||||
} else if (event.key === "Backspace") {
|
|
||||||
keymapStr += "⌫";
|
|
||||||
} else if (event.key === "Delete") {
|
|
||||||
keymapStr += "⌦";
|
|
||||||
} else if (event.key === "Enter") {
|
|
||||||
keymapStr += "↩";
|
|
||||||
} else if (Constants.KEYCODE[event.keyCode]) {
|
|
||||||
if (event.shiftKey) {
|
|
||||||
keymapStr += Constants.KEYCODE[event.keyCode][1];
|
|
||||||
} else {
|
|
||||||
keymapStr += Constants.KEYCODE[event.keyCode][0];
|
|
||||||
}
|
|
||||||
} else if (["/", ".", "+", "-", "*"].includes(event.key)) {
|
|
||||||
keymapStr += event.key;
|
|
||||||
} else if (event.code.startsWith("Digit") || event.code.startsWith("Key") || event.code.startsWith("Numpad")) {
|
|
||||||
// 新版 Electron 可以支持 Alt["I", "E", "N", "U"],故移除原有判断
|
|
||||||
keymapStr += event.code.substring(event.code.length - 1).toUpperCase();
|
|
||||||
} else {
|
|
||||||
keymapStr += event.key === "Unidentified" ? "" : (event.key.length > 1 ? event.key : event.key.toUpperCase());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
it.setAttribute("data-value", keymapStr);
|
it.setAttribute("data-value", keymapStr);
|
||||||
// Mac 中文下会直接输入
|
// Mac 中文下会直接输入
|
||||||
|
|
|
||||||
|
|
@ -101,19 +101,110 @@ export abstract class Constants {
|
||||||
|
|
||||||
public static readonly QUICK_DECK_ID = "20230218211946-2kw8jgx";
|
public static readonly QUICK_DECK_ID = "20230218211946-2kw8jgx";
|
||||||
|
|
||||||
public static readonly KEYCODE: { [key: string]: string[] } = {
|
public static readonly KEYCODELIST: { [key: number]: string } = {
|
||||||
"186": [";", ":"],
|
8: "⌫",
|
||||||
"187": ["=", "+"],
|
9: "⇥",
|
||||||
"188": [",", "<"],
|
13: "↩",
|
||||||
"189": ["-", "_"],
|
16: "⇧",
|
||||||
"190": [".", ">"],
|
17: "⌘",
|
||||||
"191": ["/", "?"],
|
18: "⌥",
|
||||||
"192": ["`", "~"],
|
19: "Pause",
|
||||||
"219": ["[", "{"],
|
20: "CapsLock",
|
||||||
"220": ["\\", "|"],
|
27: "Escape",
|
||||||
"221": ["]", "}"],
|
32: " ",
|
||||||
"222": ["'", '"'],
|
33: "PageUp",
|
||||||
};
|
34: "PageDown",
|
||||||
|
35: "End",
|
||||||
|
36: "Home",
|
||||||
|
37: "←",
|
||||||
|
38: "↑",
|
||||||
|
39: "→",
|
||||||
|
40: "↓",
|
||||||
|
44: "PrintScreen",
|
||||||
|
45: "Insert",
|
||||||
|
46: "⌦",
|
||||||
|
48: "0",
|
||||||
|
49: "1",
|
||||||
|
50: "2",
|
||||||
|
51: "3",
|
||||||
|
52: "4",
|
||||||
|
53: "5",
|
||||||
|
54: "6",
|
||||||
|
55: "7",
|
||||||
|
56: "8",
|
||||||
|
57: "9",
|
||||||
|
65: "A",
|
||||||
|
66: "B",
|
||||||
|
67: "C",
|
||||||
|
68: "D",
|
||||||
|
69: "E",
|
||||||
|
70: "F",
|
||||||
|
71: "G",
|
||||||
|
72: "H",
|
||||||
|
73: "I",
|
||||||
|
74: "J",
|
||||||
|
75: "K",
|
||||||
|
76: "L",
|
||||||
|
77: "M",
|
||||||
|
78: "N",
|
||||||
|
79: "O",
|
||||||
|
80: "P",
|
||||||
|
81: "Q",
|
||||||
|
82: "R",
|
||||||
|
83: "S",
|
||||||
|
84: "T",
|
||||||
|
85: "U",
|
||||||
|
86: "V",
|
||||||
|
87: "W",
|
||||||
|
88: "X",
|
||||||
|
89: "Y",
|
||||||
|
90: "Z",
|
||||||
|
91: "⌘",
|
||||||
|
92: "⌘",
|
||||||
|
93: "⌘",
|
||||||
|
96: "0",
|
||||||
|
97: "1",
|
||||||
|
98: "2",
|
||||||
|
99: "3",
|
||||||
|
100: "4",
|
||||||
|
101: "5",
|
||||||
|
102: "6",
|
||||||
|
103: "7",
|
||||||
|
104: "8",
|
||||||
|
105: "9",
|
||||||
|
106: "*",
|
||||||
|
107: "+",
|
||||||
|
109: "-",
|
||||||
|
110: ".",
|
||||||
|
111: "/",
|
||||||
|
112: "F1",
|
||||||
|
113: "F2",
|
||||||
|
114: "F3",
|
||||||
|
115: "F4",
|
||||||
|
116: "F5",
|
||||||
|
117: "F6",
|
||||||
|
118: "F7",
|
||||||
|
119: "F8",
|
||||||
|
120: "F9",
|
||||||
|
121: "F10",
|
||||||
|
122: "F11",
|
||||||
|
123: "F12",
|
||||||
|
144: "NumLock",
|
||||||
|
145: "ScrollLock",
|
||||||
|
182: "MyComputer",
|
||||||
|
183: "MyCalculator",
|
||||||
|
186: ";",
|
||||||
|
187: "=",
|
||||||
|
188: ",",
|
||||||
|
189: "-",
|
||||||
|
190: ".",
|
||||||
|
191: "/",
|
||||||
|
192: "`",
|
||||||
|
219: "[",
|
||||||
|
220: "\\",
|
||||||
|
221: "]",
|
||||||
|
222: "'",
|
||||||
|
}
|
||||||
// 冲突不使用 "⌘S/Q"
|
// 冲突不使用 "⌘S/Q"
|
||||||
// "⌘", "⇧", "⌥", "⌃"
|
// "⌘", "⇧", "⌥", "⌃"
|
||||||
// "⌘A", "⌘X", "⌘C", "⌘V", "⌘-", "⌘=", "⌘0", "⇧⌘V", "⌘/", "⇧↑", "⇧↓", "⇧→", "⇧←", "⇧⇥", "⇧⌘⇥", "⌃⇥", "⌘⇥", "⌃⌘⇥", "⇧⌘→", "⇧⌘←",
|
// "⌘A", "⌘X", "⌘C", "⌘V", "⌘-", "⌘=", "⌘0", "⇧⌘V", "⌘/", "⇧↑", "⇧↓", "⇧→", "⇧←", "⇧⇥", "⇧⌘⇥", "⌃⇥", "⌘⇥", "⌃⌘⇥", "⇧⌘→", "⇧⌘←",
|
||||||
|
|
@ -164,7 +255,7 @@ export abstract class Constants {
|
||||||
expand: {default: "⌘↓", custom: "⌘↓"},
|
expand: {default: "⌘↓", custom: "⌘↓"},
|
||||||
collapse: {default: "⌘↑", custom: "⌘↑"},
|
collapse: {default: "⌘↑", custom: "⌘↑"},
|
||||||
insertBottom: {default: "⌥⌘.", custom: "⌥⌘."},
|
insertBottom: {default: "⌥⌘.", custom: "⌥⌘."},
|
||||||
refTab: {default: "⇧⌘>", custom: "⇧⌘>"},
|
refTab: {default: "⇧⌘.", custom: "⇧⌘."},
|
||||||
openBy: {default: "⌥,", custom: "⌥,"},
|
openBy: {default: "⌥,", custom: "⌥,"},
|
||||||
insertRight: {default: "⌥.", custom: "⌥."},
|
insertRight: {default: "⌥.", custom: "⌥."},
|
||||||
attr: {default: "⌥⌘A", custom: "⌥⌘A"},
|
attr: {default: "⌥⌘A", custom: "⌥⌘A"},
|
||||||
|
|
@ -243,7 +334,7 @@ export abstract class Constants {
|
||||||
moveToLeft: {default: "⌥⌘L", custom: "⌥⌘L"},
|
moveToLeft: {default: "⌥⌘L", custom: "⌥⌘L"},
|
||||||
moveToRight: {default: "⌥⌘R", custom: "⌥⌘R"},
|
moveToRight: {default: "⌥⌘R", custom: "⌥⌘R"},
|
||||||
"delete-row": {default: "⌘-", custom: "⌘-"},
|
"delete-row": {default: "⌘-", custom: "⌘-"},
|
||||||
"delete-column": {default: "⇧⌘_", custom: "⇧⌘_"}
|
"delete-column": {default: "⇧⌘-", custom: "⇧⌘-"}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugin: {},
|
plugin: {},
|
||||||
|
|
|
||||||
|
|
@ -9,32 +9,16 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
|
|
||||||
// []
|
// []
|
||||||
if (hotKey.indexOf("⇧") === -1 && hotKey.indexOf("⌘") === -1 && hotKey.indexOf("⌥") === -1 && hotKey.indexOf("⌃") === -1) {
|
if (hotKey.indexOf("⇧") === -1 && hotKey.indexOf("⌘") === -1 && hotKey.indexOf("⌥") === -1 && hotKey.indexOf("⌃") === -1) {
|
||||||
if (hotKey === "⇥") {
|
if (!event.ctrlKey && !isCtrl(event) && !event.altKey && !event.shiftKey && hotKey === Constants.KEYCODELIST[event.keyCode]) {
|
||||||
hotKey = "Tab";
|
|
||||||
}
|
|
||||||
if (!event.ctrlKey && !isCtrl(event) && !event.altKey && !event.shiftKey && event.code === hotKey) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const hotKeys = hotKey.split("");
|
const hotKeys = hotKey.split("");
|
||||||
if (hotKey.endsWith("↑") || hotKey.endsWith("↓") || hotKey.endsWith("→") || hotKey.endsWith("←") ||
|
if (hotKey.indexOf("F") > -1) {
|
||||||
hotKey.endsWith("↩") || hotKey.endsWith("⇥") || hotKey.indexOf("F") > -1) {
|
|
||||||
hotKeys.forEach((item, index) => {
|
hotKeys.forEach((item, index) => {
|
||||||
if (item === "↑") {
|
if (item === "F") {
|
||||||
hotKeys[index] = "ArrowUp";
|
|
||||||
} else if (item === "↓") {
|
|
||||||
hotKeys[index] = "ArrowDown";
|
|
||||||
} else if (item === "←") {
|
|
||||||
hotKeys[index] = "ArrowLeft";
|
|
||||||
} else if (item === "→") {
|
|
||||||
hotKeys[index] = "ArrowRight";
|
|
||||||
} else if (item === "⇥") {
|
|
||||||
hotKeys[index] = "Tab";
|
|
||||||
} else if (item === "↩") {
|
|
||||||
hotKeys[index] = "Enter";
|
|
||||||
} else if (item === "F") {
|
|
||||||
// F1-F12
|
// F1-F12
|
||||||
hotKeys[index] = "F" + hotKeys.splice(index + 1, 1);
|
hotKeys[index] = "F" + hotKeys.splice(index + 1, 1);
|
||||||
if (hotKeys[index + 1]) {
|
if (hotKeys[index + 1]) {
|
||||||
|
|
@ -46,15 +30,9 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
|
|
||||||
// 是否匹配 ⇧[]
|
// 是否匹配 ⇧[]
|
||||||
if (hotKey.startsWith("⇧") && hotKeys.length === 2) {
|
if (hotKey.startsWith("⇧") && hotKeys.length === 2) {
|
||||||
if (!event.ctrlKey && !isCtrl(event) && !event.altKey && event.shiftKey) {
|
if (!event.ctrlKey && !isCtrl(event) && !event.altKey && event.shiftKey && hotKeys[1] === Constants.KEYCODELIST[event.keyCode]) {
|
||||||
if (event.code.startsWith("Digit") || event.code.startsWith("Numpad")) {
|
|
||||||
if (hotKeys[1] === event.code.slice(-1) || event.key === hotKeys[1]) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (event.key === hotKeys[1]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -64,16 +42,7 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
keyCode = hotKeys[3];
|
keyCode = hotKeys[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
let isMatchKey = (/^[0-9]$/.test(keyCode) ? (event.code === "Digit" + keyCode || event.code === "Numpad" + keyCode) : event.code === "Key" + keyCode) ||
|
const isMatchKey = keyCode === Constants.KEYCODELIST[event.keyCode];
|
||||||
event.code === keyCode ||
|
|
||||||
event.key === keyCode; // 小键盘上的 /*-+.
|
|
||||||
if (Constants.KEYCODE[event.keyCode]) {
|
|
||||||
if (event.shiftKey) {
|
|
||||||
isMatchKey = Constants.KEYCODE[event.keyCode][1] === keyCode;
|
|
||||||
} else {
|
|
||||||
isMatchKey = Constants.KEYCODE[event.keyCode][0] === keyCode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 是否匹配 ⌥[] / ⌥⌘[]
|
// 是否匹配 ⌥[] / ⌥⌘[]
|
||||||
if (isMatchKey && event.altKey && !event.shiftKey &&
|
if (isMatchKey && event.altKey && !event.shiftKey &&
|
||||||
(hotKeys.length === 3 ? (isCtrl(event) && hotKey.startsWith("⌥⌘")) : !isCtrl(event))) {
|
(hotKeys.length === 3 ? (isCtrl(event) && hotKey.startsWith("⌥⌘")) : !isCtrl(event))) {
|
||||||
|
|
@ -99,16 +68,7 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
keyCode = hotKeys[3];
|
keyCode = hotKeys[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
let isMatchKey = (/^[0-9]$/.test(keyCode) ? (event.code === "Digit" + keyCode || event.code === "Numpad" + keyCode) : event.code === "Key" + keyCode) ||
|
const isMatchKey = keyCode === Constants.KEYCODELIST[event.keyCode];
|
||||||
event.code === keyCode ||
|
|
||||||
event.key === keyCode; // 小键盘上的 /*-+.
|
|
||||||
if (Constants.KEYCODE[event.keyCode]) {
|
|
||||||
if (event.shiftKey) {
|
|
||||||
isMatchKey = Constants.KEYCODE[event.keyCode][1] === keyCode;
|
|
||||||
} else {
|
|
||||||
isMatchKey = Constants.KEYCODE[event.keyCode][0] === keyCode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 是否匹配 ⌃[]
|
// 是否匹配 ⌃[]
|
||||||
if (isMatchKey && hotKeys.length === 2 &&
|
if (isMatchKey && hotKeys.length === 2 &&
|
||||||
event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey) {
|
event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey) {
|
||||||
|
|
@ -135,18 +95,7 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
// 是否匹配 ⇧⌘[] / ⌘[]
|
// 是否匹配 ⇧⌘[] / ⌘[]
|
||||||
const hasShift = hotKeys.length > 2 && (hotKeys[0] === "⇧");
|
const hasShift = hotKeys.length > 2 && (hotKeys[0] === "⇧");
|
||||||
if (isCtrl(event) && !event.altKey && ((!hasShift && !event.shiftKey) || (hasShift && event.shiftKey))) {
|
if (isCtrl(event) && !event.altKey && ((!hasShift && !event.shiftKey) || (hasShift && event.shiftKey))) {
|
||||||
const keyCode = (hasShift ? hotKeys[2] : hotKeys[1]);
|
return (hasShift ? hotKeys[2] : hotKeys[1]) === Constants.KEYCODELIST[event.keyCode];
|
||||||
let isMatchKey = (/^[0-9]$/.test(keyCode) ? (event.code === "Digit" + keyCode || event.code === "Numpad" + keyCode) : event.code === "Key" + keyCode) ||
|
|
||||||
event.code === keyCode || event.key.toLowerCase() === keyCode.toLowerCase();
|
|
||||||
// 更新 electron 后不需要判断 Mac,但 Mac 下中英文有区别,需使用 keyCode 辅助
|
|
||||||
if (Constants.KEYCODE[event.keyCode]) {
|
|
||||||
if (event.shiftKey) {
|
|
||||||
isMatchKey = Constants.KEYCODE[event.keyCode][1] === keyCode;
|
|
||||||
} else {
|
|
||||||
isMatchKey = Constants.KEYCODE[event.keyCode][0] === keyCode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return isMatchKey;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue