mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-22 09:30:14 +01:00
This commit is contained in:
parent
a59014cf2d
commit
deab11f9d0
4 changed files with 61 additions and 66 deletions
|
|
@ -330,42 +330,29 @@ export const keymap = {
|
||||||
keymapStr += "→";
|
keymapStr += "→";
|
||||||
} else if (event.key === "Tab") {
|
} else if (event.key === "Tab") {
|
||||||
keymapStr += "⇥";
|
keymapStr += "⇥";
|
||||||
} else if (event.code === "BracketLeft") {
|
|
||||||
keymapStr += "[";
|
|
||||||
} else if (event.code === "BracketRight") {
|
|
||||||
keymapStr += "]";
|
|
||||||
} else if (event.key === "Backspace") {
|
} else if (event.key === "Backspace") {
|
||||||
keymapStr += "⌫";
|
keymapStr += "⌫";
|
||||||
} else if (event.key === "Delete") {
|
} else if (event.key === "Delete") {
|
||||||
keymapStr += "⌦";
|
keymapStr += "⌦";
|
||||||
} else if (event.key === "Enter") {
|
} else if (event.key === "Enter") {
|
||||||
keymapStr += "↩";
|
keymapStr += "↩";
|
||||||
} else if (event.altKey) {
|
} else if (Constants.KEYCODE[event.keyCode]) {
|
||||||
const codeKey = event.code.substr(event.code.length - 1, 1).toUpperCase();
|
if (event.shiftKey) {
|
||||||
if (event.key === "Enter") {
|
keymapStr += Constants.KEYCODE[event.keyCode][1];
|
||||||
keymapStr += "↩";
|
} else {
|
||||||
} else if (event.key.startsWith("F") && event.key.length > 1) {
|
keymapStr += Constants.KEYCODE[event.keyCode][0];
|
||||||
keymapStr += event.key;
|
}
|
||||||
} else if (event.code === "Period") {
|
} else if (event.code.startsWith("Digit") || event.code.startsWith("Key") || event.code.startsWith("Numpad")) {
|
||||||
keymapStr += ".";
|
const codeKey = event.code.substring(event.code.length - 1).toUpperCase();
|
||||||
} else if (codeKey !== "I" && codeKey !== "E" && codeKey !== "N" && codeKey !== "U") {
|
if (!event.altKey ||
|
||||||
keymapStr += codeKey;
|
(event.altKey && !["I", "E", "N", "U"].includes(codeKey)) // Mac 编辑器中 alt+I 等字符无法清空
|
||||||
} else if (event.which === 229) {
|
) {
|
||||||
setTimeout(() => {
|
keymapStr += event.code.substring(event.code.length - 1).toUpperCase();
|
||||||
it.value = "";
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} else if (event.key === "》") {
|
|
||||||
keymapStr += ">";
|
|
||||||
} else if (event.key === "《") {
|
|
||||||
keymapStr += "<";
|
|
||||||
} else if (event.key === "—") {
|
|
||||||
keymapStr += "-";
|
|
||||||
} else {
|
} else {
|
||||||
keymapStr += event.key === "Unidentified" ? "" : (event.key.length > 1 ? event.key : event.key.toUpperCase());
|
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 中文下会直接输入
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|
|
||||||
|
|
@ -89,8 +89,21 @@ export abstract class Constants {
|
||||||
fr_FR: "20200923234011-ieuun1p",
|
fr_FR: "20200923234011-ieuun1p",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static readonly KEYCODE: { [key: string]: string[] } = {
|
||||||
|
"186": [";", ":"],
|
||||||
|
"187": ["=", "+"],
|
||||||
|
"188": [",", "<"],
|
||||||
|
"189": ["-", "_"],
|
||||||
|
"190": [".", ">"],
|
||||||
|
"191": ["/", "?"],
|
||||||
|
"192": ["`", "~"],
|
||||||
|
"219": ["[", "{"],
|
||||||
|
"220": ["\\", "|"],
|
||||||
|
"221": ["]", "}"],
|
||||||
|
"222": ["'", '"'],
|
||||||
|
};
|
||||||
// "⌘", "⇧", "⌥", "⌃"
|
// "⌘", "⇧", "⌥", "⌃"
|
||||||
// "⌘A", "⌘X", "⌘C", "⌘V", "⌘/", "⇧↑", "⇧↓", "⇧→", "⇧←", "⇧⇥", "⇧⌘⇥", "⌃⇥", "⌃⌘⇥", "⇧⌘→", "⇧⌘←", "⌘Home", "⌘End", "⇧↩", "↩", "PageUp", "PageDown", "⌫", "⌦" 不可自定义
|
// "⌘A", "⌘X", "⌘C", "⌘V", "⌘/", "⇧↑", "⇧↓", "⇧→", "⇧←", "⇧⇥", "⇧⌘⇥", "⌃⇥", "⌃⌘⇥", "⇧⌘→", "⇧⌘←", "⌘Home", "⌘End", "⇧↩", "↩", "PageUp", "PageDown", "⌫", "⌦", "⌃I", "⌃E", "⌃N", "⌃U" 不可自定义
|
||||||
public static readonly SIYUAN_KEYMAP: IKeymap = {
|
public static readonly SIYUAN_KEYMAP: IKeymap = {
|
||||||
general: {
|
general: {
|
||||||
syncNow: {default: "F9", custom: "F9"},
|
syncNow: {default: "F9", custom: "F9"},
|
||||||
|
|
|
||||||
|
|
@ -86,12 +86,6 @@ export const updateHotkeyTip = (hotkey: string) => {
|
||||||
"⌦": "Delete",
|
"⌦": "Delete",
|
||||||
"↩": "Enter",
|
"↩": "Enter",
|
||||||
}));
|
}));
|
||||||
const SHIFT_KEY_MAP = new Map(Object.entries({
|
|
||||||
";": ":",
|
|
||||||
"=": "+",
|
|
||||||
"-": "_",
|
|
||||||
".": ">",
|
|
||||||
}));
|
|
||||||
|
|
||||||
const keys = [];
|
const keys = [];
|
||||||
|
|
||||||
|
|
@ -101,12 +95,8 @@ export const updateHotkeyTip = (hotkey: string) => {
|
||||||
|
|
||||||
// 不能去最后一个,需匹配 F2
|
// 不能去最后一个,需匹配 F2
|
||||||
const lastKey = hotkey.replace(/⌘|⇧|⌥/g, "");
|
const lastKey = hotkey.replace(/⌘|⇧|⌥/g, "");
|
||||||
if ("⌘⇧⌥".indexOf(lastKey) < 0) {
|
if (lastKey) {
|
||||||
keys.push(
|
keys.push(KEY_MAP.get(lastKey) || lastKey);
|
||||||
KEY_MAP.get(lastKey)
|
|
||||||
|| (hotkey.indexOf("⇧") > -1 && SHIFT_KEY_MAP.get(lastKey))
|
|
||||||
|| lastKey
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return keys.join("+");
|
return keys.join("+");
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import {isCtrl} from "./compatibility";
|
import {isCtrl} from "./compatibility";
|
||||||
|
import {Constants} from "../../constants";
|
||||||
|
|
||||||
// 是否匹配 ⇧⌘[] / ⌘[] / ⌥[] / ⌥⌘[] / ⌥⇧[] / ⌥⇧⌘[] / ⇧Tab / []
|
// 是否匹配 ⇧⌘[] / ⌘[] / ⌥[] / ⌥⌘[] / ⌥⇧[] / ⌥⇧⌘[] / ⇧[] / []
|
||||||
export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
if (hotKey === "") {
|
if (hotKey === "") {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -43,9 +44,13 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 是否匹配 ⇧Tab/↑
|
// 是否匹配 ⇧[]
|
||||||
if (hotKey.startsWith("⇧") && hotKeys.length === 2) {
|
if (hotKey.startsWith("⇧") && hotKeys.length === 2 && !event.ctrlKey && !isCtrl(event) && !event.altKey && event.shiftKey) {
|
||||||
if (!event.ctrlKey && !isCtrl(event) && !event.altKey && event.shiftKey && event.key === hotKeys[1]) {
|
if (event.code.startsWith("Digit") || event.code.startsWith("Numpad")) {
|
||||||
|
if (hotKeys[1] === event.code.slice(-1)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else if (event.key === hotKeys[1]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -56,20 +61,26 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
if (hotKeys.length === 4) {
|
if (hotKeys.length === 4) {
|
||||||
keyCode = hotKeys[3];
|
keyCode = hotKeys[3];
|
||||||
}
|
}
|
||||||
const isMatchKey = (/^[0-9]$/.test(keyCode) ? (event.code === "Digit" + keyCode || event.code === "Numpad" + keyCode) : event.code === "Key" + keyCode) ||
|
|
||||||
event.code === keyCode ||
|
let isMatchKey = (/^[0-9]$/.test(keyCode) ? (event.code === "Digit" + keyCode || event.code === "Numpad" + keyCode) : event.code === "Key" + keyCode) ||
|
||||||
(event.code === "Period" && keyCode === ".") ||
|
event.code === keyCode;
|
||||||
(event.code === "BracketLeft" && keyCode === "[") || (event.code === "BracketRight" && 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 ((hotKeys.length === 3 ? isCtrl(event) : !isCtrl(event)) && event.altKey && !event.shiftKey && isMatchKey) {
|
if (isMatchKey && (hotKeys.length === 3 ? isCtrl(event) : !isCtrl(event)) && event.altKey && !event.shiftKey) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// ⌥⇧⌘[]
|
// ⌥⇧⌘[]
|
||||||
if (hotKey.startsWith("⌥⇧⌘") && hotKeys.length === 4 && event.altKey && event.shiftKey && isCtrl(event) && isMatchKey) {
|
if (isMatchKey && hotKey.startsWith("⌥⇧⌘") && hotKeys.length === 4 && event.altKey && event.shiftKey && isCtrl(event)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// ⌥⇧[]
|
// ⌥⇧[]
|
||||||
if (hotKey.startsWith("⌥⇧") && hotKeys.length === 3 && event.altKey && event.shiftKey && !isCtrl(event) && isMatchKey) {
|
if (isMatchKey && hotKey.startsWith("⌥⇧") && hotKeys.length === 3 && event.altKey && event.shiftKey && !isCtrl(event)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -77,24 +88,18 @@ export const matchHotKey = (hotKey: string, event: KeyboardEvent) => {
|
||||||
|
|
||||||
// 是否匹配 ⇧⌘[] / ⌘[]
|
// 是否匹配 ⇧⌘[] / ⌘[]
|
||||||
const hasShift = hotKeys.length > 2 && (hotKeys[0] === "⇧");
|
const hasShift = hotKeys.length > 2 && (hotKeys[0] === "⇧");
|
||||||
let key = (hasShift ? hotKeys[2] : hotKeys[1]);
|
if (isCtrl(event) && !event.altKey && ((!hasShift && !event.shiftKey) || (hasShift && event.shiftKey))) {
|
||||||
let keyCode;
|
const keyCode = (hasShift ? hotKeys[2] : hotKeys[1]);
|
||||||
// 更新 electron 后不需要判断 Mac,但 Mac 下中英文有区别,需使用 keyCode 辅助
|
let isMatchKey = event.key.toLowerCase() === keyCode.toLowerCase();
|
||||||
if (hasShift) {
|
// 更新 electron 后不需要判断 Mac,但 Mac 下中英文有区别,需使用 keyCode 辅助
|
||||||
if (key === "-") {
|
if (Constants.KEYCODE[event.keyCode]) {
|
||||||
key = "_";
|
if (event.shiftKey) {
|
||||||
keyCode = 189;
|
isMatchKey = Constants.KEYCODE[event.keyCode][1] === keyCode;
|
||||||
} else if (key === "=") {
|
} else {
|
||||||
key = "+";
|
isMatchKey = Constants.KEYCODE[event.keyCode][0] === keyCode;
|
||||||
keyCode = 187;
|
}
|
||||||
} else if (key === ".") {
|
|
||||||
key = ">";
|
|
||||||
keyCode = 190;
|
|
||||||
}
|
}
|
||||||
}
|
return isMatchKey;
|
||||||
if (isCtrl(event) && (event.key.toLowerCase() === key.toLowerCase() || event.keyCode === keyCode) && !event.altKey
|
|
||||||
&& ((!hasShift && !event.shiftKey) || (hasShift && event.shiftKey))) {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue