@fresh-editor/fresh-editor 0.1.74 → 0.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Release Notes
2
2
 
3
+ ## 0.1.75
4
+
5
+ This is mostly a bugfix release.
6
+
7
+ ### Bug Fixes
8
+
9
+ * **Prompt History**: Generic prompt history system with Up/Down navigation, now available for Go to Line and other prompts.
10
+ * **Session External Files**: Files opened from outside the project directory are now restored in sessions.
11
+ * **Fuzzy Search Exact Match Priority**: Open File dialog now prioritizes exact filename matches over fuzzy matches.
12
+ * **Horizontal Scroll**: Fixed cursor position with horizontal scroll after Open File dialog and pressing Enter on long lines.
13
+ * **Multi-Cursor Bracket Skip**: Fixed bracket skip-over with multiple cursors in bulk edit.
14
+ * **F3 Search**: Fixed F3 to allow searching more after editing and to update positions correctly after buffer modifications.
15
+ * **File Explorer**: Removed plain letter shortcuts causing accidental actions, fixed focus after rename/delete, improved new file command behavior.
16
+ * **Terminal**: Fixed scrollback colors, mouse scroll now exits to scrollback mode, fixed viewport position bugs, persist exit message.
17
+ * **Theme Editor**: Fixed reopening after closing the theme editor, allow editing builtin themes (#696), store builtin themes as json instead of hardcoded inside rust.
18
+ * **LSP Diagnostics**: Made diagnostic cache per-buffer to prevent marker position bugs.
19
+ * **Cursor Visibility**: You can see the letter under the block cursor now! Apply REVERSED style to primary cursor for better visibility.
20
+ * **Open Terminal**: Command now available in all contexts.
21
+ * **Open File Dialog**: When run while a terminal is focused, use CWD instead of the internal backing file directory.
22
+
23
+ ### Internal
24
+
25
+ * Refactored reference highlighting to use overlay system (#694).
26
+ * Built-in themes now loaded from JSON artifacts at build time instead of hardcoded Rust.
27
+ * Removed duplicate dead code from LspTask.
28
+
29
+ ---
30
+
3
31
  ## 0.1.74
4
32
 
5
33
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fresh-editor/fresh-editor",
3
- "version": "0.1.74",
3
+ "version": "0.1.75",
4
4
  "description": "A modern terminal-based text editor with plugin support",
5
5
  "repository": {
6
6
  "type": "git",
@@ -414,6 +414,7 @@ interface EditorAPI {
414
414
  * @returns JSON Schema object
415
415
  */
416
416
  getThemeSchema(): unknown;
417
+ getBuiltinThemes(): unknown;
417
418
  /**
418
419
  * Get the current editor configuration
419
420
  *
@@ -819,6 +820,14 @@ interface EditorAPI {
819
820
  * @returns true if prompt was started successfully
820
821
  */
821
822
  startPromptWithInitial(label: string, prompt_type: string, initial_value: string): boolean;
823
+ /**
824
+ * Delete a theme file by name
825
+ *
826
+ * Only deletes files from the user's themes directory.
827
+ * This is a safe operation that prevents plugins from deleting arbitrary files.
828
+ * @param name - Theme name (without .json extension)
829
+ */
830
+ deleteTheme(name: string): Promise<[]>;
822
831
  /**
823
832
  * Create a composite buffer that displays multiple source buffers
824
833
  *
@@ -1060,10 +1069,10 @@ interface EditorAPI {
1060
1069
  */
1061
1070
  readFile(path: string): Promise<string>;
1062
1071
  /**
1063
- * Write string content to a file, creating or overwriting
1072
+ * Write string content to a NEW file (fails if file exists)
1064
1073
  *
1065
- * Creates parent directories if they don't exist (behavior may vary).
1066
- * Replaces file contents entirely; use readFile + modify + writeFile for edits.
1074
+ * Creates a new file with the given content. Fails if the file already exists
1075
+ * to prevent plugins from accidentally overwriting user data.
1067
1076
  * @param path - Destination path (absolute or relative to cwd)
1068
1077
  * @param content - UTF-8 string to write
1069
1078
  */
@@ -197,7 +197,6 @@ function getThemeSections(): ThemeSection[] {
197
197
  // =============================================================================
198
198
 
199
199
  interface ThemeEditorState {
200
- isOpen: boolean;
201
200
  bufferId: number | null;
202
201
  splitId: number | null;
203
202
  sourceSplitId: number | null;
@@ -228,8 +227,33 @@ interface ThemeEditorState {
228
227
  savedCursorPath: string | null;
229
228
  }
230
229
 
230
+ /**
231
+ * Check if the theme editor is currently open.
232
+ * Uses a stateless approach by checking if the buffer actually exists.
233
+ * This handles cases where the buffer was closed externally (e.g., Ctrl+W).
234
+ */
235
+ function isThemeEditorOpen(): boolean {
236
+ if (state.bufferId === null) {
237
+ return false;
238
+ }
239
+ // Check if the buffer actually exists
240
+ const buffers = editor.listBuffers();
241
+ const exists = buffers.some(b => b.id === state.bufferId);
242
+
243
+ // If buffer doesn't exist, reset our stale state
244
+ if (!exists) {
245
+ editor.debug(`Theme editor buffer ${state.bufferId} no longer exists, resetting state`);
246
+ state.bufferId = null;
247
+ state.splitId = null;
248
+ state.themeData = {};
249
+ state.originalThemeData = {};
250
+ state.hasChanges = false;
251
+ }
252
+
253
+ return exists;
254
+ }
255
+
231
256
  const state: ThemeEditorState = {
232
- isOpen: false,
233
257
  bufferId: null,
234
258
  splitId: null,
235
259
  sourceSplitId: null,
@@ -455,29 +479,27 @@ function findThemesDir(): string {
455
479
  * Load list of available built-in themes
456
480
  */
457
481
  async function loadBuiltinThemes(): Promise<string[]> {
458
- const themesDir = findThemesDir();
459
482
  try {
460
- const entries = editor.readDir(themesDir);
461
- return entries
462
- .filter(e => e.is_file && e.name.endsWith(".json"))
463
- .map(e => e.name.replace(".json", ""));
464
- } catch {
465
- return ["dark", "light", "high-contrast", "dracula", "nord", "solarized-dark"];
483
+ const builtinThemes = editor.getBuiltinThemes();
484
+ return Object.keys(builtinThemes);
485
+ } catch (e) {
486
+ editor.debug(`Failed to load built-in themes list: ${e}`);
487
+ throw e;
466
488
  }
467
489
  }
468
490
 
469
491
  /**
470
- * Load a theme file from built-in themes directory
492
+ * Load a theme file from built-in themes
471
493
  */
472
494
  async function loadThemeFile(name: string): Promise<Record<string, unknown> | null> {
473
- const themesDir = findThemesDir();
474
- const themePath = editor.pathJoin(themesDir, `${name}.json`);
475
-
476
495
  try {
477
- const content = await editor.readFile(themePath);
478
- return JSON.parse(content);
479
- } catch {
480
- editor.debug(`Failed to load theme: ${name}`);
496
+ const builtinThemes = editor.getBuiltinThemes();
497
+ if (name in builtinThemes) {
498
+ return JSON.parse(builtinThemes[name]);
499
+ }
500
+ return null;
501
+ } catch (e) {
502
+ editor.debug(`Failed to load theme data for '${name}': ${e}`);
481
503
  return null;
482
504
  }
483
505
  }
@@ -1401,7 +1423,6 @@ globalThis.onThemeEditorBufferClosed = function(data: {
1401
1423
  }): void {
1402
1424
  if (state.bufferId !== null && data.buffer_id === state.bufferId) {
1403
1425
  // Reset state when our buffer is closed
1404
- state.isOpen = false;
1405
1426
  state.bufferId = null;
1406
1427
  state.splitId = null;
1407
1428
  state.themeData = {};
@@ -1617,7 +1638,9 @@ globalThis.theme_editor_nav_prev_section = function(): void {
1617
1638
  * Open the theme editor - prompts user to select theme first
1618
1639
  */
1619
1640
  globalThis.open_theme_editor = async function(): Promise<void> {
1620
- if (state.isOpen) {
1641
+ if (isThemeEditorOpen()) {
1642
+ // Focus the existing theme editor buffer
1643
+ editor.focusBuffer(state.bufferId!);
1621
1644
  editor.setStatus(editor.t("status.already_open"));
1622
1645
  return;
1623
1646
  }
@@ -1690,7 +1713,6 @@ async function doOpenThemeEditor(): Promise<void> {
1690
1713
  });
1691
1714
 
1692
1715
  if (bufferId !== null) {
1693
- state.isOpen = true;
1694
1716
  state.bufferId = bufferId;
1695
1717
  state.splitId = null;
1696
1718
 
@@ -1705,7 +1727,7 @@ async function doOpenThemeEditor(): Promise<void> {
1705
1727
  * Close the theme editor
1706
1728
  */
1707
1729
  globalThis.theme_editor_close = function(): void {
1708
- if (!state.isOpen) return;
1730
+ if (!isThemeEditorOpen()) return;
1709
1731
 
1710
1732
  if (state.hasChanges) {
1711
1733
  // Show confirmation prompt before closing with unsaved changes
@@ -1731,7 +1753,6 @@ function doCloseEditor(): void {
1731
1753
  }
1732
1754
 
1733
1755
  // Reset state
1734
- state.isOpen = false;
1735
1756
  state.bufferId = null;
1736
1757
  state.splitId = null;
1737
1758
  state.themeData = {};
@@ -1980,10 +2001,10 @@ globalThis.onThemeDeletePromptConfirmed = async function(args: {
1980
2001
 
1981
2002
  const value = args.input.trim();
1982
2003
  if (value === "delete" || value === editor.t("prompt.delete_yes")) {
1983
- if (state.themePath) {
2004
+ if (state.themeName) {
1984
2005
  try {
1985
- // Delete the theme file
1986
- await editor.deleteFile(state.themePath);
2006
+ // Delete the theme file by name
2007
+ await editor.deleteTheme(state.themeName);
1987
2008
  const deletedName = state.themeName;
1988
2009
 
1989
2010
  // Reset to default theme
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "dark",
3
+ "editor": {
4
+ "bg": [30, 30, 30],
5
+ "fg": [212, 212, 212],
6
+ "cursor": [255, 255, 255],
7
+ "inactive_cursor": [100, 100, 100],
8
+ "selection_bg": [38, 79, 120],
9
+ "current_line_bg": [40, 40, 40],
10
+ "line_number_fg": [100, 100, 100],
11
+ "line_number_bg": [30, 30, 30],
12
+ "diff_add_bg": [35, 60, 35],
13
+ "diff_remove_bg": [70, 35, 35],
14
+ "diff_modify_bg": [40, 38, 30]
15
+ },
16
+ "ui": {
17
+ "tab_active_fg": "Yellow",
18
+ "tab_active_bg": "Blue",
19
+ "tab_inactive_fg": "White",
20
+ "tab_inactive_bg": "DarkGray",
21
+ "tab_separator_bg": [45, 45, 48],
22
+ "tab_close_hover_fg": [255, 100, 100],
23
+ "tab_hover_bg": [70, 70, 75],
24
+ "menu_bg": [60, 60, 65],
25
+ "menu_fg": [220, 220, 220],
26
+ "menu_active_bg": [60, 60, 60],
27
+ "menu_active_fg": [255, 255, 255],
28
+ "menu_dropdown_bg": [50, 50, 50],
29
+ "menu_dropdown_fg": [220, 220, 220],
30
+ "menu_highlight_bg": [70, 130, 180],
31
+ "menu_highlight_fg": [255, 255, 255],
32
+ "menu_border_fg": [100, 100, 100],
33
+ "menu_separator_fg": [80, 80, 80],
34
+ "menu_hover_bg": [55, 55, 55],
35
+ "menu_hover_fg": [255, 255, 255],
36
+ "menu_disabled_fg": [100, 100, 100],
37
+ "menu_disabled_bg": [50, 50, 50],
38
+ "status_bar_fg": "White",
39
+ "status_bar_bg": [30, 30, 30],
40
+ "prompt_fg": "White",
41
+ "prompt_bg": [20, 20, 20],
42
+ "prompt_selection_fg": "White",
43
+ "prompt_selection_bg": [58, 79, 120],
44
+ "popup_border_fg": "Gray",
45
+ "popup_bg": [30, 30, 30],
46
+ "popup_selection_bg": [58, 79, 120],
47
+ "popup_text_fg": "White",
48
+ "suggestion_bg": [30, 30, 30],
49
+ "suggestion_selected_bg": [58, 79, 120],
50
+ "help_bg": "Black",
51
+ "help_fg": "White",
52
+ "help_key_fg": "Cyan",
53
+ "help_separator_fg": "DarkGray",
54
+ "help_indicator_fg": "Red",
55
+ "help_indicator_bg": "Black",
56
+ "inline_code_bg": [60, 60, 60],
57
+ "split_separator_fg": [100, 100, 100],
58
+ "split_separator_hover_fg": [100, 149, 237],
59
+ "scrollbar_track_fg": "DarkGray",
60
+ "scrollbar_thumb_fg": "Gray",
61
+ "scrollbar_track_hover_fg": "Gray",
62
+ "scrollbar_thumb_hover_fg": "White",
63
+ "compose_margin_bg": [18, 18, 18],
64
+ "semantic_highlight_bg": [60, 60, 80],
65
+ "terminal_bg": "Default",
66
+ "terminal_fg": "Default",
67
+ "status_warning_indicator_bg": [181, 137, 0],
68
+ "status_warning_indicator_fg": [0, 0, 0],
69
+ "status_error_indicator_bg": [220, 50, 47],
70
+ "status_error_indicator_fg": [255, 255, 255],
71
+ "status_warning_indicator_hover_bg": [211, 167, 30],
72
+ "status_warning_indicator_hover_fg": [0, 0, 0],
73
+ "status_error_indicator_hover_bg": [250, 80, 77],
74
+ "status_error_indicator_hover_fg": [255, 255, 255],
75
+ "tab_drop_zone_bg": [70, 130, 180],
76
+ "tab_drop_zone_border": [100, 149, 237]
77
+ },
78
+ "search": {
79
+ "match_bg": [100, 100, 20],
80
+ "match_fg": [255, 255, 255]
81
+ },
82
+ "diagnostic": {
83
+ "error_fg": "Red",
84
+ "error_bg": [60, 20, 20],
85
+ "warning_fg": "Yellow",
86
+ "warning_bg": [60, 50, 0],
87
+ "info_fg": "Blue",
88
+ "info_bg": [0, 30, 60],
89
+ "hint_fg": "Gray",
90
+ "hint_bg": [30, 30, 30]
91
+ },
92
+ "syntax": {
93
+ "keyword": [86, 156, 214],
94
+ "string": [206, 145, 120],
95
+ "comment": [106, 153, 85],
96
+ "function": [220, 220, 170],
97
+ "type": [78, 201, 176],
98
+ "variable": [156, 220, 254],
99
+ "constant": [79, 193, 255],
100
+ "operator": [212, 212, 212]
101
+ }
102
+ }
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "high-contrast",
3
+ "editor": {
4
+ "bg": "Black",
5
+ "fg": "White",
6
+ "cursor": "White",
7
+ "inactive_cursor": "DarkGray",
8
+ "selection_bg": [0, 100, 200],
9
+ "current_line_bg": [20, 20, 20],
10
+ "line_number_fg": [140, 140, 140],
11
+ "line_number_bg": "Black",
12
+ "diff_add_bg": [0, 80, 0],
13
+ "diff_remove_bg": [100, 0, 0],
14
+ "diff_modify_bg": [25, 22, 0]
15
+ },
16
+ "ui": {
17
+ "tab_active_fg": "Black",
18
+ "tab_active_bg": "Yellow",
19
+ "tab_inactive_fg": "White",
20
+ "tab_inactive_bg": "Black",
21
+ "tab_separator_bg": [30, 30, 35],
22
+ "tab_close_hover_fg": [249, 38, 114],
23
+ "tab_hover_bg": [50, 50, 55],
24
+ "menu_bg": [50, 50, 55],
25
+ "menu_fg": "White",
26
+ "menu_active_bg": "Yellow",
27
+ "menu_active_fg": "Black",
28
+ "menu_dropdown_bg": [20, 20, 20],
29
+ "menu_dropdown_fg": "White",
30
+ "menu_highlight_bg": [0, 100, 200],
31
+ "menu_highlight_fg": "White",
32
+ "menu_border_fg": "Yellow",
33
+ "menu_separator_fg": "White",
34
+ "menu_hover_bg": [50, 50, 50],
35
+ "menu_hover_fg": "Yellow",
36
+ "menu_disabled_fg": "DarkGray",
37
+ "menu_disabled_bg": [20, 20, 20],
38
+ "status_bar_fg": "White",
39
+ "status_bar_bg": [20, 20, 20],
40
+ "prompt_fg": "White",
41
+ "prompt_bg": [10, 10, 10],
42
+ "prompt_selection_fg": "White",
43
+ "prompt_selection_bg": [0, 100, 200],
44
+ "popup_border_fg": "LightCyan",
45
+ "popup_bg": "Black",
46
+ "popup_selection_bg": [0, 100, 200],
47
+ "popup_text_fg": "White",
48
+ "suggestion_bg": "Black",
49
+ "suggestion_selected_bg": [0, 100, 200],
50
+ "help_bg": "Black",
51
+ "help_fg": "White",
52
+ "help_key_fg": "LightCyan",
53
+ "help_separator_fg": "White",
54
+ "help_indicator_fg": "Red",
55
+ "help_indicator_bg": "Black",
56
+ "inline_code_bg": [40, 40, 40],
57
+ "split_separator_fg": [140, 140, 140],
58
+ "split_separator_hover_fg": "Yellow",
59
+ "scrollbar_track_fg": "White",
60
+ "scrollbar_thumb_fg": "Yellow",
61
+ "scrollbar_track_hover_fg": "Yellow",
62
+ "scrollbar_thumb_hover_fg": "Cyan",
63
+ "compose_margin_bg": [10, 10, 10],
64
+ "semantic_highlight_bg": [0, 60, 100],
65
+ "terminal_bg": "Default",
66
+ "terminal_fg": "Default",
67
+ "status_warning_indicator_bg": "Yellow",
68
+ "status_warning_indicator_fg": "Black",
69
+ "status_error_indicator_bg": "Red",
70
+ "status_error_indicator_fg": "White",
71
+ "status_warning_indicator_hover_bg": "LightYellow",
72
+ "status_warning_indicator_hover_fg": "Black",
73
+ "status_error_indicator_hover_bg": "LightRed",
74
+ "status_error_indicator_hover_fg": "White",
75
+ "tab_drop_zone_bg": [0, 100, 200],
76
+ "tab_drop_zone_border": "Yellow"
77
+ },
78
+ "search": {
79
+ "match_bg": "Yellow",
80
+ "match_fg": "Black"
81
+ },
82
+ "diagnostic": {
83
+ "error_fg": "Red",
84
+ "error_bg": [100, 0, 0],
85
+ "warning_fg": "Yellow",
86
+ "warning_bg": [100, 100, 0],
87
+ "info_fg": "Cyan",
88
+ "info_bg": [0, 50, 100],
89
+ "hint_fg": "White",
90
+ "hint_bg": [50, 50, 50]
91
+ },
92
+ "syntax": {
93
+ "keyword": "Cyan",
94
+ "string": "Green",
95
+ "comment": "Gray",
96
+ "function": "Yellow",
97
+ "type": "Magenta",
98
+ "variable": "White",
99
+ "constant": "LightBlue",
100
+ "operator": "White"
101
+ }
102
+ }
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "light",
3
+ "editor": {
4
+ "bg": [255, 255, 255],
5
+ "fg": [0, 0, 0],
6
+ "cursor": [0, 0, 0],
7
+ "inactive_cursor": [180, 180, 180],
8
+ "selection_bg": [173, 214, 255],
9
+ "current_line_bg": [245, 245, 245],
10
+ "line_number_fg": [140, 140, 140],
11
+ "line_number_bg": [255, 255, 255],
12
+ "diff_add_bg": [200, 255, 200],
13
+ "diff_remove_bg": [255, 200, 200],
14
+ "diff_modify_bg": [255, 252, 240]
15
+ },
16
+ "ui": {
17
+ "tab_active_fg": [40, 40, 40],
18
+ "tab_active_bg": [255, 255, 255],
19
+ "tab_inactive_fg": [100, 100, 100],
20
+ "tab_inactive_bg": [230, 230, 230],
21
+ "tab_separator_bg": [200, 200, 200],
22
+ "tab_close_hover_fg": [220, 50, 50],
23
+ "tab_hover_bg": [210, 210, 210],
24
+ "menu_bg": [245, 245, 245],
25
+ "menu_fg": [30, 30, 30],
26
+ "menu_active_bg": [225, 225, 225],
27
+ "menu_active_fg": [0, 0, 0],
28
+ "menu_dropdown_bg": [248, 248, 248],
29
+ "menu_dropdown_fg": [30, 30, 30],
30
+ "menu_highlight_bg": [209, 226, 243],
31
+ "menu_highlight_fg": [0, 0, 0],
32
+ "menu_border_fg": [180, 180, 180],
33
+ "menu_separator_fg": [210, 210, 210],
34
+ "menu_hover_bg": [230, 235, 240],
35
+ "menu_hover_fg": [0, 0, 0],
36
+ "menu_disabled_fg": [160, 160, 160],
37
+ "menu_disabled_bg": [248, 248, 248],
38
+ "status_bar_fg": "Black",
39
+ "status_bar_bg": [220, 220, 220],
40
+ "prompt_fg": "Black",
41
+ "prompt_bg": [230, 240, 250],
42
+ "prompt_selection_fg": "Black",
43
+ "prompt_selection_bg": [173, 214, 255],
44
+ "popup_border_fg": [180, 180, 180],
45
+ "popup_bg": [232, 238, 245],
46
+ "popup_selection_bg": [209, 226, 243],
47
+ "popup_text_fg": [30, 30, 30],
48
+ "suggestion_bg": [232, 238, 245],
49
+ "suggestion_selected_bg": [209, 226, 243],
50
+ "help_bg": "White",
51
+ "help_fg": "Black",
52
+ "help_key_fg": "Blue",
53
+ "help_separator_fg": "Gray",
54
+ "help_indicator_fg": "Red",
55
+ "help_indicator_bg": "White",
56
+ "inline_code_bg": [230, 230, 235],
57
+ "split_separator_fg": [140, 140, 140],
58
+ "split_separator_hover_fg": [70, 130, 180],
59
+ "scrollbar_track_fg": [220, 220, 220],
60
+ "scrollbar_thumb_fg": [180, 180, 180],
61
+ "scrollbar_track_hover_fg": [200, 200, 200],
62
+ "scrollbar_thumb_hover_fg": [140, 140, 140],
63
+ "compose_margin_bg": [220, 220, 225],
64
+ "semantic_highlight_bg": [220, 230, 240],
65
+ "terminal_bg": "Default",
66
+ "terminal_fg": "Default",
67
+ "status_warning_indicator_bg": [202, 145, 0],
68
+ "status_warning_indicator_fg": [0, 0, 0],
69
+ "status_error_indicator_bg": [200, 40, 40],
70
+ "status_error_indicator_fg": [255, 255, 255],
71
+ "status_warning_indicator_hover_bg": [232, 175, 30],
72
+ "status_warning_indicator_hover_fg": [0, 0, 0],
73
+ "status_error_indicator_hover_bg": [230, 70, 70],
74
+ "status_error_indicator_hover_fg": [255, 255, 255],
75
+ "tab_drop_zone_bg": [173, 214, 255],
76
+ "tab_drop_zone_border": [70, 130, 180]
77
+ },
78
+ "search": {
79
+ "match_bg": [255, 255, 150],
80
+ "match_fg": [0, 0, 0]
81
+ },
82
+ "diagnostic": {
83
+ "error_fg": "Red",
84
+ "error_bg": [255, 220, 220],
85
+ "warning_fg": [128, 128, 0],
86
+ "warning_bg": [255, 255, 200],
87
+ "info_fg": "Blue",
88
+ "info_bg": [220, 240, 255],
89
+ "hint_fg": "DarkGray",
90
+ "hint_bg": [240, 240, 240]
91
+ },
92
+ "syntax": {
93
+ "keyword": [175, 0, 219],
94
+ "string": [163, 21, 21],
95
+ "comment": [0, 128, 0],
96
+ "function": [121, 94, 38],
97
+ "type": [0, 128, 128],
98
+ "variable": [0, 16, 128],
99
+ "constant": [0, 112, 193],
100
+ "operator": [0, 0, 0]
101
+ }
102
+ }
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "nostalgia",
3
+ "editor": {
4
+ "bg": [0, 0, 170],
5
+ "fg": [255, 255, 85],
6
+ "cursor": [255, 255, 255],
7
+ "inactive_cursor": [170, 170, 170],
8
+ "selection_bg": [170, 170, 170],
9
+ "current_line_bg": [0, 0, 128],
10
+ "line_number_fg": [85, 255, 255],
11
+ "line_number_bg": [0, 0, 170],
12
+ "diff_add_bg": [0, 100, 0],
13
+ "diff_remove_bg": [170, 0, 0],
14
+ "diff_modify_bg": [20, 20, 140]
15
+ },
16
+ "ui": {
17
+ "tab_active_fg": [0, 0, 0],
18
+ "tab_active_bg": [170, 170, 170],
19
+ "tab_inactive_fg": [255, 255, 85],
20
+ "tab_inactive_bg": [0, 0, 128],
21
+ "tab_separator_bg": [0, 0, 170],
22
+ "tab_close_hover_fg": [255, 85, 85],
23
+ "tab_hover_bg": [0, 0, 200],
24
+ "menu_bg": [170, 170, 170],
25
+ "menu_fg": [0, 0, 0],
26
+ "menu_active_bg": [0, 170, 0],
27
+ "menu_active_fg": [255, 255, 255],
28
+ "menu_dropdown_bg": [170, 170, 170],
29
+ "menu_dropdown_fg": [0, 0, 0],
30
+ "menu_highlight_bg": [0, 170, 0],
31
+ "menu_highlight_fg": [255, 255, 255],
32
+ "menu_border_fg": [0, 0, 0],
33
+ "menu_separator_fg": [85, 85, 85],
34
+ "menu_hover_bg": [0, 170, 0],
35
+ "menu_hover_fg": [255, 255, 255],
36
+ "menu_disabled_fg": [85, 85, 85],
37
+ "menu_disabled_bg": [170, 170, 170],
38
+ "status_bar_fg": [0, 0, 0],
39
+ "status_bar_bg": [0, 170, 170],
40
+ "prompt_fg": [255, 255, 85],
41
+ "prompt_bg": [0, 0, 170],
42
+ "prompt_selection_fg": [0, 0, 0],
43
+ "prompt_selection_bg": [170, 170, 170],
44
+ "popup_border_fg": [255, 255, 255],
45
+ "popup_bg": [0, 0, 170],
46
+ "popup_selection_bg": [0, 170, 0],
47
+ "popup_text_fg": [255, 255, 85],
48
+ "suggestion_bg": [0, 0, 170],
49
+ "suggestion_selected_bg": [0, 170, 0],
50
+ "help_bg": [0, 0, 170],
51
+ "help_fg": [255, 255, 85],
52
+ "help_key_fg": [85, 255, 255],
53
+ "help_separator_fg": [170, 170, 170],
54
+ "help_indicator_fg": [255, 85, 85],
55
+ "help_indicator_bg": [0, 0, 170],
56
+ "inline_code_bg": [0, 0, 85],
57
+ "split_separator_fg": [85, 255, 255],
58
+ "split_separator_hover_fg": [255, 255, 255],
59
+ "scrollbar_track_fg": [0, 0, 128],
60
+ "scrollbar_thumb_fg": [170, 170, 170],
61
+ "scrollbar_track_hover_fg": [0, 0, 128],
62
+ "scrollbar_thumb_hover_fg": [255, 255, 255],
63
+ "compose_margin_bg": [0, 0, 128],
64
+ "semantic_highlight_bg": [0, 85, 170],
65
+ "terminal_bg": [0, 0, 170],
66
+ "terminal_fg": [255, 255, 85],
67
+ "status_warning_indicator_bg": [170, 85, 0],
68
+ "status_warning_indicator_fg": [255, 255, 255],
69
+ "status_error_indicator_bg": [170, 0, 0],
70
+ "status_error_indicator_fg": [255, 255, 255],
71
+ "status_warning_indicator_hover_bg": [200, 115, 30],
72
+ "status_warning_indicator_hover_fg": [255, 255, 255],
73
+ "status_error_indicator_hover_bg": [200, 30, 30],
74
+ "status_error_indicator_hover_fg": [255, 255, 255],
75
+ "tab_drop_zone_bg": [0, 170, 170],
76
+ "tab_drop_zone_border": [255, 255, 255]
77
+ },
78
+ "search": {
79
+ "match_bg": [170, 85, 0],
80
+ "match_fg": [255, 255, 255]
81
+ },
82
+ "diagnostic": {
83
+ "error_fg": [255, 85, 85],
84
+ "error_bg": [128, 0, 0],
85
+ "warning_fg": [255, 255, 85],
86
+ "warning_bg": [128, 128, 0],
87
+ "info_fg": [85, 255, 255],
88
+ "info_bg": [0, 85, 128],
89
+ "hint_fg": [170, 170, 170],
90
+ "hint_bg": [0, 0, 128]
91
+ },
92
+ "syntax": {
93
+ "keyword": [255, 255, 255],
94
+ "string": [0, 255, 255],
95
+ "comment": [128, 128, 128],
96
+ "function": [255, 255, 0],
97
+ "type": [0, 255, 0],
98
+ "variable": [255, 255, 85],
99
+ "constant": [255, 0, 255],
100
+ "operator": [170, 170, 170]
101
+ }
102
+ }