Added editor shortcuts
mellobacon committed
Nov 29, 2022 at 23:46 UTC
8748f85cb589ce5bf7806694c8ca4e19850cbea4
2 files changed
+86
-5
src/components/Editor/CodeMirrorEditor.svelte
+49
-5
@@ -9,8 +9,22 @@
9
import { fs } from "@tauri-apps/api";
10
import settings from "../../config/nucleus-settings.json";
11
import { addNotification, NotifType } from "../Notifications/Notifications";
12
+ import { execute } from "../../config/config";
13
13
- const shortcuts = Object.entries(settings.shortcuts)
14
+ const shortcuts = Object.entries(settings.shortcuts);
15
+ let keys = {};
16
+
17
+ function modifier(shortcut) {
18
+ switch (shortcut) {
19
+ case "Ctrl":
20
+ return "Control";
21
+ case "Shift":
22
+ return "Shift";
23
+ case "Alt":
24
+ return "Alt";
25
+ }
26
+ return "";
27
+ }
28
29
export let hidden = false;
30
let editorElement;
@@ -60,7 +74,7 @@
74
let colnumber = editorView.state.selection.ranges[0].head - editorView.state.doc.lineAt(editorView.state.selection.main.head).from
75
line_info.set({line: linenumber.toString(), col: (colnumber + 1).toString()});
76
}
63
- async function updateDom() {
77
+ export async function updateDom() {
78
await tick();
79
let filecontent = "";
80
for (let text of editorView.state.doc) {
@@ -95,10 +109,40 @@ on:input={async (e) => {
109
await updateDom();
110
getLineInfo();
111
}}
98
-on:keydown={(e) => {
99
- const code = e.code;
112
+on:keyup={(e) => {
113
const key = e.key.charAt(0).toUpperCase() + e.key.slice(1);
101
- //TODO: Figure out shortcuts
114
+ keys[key] = false;
115
+ keys = {};
116
+}}
117
+on:keydown={async (e) => {
118
+ const key = e.key.charAt(0).toUpperCase() + e.key.slice(1);
119
+ keys[key] = true;
120
+ for (const [name, shortcutKey] of shortcuts) {
121
+ if (keys[modifier(shortcutKey.modifier)] && keys[modifier(shortcutKey.secondaryKey)] && keys[shortcutKey.primaryKey]) {
122
+ await execute(name);
123
+ return false;
124
+ }
125
+ else if (keys[modifier(shortcutKey.modifier)] && shortcutKey.secondaryKey === "" && keys[shortcutKey.primaryKey]) {
126
+ // janky or something yes yes sue me
127
+ if (name === "paste-shortcut" || name === "cut-shortcut" || name === "redo-shortcut" || name === "undo-shortcut") {
128
+ updateDom();
129
+ getLineInfo();
130
+ return false;
131
+ }
132
+ await execute(name);
133
+ return false;
134
+ }
135
+ else if (shortcutKey.modifier === "" && shortcutKey.secondaryKey === "" && keys[shortcutKey.primaryKey]) {
136
+ e.preventDefault();
137
+ if (name === "delete-shortcut") {
138
+ await updateDom();
139
+ getLineInfo();
140
+ break;
141
+ }
142
+ await execute(name);
143
+ break;
144
+ }
145
+ }
146
}}
147
on:keydown={async (e) => {
148
let key = e.code;
src/config/config.ts
+37
@@ -1,3 +1,6 @@
1
+import { openFile, openFolder, saveOpenFile, saveOpenFileAs } from "../components/Header/header_menus/FileMenu";
2
+import { addFileTab } from "../components/Tabs/scripts/Tab";
3
+
4
export function getShortcut({ primaryKey, secondaryKey, modifier }) {
5
if (modifier) {
6
modifier = `${modifier} + `;
@@ -6,4 +9,38 @@ export function getShortcut({ primaryKey, secondaryKey, modifier }) {
9
secondaryKey = `${secondaryKey} + `;
10
}
11
return `${modifier}${secondaryKey}${primaryKey}`;
12
+}
13
+
14
+export async function execute(shortcut) {
15
+ switch (shortcut) {
16
+ case "new-file-shortcut":
17
+ await addFileTab();
18
+ break;
19
+ case "open-file-shortcut":
20
+ openFile();
21
+ break;
22
+ case "open-folder-shortcut":
23
+ openFolder();
24
+ break;
25
+ case "save-file-shortcut":
26
+ saveOpenFile();
27
+ break;
28
+ case "save-file-as-shortcut":
29
+ saveOpenFileAs();
30
+ break;
31
+ case "find-shortcut":
32
+ console.log(shortcut);
33
+ break;
34
+ case "select-all-text-shortcut":
35
+ break;
36
+ case "build-shortcut":
37
+ console.log(shortcut);
38
+ break;
39
+ case "run-shortcut":
40
+ console.log(shortcut);
41
+ break;
42
+ case "run-no-debug-shortcut":
43
+ console.log(shortcut);
44
+ break;
45
+ }
46
}
\ No newline at end of file