Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/frontend/editors/slate/slate-react/utils/hotkeys.ts
1698 views
1
import { isKeyHotkey } from "is-hotkey";
2
import { IS_APPLE } from "./environment";
3
4
/**
5
* Hotkey mappings for each platform.
6
*/
7
8
const HOTKEYS = {
9
bold: "mod+b",
10
compose: ["down", "left", "right", "up", "backspace", "enter"],
11
moveBackward: "left",
12
moveForward: "right",
13
moveWordBackward: "ctrl+left",
14
moveWordForward: "ctrl+right",
15
deleteBackward: "shift?+backspace",
16
deleteForward: "shift?+delete",
17
extendBackward: "shift+left",
18
extendForward: "shift+right",
19
italic: "mod+i",
20
splitBlock: "shift?+enter",
21
undo: "mod+z",
22
};
23
24
const APPLE_HOTKEYS = {
25
moveLineBackward: "opt+up",
26
moveLineForward: "opt+down",
27
moveWordBackward: "opt+left",
28
moveWordForward: "opt+right",
29
deleteBackward: ["ctrl+backspace", "ctrl+h"],
30
deleteForward: ["ctrl+delete", "ctrl+d"],
31
deleteLineBackward: "cmd+shift?+backspace",
32
deleteLineForward: ["cmd+shift?+delete", "ctrl+k"],
33
deleteWordBackward: "opt+shift?+backspace",
34
deleteWordForward: "opt+shift?+delete",
35
extendLineBackward: "opt+shift+up",
36
extendLineForward: "opt+shift+down",
37
redo: "cmd+shift+z",
38
transposeCharacter: "ctrl+t",
39
};
40
41
const WINDOWS_HOTKEYS = {
42
deleteWordBackward: "ctrl+shift?+backspace",
43
deleteWordForward: "ctrl+shift?+delete",
44
redo: ["ctrl+y", "ctrl+shift+z"],
45
};
46
47
/**
48
* Create a platform-aware hotkey checker.
49
*/
50
51
const create = (key: string) => {
52
const generic = HOTKEYS[key];
53
const apple = APPLE_HOTKEYS[key];
54
const windows = WINDOWS_HOTKEYS[key];
55
const isGeneric = generic && isKeyHotkey(generic);
56
const isApple = apple && isKeyHotkey(apple);
57
const isWindows = windows && isKeyHotkey(windows);
58
59
return (event: KeyboardEvent) => {
60
if (isGeneric && isGeneric(event)) return true;
61
if (IS_APPLE && isApple && isApple(event)) return true;
62
if (!IS_APPLE && isWindows && isWindows(event)) return true;
63
return false;
64
};
65
};
66
67
/**
68
* Hotkeys.
69
*/
70
71
export default {
72
isBold: create("bold"),
73
isCompose: create("compose"),
74
isMoveBackward: create("moveBackward"),
75
isMoveForward: create("moveForward"),
76
isDeleteBackward: create("deleteBackward"),
77
isDeleteForward: create("deleteForward"),
78
isDeleteLineBackward: create("deleteLineBackward"),
79
isDeleteLineForward: create("deleteLineForward"),
80
isDeleteWordBackward: create("deleteWordBackward"),
81
isDeleteWordForward: create("deleteWordForward"),
82
isExtendBackward: create("extendBackward"),
83
isExtendForward: create("extendForward"),
84
isExtendLineBackward: create("extendLineBackward"),
85
isExtendLineForward: create("extendLineForward"),
86
isItalic: create("italic"),
87
isMoveLineBackward: create("moveLineBackward"),
88
isMoveLineForward: create("moveLineForward"),
89
isMoveWordBackward: create("moveWordBackward"),
90
isMoveWordForward: create("moveWordForward"),
91
isRedo: create("redo"),
92
isSplitBlock: create("splitBlock"),
93
isTransposeCharacter: create("transposeCharacter"),
94
isUndo: create("undo"),
95
};
96
97