feat: added internal terminal settings
mellbacon committed
Feb 3, 2024 at 14:07 UTC
25341721fc7429665fc421894689465a4519639a
4 files changed
+63
-12
src-tauri/src/main.rs
+7
-4
@@ -322,11 +322,14 @@ fn load_settings(app: &mut App) {
322
"editor.autosave": false,
323
"nucleus.showKeybinds": false,
324
"nucleus.useExternalTerminal": true,
325
- "terminal.external": {
326
- "profile": "powershell"
327
- },
325
+ "terminal.external.profile": "powershell",
326
"terminal.internal": {
329
- "profile": "powershell"
327
+ "profile": "powershell",
328
+ "fontSize": "14",
329
+ "fontFamily": "Cascadia Mono",
330
+ "lineHeight": "1.2",
331
+ "cursorStyle": "bar",
332
+ "fontWeight": "normal",
333
}
334
}
335
);
src/config/config.ts
+6
@@ -8,6 +8,7 @@ import { setEditorFontFamily, setEditorFontSize } from "../lib/Editor.svelte";
8
import { watch } from "tauri-plugin-fs-watch-api";
9
import { info } from "tauri-plugin-log-api";
10
import { setTerminalState } from "../lib/Statusbar.svelte";
11
+import { termOptions, updateTermOptions } from "../lib/Terminal.svelte";
12
13
export const systemfonts = writable([]);
14
export const editorfont = writable("");
@@ -98,7 +99,12 @@ export async function loadDefaultSettings() {
99
appSettings.onKeyChange("nucleus.useExternalTerminal", (value: string) => {
100
setTerminalState(value);
101
})
102
+ appSettings.onKeyChange("terminal.internal", (value: any) => {
103
+ termOptions.set(value);
104
+ updateTermOptions();
105
+ })
106
setTerminalState(await appSettings.get("nucleus.useExternalTerminal"))
107
+ termOptions.set(await appSettings.get("terminal.internal"));
108
info("Settings initialized", {file: "config.ts", line: 97});
109
}
110
src/lib/Settings.svelte
+40
-6
@@ -14,15 +14,17 @@
14
let nucleusTheme;
15
let editorAutosave;
16
let externalTerminal;
17
+ let terminalOptions = {"fontWeight": "", "fontSize": "", "fontFamily": "", "lineHeight": "", "cursorStyle": ""};
18
onMount(async () => {
19
editorFontSize = await appSettings.get("editor.fontSize");
20
editorFontFamily = await appSettings.get("editor.fontFamily");
21
editorAutosave = await appSettings.get("editor.autosave");
22
nucleusTheme = await appSettings.get("nucleus.theme");
23
externalTerminal = await appSettings.get("nucleus.useExternalTerminal");
24
+ terminalOptions = await appSettings.get("terminal.internal");
25
})
26
25
- async function handleSelect(e) {
27
+ async function handleAutosaveSelect(e) {
28
await appSettings.set("editor.autosave", e.detail.selection);
29
await appSettings.save();
30
}
@@ -30,11 +32,11 @@
32
await appSettings.set("nucleus.theme", e.detail.selection.name);
33
await appSettings.save();
34
}
33
- async function handleInput(e) {
35
+ async function handleEditorFontSize(e) {
36
await appSettings.set("editor.fontSize", e.detail.value);
37
await appSettings.save();
38
}
37
- async function handleFamilySelect(e) {
39
+ async function handleEditorFontFamily(e) {
40
await appSettings.set("editor.fontFamily", e.detail.value);
41
await appSettings.save();
42
}
@@ -42,6 +44,33 @@
44
await appSettings.set("nucleus.useExternalTerminal", e.detail.selection.name);
45
await appSettings.save();
46
}
47
+ async function handleTerminalFontSize(e) {
48
+ terminalOptions.fontSize = e.detail.value;
49
+ await appSettings.set("terminal.internal", terminalOptions);
50
+ await appSettings.save();
51
+ }
52
+ async function handleTerminalFontFamily(e) {
53
+ terminalOptions.fontFamily = e.detail.value;
54
+ await appSettings.set("terminal.internal", terminalOptions);
55
+ await appSettings.save();
56
+ }
57
+ async function handleTerminalFontWeight(e) {
58
+ terminalOptions.fontWeight = e.detail.value;
59
+ await appSettings.set("terminal.internal", terminalOptions);
60
+ await appSettings.save();
61
+ }
62
+ async function handleTerminalLineHeight(e) {
63
+ terminalOptions.lineHeight = e.detail.value;
64
+ await appSettings.set("terminal.internal", terminalOptions);
65
+ await appSettings.save();
66
+ }
67
+ async function handleTerminalCursorStyle(e) {
68
+ terminalOptions.cursorStyle = e.detail.selection.name;
69
+ await appSettings.set("terminal.internal", terminalOptions);
70
+ await appSettings.save();
71
+
72
+ }
73
+
74
</script>
75
76
<div class="settings-container" class:hidden>
@@ -71,15 +100,20 @@
100
<div class="settings-category">
101
<div class="heading">Editor</div>
102
<div class="content">
74
- <Select label="Autosave" items={[{id: 0, name: "false"}, {id: 1, name: "true"}]} selected={editorAutosave} on:select={handleSelect}></Select>
75
- <Input _class="settings-input" placeholder="default: 14" value={editorFontSize} extra_small label="Font Size" on:d_input={handleInput} />
76
- <Input _class="settings-input" placeholder="monospace" value={editorFontFamily} medium label="Font Family" on:d_input={handleFamilySelect} />
103
+ <Select label="Autosave" items={[{id: 0, name: "false"}, {id: 1, name: "true"}]} selected={editorAutosave} on:select={handleAutosaveSelect}></Select>
104
+ <Input _class="settings-input" placeholder="default: 14" value={editorFontSize} extra_small label="Font Size" on:d_input={handleEditorFontSize} />
105
+ <Input _class="settings-input" placeholder="monospace" value={editorFontFamily} medium label="Font Family" on:d_input={handleEditorFontFamily} />
106
</div>
107
</div>
108
<div class="settings-category">
109
<div class="heading">Terminal</div>
110
<div class="content">
111
<Select label="Use External Terminal" items={[{id: 0, name: "false"}, {id: 1, name: "true"}]} selected={externalTerminal} on:select={handleTerminal} />
112
+ <Input label="Font Weight" _class="settings-input" placeholder="Cascadia Mono" value={terminalOptions.fontWeight} medium on:d_input={handleTerminalFontWeight} hintText="Values: normal, bold, or 100-900" />
113
+ <Input label="Font Size" _class="settings-input" placeholder="default: 14" value={terminalOptions.fontSize} extra_small on:d_input={handleTerminalFontSize} />
114
+ <Input label="Font Family" _class="settings-input" placeholder="Cascadia Mono" value={terminalOptions.fontFamily} medium on:d_input={handleTerminalFontFamily} />
115
+ <Input label="Line Height" _class="settings-input" placeholder="default: 1.2" value={terminalOptions.lineHeight} medium on:d_input={handleTerminalLineHeight} />
116
+ <Select label="Cursor Style" items={[{id: 0, name: "bar"}, {id: 1, name: "block"}, {id: 2, name: "underline"}]} selected={terminalOptions.cursorStyle} on:select={handleTerminalCursorStyle} />
117
</div>
118
</div>
119
</div>
src/lib/Terminal.svelte
+10
-2
@@ -6,7 +6,6 @@
6
import { invoke } from "@tauri-apps/api";
7
import { get, writable } from "svelte/store";
8
import { workingDir } from "./File";
9
- import { getThemeProperty } from "../config/themehandler";
9
10
let terminalElement: HTMLElement;
11
@@ -28,14 +27,22 @@
27
<script lang="ts" context="module">
28
29
export const termTheme = writable();
30
+export const termOptions = writable();
31
let terminalController = new Terminal({
32
fontFamily: "Cascadia Mono",
33
- fontSize: 14
33
+ fontSize: 14,
34
});
35
36
export function updateTermTheme() {
37
terminalController.options.theme = get(termTheme);
38
}
39
+export function updateTermOptions() {
40
+ const options: any = get(termOptions);
41
+ terminalController.options.fontFamily = options.fontFamily;
42
+ terminalController.options.fontSize = options.fontSize;
43
+ terminalController.options.lineHeight = options.lineHeight;
44
+ terminalController.options.cursorStyle = options.cursorStyle;
45
+}
46
47
let termFit = new FitAddon();
48
export function fitTerminal() {
@@ -59,6 +66,7 @@ function writeToPty(data: string) {
66
67
function initShell() {
68
updateTermTheme();
69
+ updateTermOptions();
70
invoke("async_create_shell", {path: get(workingDir)}).catch((error) => {
71
// on linux it seem to to "Operation not permitted (os error 1)" but it still works because echo $SHELL give /bin/bash
72
console.error("Error creating shell:", error);