From fec837cd8a26bdd4ce48f9d6b02ae4844b5bff6c Mon Sep 17 00:00:00 2001 From: Fred Sauer Date: Sat, 28 Mar 2026 16:49:56 -0700 Subject: [PATCH 1/5] Update settings descriptions, consistent file order --- src/ide/settings.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ide/settings.ts b/src/ide/settings.ts index 7fede98c..fa736f97 100644 --- a/src/ide/settings.ts +++ b/src/ide/settings.ts @@ -8,12 +8,12 @@ import { insertTabKeymap, smartIndentKeymap } from "./views/tabs"; declare var bootbox; declare var $: JQueryStatic; +export const tabSizeCompartment = new Compartment(); +export const tabsToSpacesCompartment = new Compartment(); export const highlightSpecialCharsCompartment = new Compartment(); export const highlightWhitespaceCompartment = new Compartment(); export const highlightTrailingWhitespaceCompartment = new Compartment(); -export const tabSizeCompartment = new Compartment(); export const closeBracketsCompartment = new Compartment(); -export const tabsToSpacesCompartment = new Compartment(); export const debugHighlightTagsCompartment = new Compartment(); export interface EditorSettings { @@ -94,12 +94,12 @@ export function openSettings() {
-
-
+
+

8bitworkshop IDE internal settings
-
+
`, buttons: { cancel: { From 103a0a683ab9578597f61f84fd12a97f77615bf9 Mon Sep 17 00:00:00 2001 From: Fred Sauer Date: Sat, 28 Mar 2026 16:50:14 -0700 Subject: [PATCH 2/5] Implement show line numbers setting Defaults to off on mobile devices --- src/ide/settings.ts | 9 ++++++++- src/ide/views/editors.ts | 4 ---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/ide/settings.ts b/src/ide/settings.ts index fa736f97..46dd5f4d 100644 --- a/src/ide/settings.ts +++ b/src/ide/settings.ts @@ -1,7 +1,8 @@ import { closeBrackets, deleteBracketPair } from "@codemirror/autocomplete"; import { indentUnit } from "@codemirror/language"; import { Compartment, EditorState, Extension } from "@codemirror/state"; -import { EditorView, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, keymap } from "@codemirror/view"; +import { EditorView, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, keymap, lineNumbers } from "@codemirror/view"; +import { isMobileDevice } from "./views/baseviews"; import { debugHighlightTagsTooltip } from "./views/debug"; import { insertTabKeymap, smartIndentKeymap } from "./views/tabs"; @@ -10,6 +11,7 @@ declare var $: JQueryStatic; export const tabSizeCompartment = new Compartment(); export const tabsToSpacesCompartment = new Compartment(); +export const showLineNumbersCompartment = new Compartment(); export const highlightSpecialCharsCompartment = new Compartment(); export const highlightWhitespaceCompartment = new Compartment(); export const highlightTrailingWhitespaceCompartment = new Compartment(); @@ -19,6 +21,7 @@ export const debugHighlightTagsCompartment = new Compartment(); export interface EditorSettings { tabSize: number; tabsToSpaces: boolean; + showLineNumbers: boolean; highlightSpecialChars: boolean; highlightWhitespace: boolean; highlightTrailingWhitespace: boolean; @@ -31,6 +34,7 @@ const SETTINGS_KEY = "8bitworkshop/editorSettings"; const defaultSettings: EditorSettings = { tabSize: 8, tabsToSpaces: true, + showLineNumbers: !isMobileDevice, highlightSpecialChars: false, highlightWhitespace: false, highlightTrailingWhitespace: false, @@ -55,6 +59,7 @@ export function saveSettings(settings: EditorSettings) { const compartmentValues: [Compartment, (s: EditorSettings) => Extension][] = [ [tabSizeCompartment, s => [EditorState.tabSize.of(s.tabSize), indentUnit.of(" ".repeat(s.tabSize))]], [tabsToSpacesCompartment, s => keymap.of(s.tabsToSpaces ? smartIndentKeymap : insertTabKeymap)], + [showLineNumbersCompartment, s => s.showLineNumbers ? lineNumbers() : []], [highlightSpecialCharsCompartment, s => s.highlightSpecialChars ? highlightSpecialChars() : []], [highlightWhitespaceCompartment, s => s.highlightWhitespace ? highlightWhitespace() : []], [highlightTrailingWhitespaceCompartment, s => s.highlightTrailingWhitespace ? highlightTrailingWhitespace() : []], @@ -93,6 +98,7 @@ export function openSettings() {
Editor preferences
+
@@ -112,6 +118,7 @@ export function openSettings() { callback: () => { settings.tabSize = parseInt($('#setting_tabSize').val() as string) || 8; settings.tabsToSpaces = $('#setting_tabsToSpaces').is(':checked'); + settings.showLineNumbers = $('#setting_showLineNumbers').is(':checked'); settings.highlightSpecialChars = $('#setting_highlightSpecialChars').is(':checked'); settings.highlightWhitespace = $('#setting_highlightWhitespace').is(':checked'); settings.highlightTrailingWhitespace = $('#setting_highlightTrailingWhitespace').is(':checked'); diff --git a/src/ide/views/editors.ts b/src/ide/views/editors.ts index cecd5394..abeb292a 100644 --- a/src/ide/views/editors.ts +++ b/src/ide/views/editors.ts @@ -96,9 +96,7 @@ export class SourceEditor implements ProjectView { var isAsm = isAsmOverride || modedef.isAsm; var lineWrap = !!modedef.lineWrap; var theme = modedef.theme || MODEDEFS.default.theme; - var lineNums = !isAsm && !modedef.noLineNumbers && !isMobileDevice; if (qs['embed']) { - lineNums = false; // no line numbers while embedded isAsm = false; // no opcode bytes either } const minimalGutters = modedef.noGutters || isMobileDevice; @@ -166,8 +164,6 @@ export class SourceEditor implements ProjectView { ]), keymap.of(defaultKeymap), - lineNums ? lineNumbers() : [], - // Undo history. history(), keymap.of(historyKeymap), From 4b6086b9af5a18543461db1666be699ff8ce2af9 Mon Sep 17 00:00:00 2001 From: Fred Sauer Date: Sat, 28 Mar 2026 17:02:21 -0700 Subject: [PATCH 3/5] DefaulthighlightSpecialChars defaults to true --- src/ide/settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ide/settings.ts b/src/ide/settings.ts index 46dd5f4d..2c2f1516 100644 --- a/src/ide/settings.ts +++ b/src/ide/settings.ts @@ -35,7 +35,7 @@ const defaultSettings: EditorSettings = { tabSize: 8, tabsToSpaces: true, showLineNumbers: !isMobileDevice, - highlightSpecialChars: false, + highlightSpecialChars: true, highlightWhitespace: false, highlightTrailingWhitespace: false, closeBrackets: false, From 3e8afcb9bea0c61464e5083bbebd5aacff50e18d Mon Sep 17 00:00:00 2001 From: Fred Sauer Date: Sat, 28 Mar 2026 17:09:42 -0700 Subject: [PATCH 4/5] Decrease show whitespace alpha for less distraction --- src/themes/mbo.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/themes/mbo.ts b/src/themes/mbo.ts index 1df863da..7ff5e72e 100644 --- a/src/themes/mbo.ts +++ b/src/themes/mbo.ts @@ -37,10 +37,10 @@ export const mboTheme = EditorView.theme({ color: "#33ff33 !important" }, ".cm-highlightSpace": { - backgroundImage: "radial-gradient(circle at 50% 55%, #aaa5 11%, transparent 5%)" + backgroundImage: "radial-gradient(circle at 50% 55%, #aaaaaa45 11%, transparent 5%)" }, ".cm-highlightTab": { - backgroundImage: `url('data:image/svg+xml,')`, + backgroundImage: `url('data:image/svg+xml,')`, backgroundPosition: "left 50%" }, }, { dark: true }); From bb2b767e9fee12548404be06103cac717c204545 Mon Sep 17 00:00:00 2001 From: Fred Sauer Date: Sat, 28 Mar 2026 18:29:15 -0700 Subject: [PATCH 5/5] Settings dialog auto focus tab size, save with ENTER --- src/ide/settings.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ide/settings.ts b/src/ide/settings.ts index 2c2f1516..78050856 100644 --- a/src/ide/settings.ts +++ b/src/ide/settings.ts @@ -91,7 +91,7 @@ export function applySettingsToAll(settings: EditorSettings) { export function openSettings() { var settings = loadSettings(); - bootbox.dialog({ + var dialog = bootbox.dialog({ onEscape: true, title: "Settings", message: `
@@ -130,4 +130,13 @@ export function openSettings() { } } }); + dialog.on('shown.bs.modal', () => { + $('#setting_tabSize').focus().select(); + }); + dialog.on('keydown', (e) => { + if (e.key === 'Enter') { + e.preventDefault(); + dialog.find('.btn-primary').trigger('click'); + } + }); }