Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: allows adjustable tab size in file editor #1354

6 changes: 6 additions & 0 deletions src/components/inputs/Codemirror.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { gcode } from '@/plugins/StreamParserGcode'
import { indentWithTab } from '@codemirror/commands'
import { json } from '@codemirror/lang-json'
import { css } from '@codemirror/lang-css'
import { indentUnit } from '@codemirror/language'

@Component
export default class Codemirror extends Mixins(BaseMixin) {
Expand Down Expand Up @@ -83,6 +84,7 @@ export default class Codemirror extends Mixins(BaseMixin) {
const extensions = [
basicSetup,
mainsailTheme,
indentUnit.of(' '.repeat(this.getTabSize())),
keymap.of([indentWithTab]),
EditorView.updateListener.of((update) => {
this.content = update.state?.doc.toString()
Expand All @@ -103,5 +105,9 @@ export default class Codemirror extends Mixins(BaseMixin) {
visibilityChanged(isVisible: boolean) {
if (isVisible) this.cminstance?.focus()
}

getTabSize() {
return this.$store.state.gui.editor.tabSize || 2
}
}
</script>
25 changes: 25 additions & 0 deletions src/components/settings/SettingsEditorTab.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@
:dynamic-slot-width="true">
<v-switch v-model="confirmUnsavedChanges" hide-details class="mt-0"></v-switch>
</settings-row>

<v-divider class="my-2"></v-divider>
<settings-row
:title="$t('Settings.EditorTab.TabSize')"
:sub-title="$t('Settings.EditorTab.TabSizeDescription')"
:dynamic-slot-width="true">
<v-select v-model="tabSize" :items="tabSizes" hide-details outlined dense attached></v-select>
</settings-row>

<v-divider class="my-2"></v-divider>
<settings-row
:title="$t('Settings.EditorTab.KlipperRestartMethod')"
Expand Down Expand Up @@ -67,6 +76,14 @@ export default class SettingsEditorTab extends Mixins(BaseMixin) {
},
]

get tabSizes() {
const spaces = [2, 4, 6, 8]
return spaces.map((space) => ({
text: this.$t('Settings.EditorTab.Spaces', { count: space }),
value: space,
}))
}

get escToClose() {
return this.$store.state.gui.editor.escToClose
}
Expand All @@ -83,6 +100,14 @@ export default class SettingsEditorTab extends Mixins(BaseMixin) {
this.$store.dispatch('gui/saveSetting', { name: 'editor.confirmUnsavedChanges', value: newVal })
}

get tabSize() {
return this.$store.state.gui.editor.tabSize || 2
}

set tabSize(newVal) {
this.$store.dispatch('gui/saveSetting', { name: 'editor.tabSize', value: newVal })
}

get klipperRestartMethod() {
return this.$store.state.gui.editor.klipperRestartMethod
}
Expand Down
5 changes: 4 additions & 1 deletion src/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -797,7 +797,10 @@
"MoonrakerRestartInstance": "Moonraker Neustartinstanz",
"MoonrakerRestartInstanceDescription": "Wähle aus, welche Moonrakerinstanz neu gestartet werden soll wenn 'Speichern & Neustarten' im Editor geklickt wird.",
"UseEscToClose": "ESC drücken um Editor zu schließen",
"UseEscToCloseDescription": "Erlaubt es den Editor mit ESC zu schließen."
"UseEscToCloseDescription": "Erlaubt es den Editor mit ESC zu schließen.",
"TabSize": "TAB Größe",
"TabSizeDescription": "Legt fest, um wie viele Leerzeichen für TAB eingerückt werden sollen",
"Spaces": "Leerzeichen: {count}"
},
"GCodeViewerTab": {
"BackgroundColor": "Hintergrundfarbe",
Expand Down
5 changes: 4 additions & 1 deletion src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,10 @@
"MoonrakerRestartInstance": "Moonraker restart instance",
"MoonrakerRestartInstanceDescription": "Select which Moonraker service will restart on 'Save & Restart' when editing Moonraker config files.",
"UseEscToClose": "Use ESC to close editor",
"UseEscToCloseDescription": "Allows the ESC key to close the editor"
"UseEscToCloseDescription": "Allows the ESC key to close the editor",
"TabSize": "TAB Size",
"TabSizeDescription": "Adjusts how many spaces should be indented for TAB",
"Spaces": "Spaces: {count}"
},
"GCodeViewerTab": {
"BackgroundColor": "Background Color",
Expand Down
5 changes: 4 additions & 1 deletion src/locales/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -725,7 +725,10 @@
"MoonrakerRestartInstance": "Moonraker példány Újraindítása",
"MoonrakerRestartInstanceDescription": "Válaszd ki melyik Moonraker szolgáltatást indítsuk újra a 'Ment és Újraindít' esetén, amikor a Moonraker konfig fájlait szerkeszted.",
"UseEscToClose": "Kilépéshez nyomd meg az ESC gombot",
"UseEscToCloseDescription": "Az ESC gomb megnyomása bezárja a szerkesztőt"
"UseEscToCloseDescription": "Az ESC gomb megnyomása bezárja a szerkesztőt",
"TabSize": "TAB Méret",
"TabSizeDescription": "Beállítja, hogy hány szóközzel legyen behúzva a TAB-oknál",
"Spaces": "Szóközök: {count}"
},
"GCodeViewerTab": {
"BackgroundColor": "Háttérszín",
Expand Down
5 changes: 4 additions & 1 deletion src/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -726,7 +726,10 @@
"MoonrakerRestartInstance": "Инстанция перезапуска Moonraker",
"MoonrakerRestartInstanceDescription": "Выберите, какая служба Moonraker будет перезапускаться при 'Save & Restart' при редактировании файлов конфигурации Moonraker.",
"UseEscToClose": "Нажмите ESC, чтобы закрыть редактор",
"UseEscToCloseDescription": "Позволяет закрыть редактор с помощью ESC."
"UseEscToCloseDescription": "Позволяет закрыть редактор с помощью ESC.",
"TabSize": "Размер TAB",
"TabSizeDescription": "Регулирует, сколько пробелов должно быть отступом для TAB",
"Spaces": "Пробе́лов: {count}"
},
"GCodeViewerTab": {
"BackgroundColor": "Цвет фона",
Expand Down
1 change: 1 addition & 0 deletions src/store/gui/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ export const getDefaultState = (): GuiState => {
escToClose: true,
confirmUnsavedChanges: true,
klipperRestartMethod: 'FIRMWARE_RESTART',
tabSize: 2,
moonrakerRestartInstance: null,
},
gcodeViewer: {
Expand Down
1 change: 1 addition & 0 deletions src/store/gui/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ export interface GuiState {
escToClose: boolean
confirmUnsavedChanges: boolean
klipperRestartMethod: 'FIRMWARE_RESTART' | 'RESTART'
tabSize: number
moonrakerRestartInstance: string | null
}
gcodeViewer: {
Expand Down