@setoelkahfi / svara / commits / 8748f85

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