@fresh-editor/fresh-editor 0.1.88 → 0.1.93

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,77 @@
1
1
  # Release Notes
2
2
 
3
+ ## 0.1.93
4
+
5
+ ### Experimental
6
+
7
+ * **SSH Remote Editing**: Edit files on remote machines via SSH using `fresh user@host:path`. Supports password/key auth, sudo save, and file explorer integration.
8
+
9
+ ### Features
10
+
11
+ * **Bracket Matching**: Highlight matching brackets with rainbow colors based on nesting depth. Configurable via `highlight_matching_brackets` and `rainbow_brackets`.
12
+ * **Whitespace Cleanup**: New `trim_trailing_whitespace_on_save` and `ensure_final_newline_on_save` options, plus manual commands.
13
+ * **Shift+Click Selection**: Extend selection to clicked position with Shift+click or Ctrl+click.
14
+ * **Terminal Mouse Forwarding**: Mouse events forwarded to terminal in alternate screen mode (vim, htop, etc.) (#853).
15
+ * **Tab Bar Scroll Buttons**: Click `<`/`>` buttons to scroll through tabs.
16
+ * **Library Files Protection**: Files outside project root are read-only and have LSP disabled.
17
+ * **Buffer Focus History**: Closing a buffer returns to previously focused buffer instead of adjacent tab.
18
+
19
+ ### Bug Fixes
20
+
21
+ * **Multi-Cursor Cut**: Fixed cut not deleting all selections with multiple cursors.
22
+ * **Tab Scroll**: Fixed tab scroll buttons and active tab visibility.
23
+
24
+ ### Packaging
25
+
26
+ * **AUR aarch64**: Added aarch64 support for Arch Linux ARM (#856).
27
+
28
+ ### Internal
29
+
30
+ * Nix: Switched to `flake.parts`, added `shell.nix`/`default.nix` compatibility (@drupol).
31
+
32
+ ---
33
+
34
+ ## 0.1.90
35
+
36
+ ### Features
37
+
38
+ * **Package Manager**: Browse, install, and uninstall plugins, themes, and language packs from the [official registry](https://github.com/sinelaw/fresh-plugins-registry). Features search, package validation, background registry sync with local caching, and automatic theme reloading after install.
39
+ - **Language packs** bundle syntax highlighting (`.sublime-syntax`), language settings, and LSP server configuration
40
+ - Filter by package type: Plugins, Themes, Languages
41
+ - See [fresh-plugins](https://github.com/sinelaw/fresh-plugins) for example packages
42
+
43
+ * **Command Palette** (Ctrl+P): Unified prompt for navigating files, commands, buffers, and lines. Use prefix characters to switch modes:
44
+ - No prefix: fuzzy file finder
45
+ - `>` prefix: commands
46
+ - `#` prefix: switch open buffers by name
47
+ - `:` prefix: go to line number
48
+
49
+ Includes hints line showing available prefixes and Tab completion.
50
+
51
+ * **Status Message Log**: Click status bar messages to view full message history.
52
+
53
+ * **Package Scaffolding (`--init`)**: Create new plugin, theme, or language pack projects with `fresh --init`. Interactive wizard generates package.json, entry files, and proper directory structure.
54
+
55
+ * **Theme Schema**: JSON Schema for theme validation. Use `scripts/validate-theme.sh` or any JSON Schema validator.
56
+
57
+ ### Bug Fixes
58
+
59
+ * **Bracket Expansion**: Pressing Enter between matching brackets expands them with proper indentation (#629).
60
+ * **Ctrl+D Word Selection**: Ctrl+D selects the entire word when no selection exists.
61
+ * **Ctrl+Right Word Jump**: Ctrl+Right jumps to word end, matching Ctrl+Shift+Right behavior.
62
+ * **Alt+N/P Search**: Search invalidates when cursor moves manually, preventing stale matches.
63
+ * **Theme Fallback**: Falls back to default theme when configured theme is not found.
64
+ * **Cross-Platform Theme Paths**: Theme path handling works correctly on Windows.
65
+
66
+ ### Internal
67
+
68
+ * Moved calculator, color-highlighter, todo-highlighter plugins to external repository (installable via package manager).
69
+ * Moved catppuccin and xscriptor themes to external repository (installable via package manager).
70
+ * Added WASM feature flag for shared editor core modules.
71
+ * Italian translation update (#839).
72
+
73
+ ---
74
+
3
75
  ## 0.1.88
4
76
 
5
77
  ### Features
package/README.md CHANGED
@@ -40,6 +40,7 @@ Fresh is engineered for speed. It delivers a low-latency experience, with text a
40
40
  - **Plugins & Extensibility**: TypeScript plugins, color highlighter, TODO highlighter, merge conflicts, path complete, keymaps
41
41
  - **Internationalization**: Multiple language support (see [`locales/`](locales/) for available languages), plugin translation system
42
42
 
43
+ ![Fresh Demo](docs/fresh-demo2.gif)
43
44
  ![Fresh Screenshot](docs/screenshot1.png)
44
45
  ![Fresh Screenshot](docs/screenshot2.png)
45
46
  ![Fresh Screenshot](docs/screenshot3.png)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fresh-editor/fresh-editor",
3
- "version": "0.1.88",
3
+ "version": "0.1.93",
4
4
  "description": "A modern terminal-based text editor with plugin support",
5
5
  "repository": {
6
6
  "type": "git",
@@ -557,19 +557,12 @@ async function updateReviewUI() {
557
557
 
558
558
  editor.clearNamespace(state.reviewBufferId, "review-diff");
559
559
  highlights.forEach((h) => {
560
- const bg = h.bg || [-1, -1, -1];
561
- // addOverlay signature: bufferId, namespace, start, end, r, g, b, underline, bold, italic, bg_r, bg_g, bg_b
562
- editor.addOverlay(
563
- state.reviewBufferId!,
564
- "review-diff",
565
- h.range[0],
566
- h.range[1],
567
- h.fg[0], h.fg[1], h.fg[2], // foreground color
568
- false, // underline
569
- h.bold || false, // bold
570
- h.italic || false, // italic
571
- bg[0], bg[1], bg[2] // background color
572
- );
560
+ editor.addOverlay(state.reviewBufferId!, "review-diff", h.range[0], h.range[1], {
561
+ fg: h.fg,
562
+ bg: h.bg,
563
+ bold: h.bold || false,
564
+ italic: h.italic || false,
565
+ });
573
566
  });
574
567
  }
575
568
  }
@@ -42,6 +42,10 @@
42
42
  "auto_indent": true,
43
43
  "scroll_offset": 3,
44
44
  "default_line_ending": "lf",
45
+ "trim_trailing_whitespace_on_save": false,
46
+ "ensure_final_newline_on_save": false,
47
+ "highlight_matching_brackets": true,
48
+ "rainbow_brackets": true,
45
49
  "quick_suggestions": true,
46
50
  "quick_suggestions_delay_ms": 10,
47
51
  "suggest_on_trigger_characters": true,
@@ -144,6 +148,15 @@
144
148
  "x-standalone-category": true,
145
149
  "x-no-add": true,
146
150
  "default": {}
151
+ },
152
+ "packages": {
153
+ "description": "Package manager settings for plugin/theme installation",
154
+ "$ref": "#/$defs/PackagesConfig",
155
+ "default": {
156
+ "sources": [
157
+ "https://github.com/sinelaw/fresh-plugins-registry"
158
+ ]
159
+ }
147
160
  }
148
161
  },
149
162
  "$defs": {
@@ -256,6 +269,30 @@
256
269
  "x-section": "Editing",
257
270
  "default": "lf"
258
271
  },
272
+ "trim_trailing_whitespace_on_save": {
273
+ "description": "Remove trailing whitespace from lines when saving.\nDefault: false",
274
+ "type": "boolean",
275
+ "x-section": "Editing",
276
+ "default": false
277
+ },
278
+ "ensure_final_newline_on_save": {
279
+ "description": "Ensure files end with a newline when saving.\nDefault: false",
280
+ "type": "boolean",
281
+ "x-section": "Editing",
282
+ "default": false
283
+ },
284
+ "highlight_matching_brackets": {
285
+ "description": "Highlight matching bracket pairs when cursor is on a bracket.\nDefault: true",
286
+ "type": "boolean",
287
+ "x-section": "Bracket Matching",
288
+ "default": true
289
+ },
290
+ "rainbow_brackets": {
291
+ "description": "Use rainbow colors for nested brackets based on nesting depth.\nRequires highlight_matching_brackets to be enabled.\nDefault: true",
292
+ "type": "boolean",
293
+ "x-section": "Bracket Matching",
294
+ "default": true
295
+ },
259
296
  "quick_suggestions": {
260
297
  "description": "Enable quick suggestions (VS Code-like behavior).\nWhen enabled, completion suggestions appear automatically while typing,\nnot just on trigger characters (like `.` or `::`).\nDefault: true",
261
298
  "type": "boolean",
@@ -905,6 +942,22 @@
905
942
  }
906
943
  },
907
944
  "x-display-field": "/enabled"
945
+ },
946
+ "PackagesConfig": {
947
+ "description": "Package manager configuration for plugins and themes",
948
+ "type": "object",
949
+ "properties": {
950
+ "sources": {
951
+ "description": "Registry sources (git repository URLs containing plugin/theme indices)\nDefault: [\"https://github.com/sinelaw/fresh-plugins-registry\"]",
952
+ "type": "array",
953
+ "items": {
954
+ "type": "string"
955
+ },
956
+ "default": [
957
+ "https://github.com/sinelaw/fresh-plugins-registry"
958
+ ]
959
+ }
960
+ }
908
961
  }
909
962
  }
910
963
  }
@@ -98,16 +98,10 @@ globalThis.bookmark_add = function (): void {
98
98
 
99
99
  // Add visual indicator with bookmark namespace
100
100
  const bufferId = editor.getActiveBufferId();
101
- editor.addOverlay(
102
- bufferId,
103
- "bookmark", // namespace for all bookmarks
104
- position,
105
- position + 1,
106
- 0, // Red
107
- 128, // Green (teal color)
108
- 255, // Blue
109
- true // Underline
110
- );
101
+ editor.addOverlay(bufferId, "bookmark", position, position + 1, {
102
+ fg: [0, 128, 255], // Teal color
103
+ underline: true,
104
+ });
111
105
 
112
106
  editor.setStatus(`Added ${name} at ${path}:${line}:${column}`);
113
107
  editor.debug(`Bookmark ${id} created: ${JSON.stringify(bookmark)}`);
@@ -49,16 +49,9 @@ globalThis.highlight_region = function (): void {
49
49
  const end = cursorPos + 5;
50
50
 
51
51
  // Use namespace "demo" for batch operations
52
- const success = editor.addOverlay(
53
- bufferId,
54
- "demo", // namespace
55
- start,
56
- end,
57
- 255, // Red
58
- 255, // Green
59
- 0, // Blue (yellow highlight)
60
- false // No underline
61
- );
52
+ const success = editor.addOverlay(bufferId, "demo", start, end, {
53
+ fg: [255, 255, 0], // Yellow highlight
54
+ });
62
55
 
63
56
  if (success) {
64
57
  editor.setStatus(`Highlighted region ${start}-${end}`);
@@ -336,18 +336,11 @@ function applyGitLogHighlighting(): void {
336
336
 
337
337
  // Highlight section header
338
338
  if (line === editor.t("panel.commits_header")) {
339
- editor.addOverlay(
340
- bufferId,
341
- "gitlog",
342
- lineStart,
343
- lineEnd,
344
- colors.header[0],
345
- colors.header[1],
346
- colors.header[2],
347
- true, // underline
348
- true, // bold
349
- false // italic
350
- );
339
+ editor.addOverlay(bufferId, "gitlog", lineStart, lineEnd, {
340
+ fg: colors.header,
341
+ underline: true,
342
+ bold: true,
343
+ });
351
344
  byteOffset += line.length + 1;
352
345
  continue;
353
346
  }
@@ -364,35 +357,19 @@ function applyGitLogHighlighting(): void {
364
357
 
365
358
  // Highlight entire line if cursor is on it (using selected color with underline)
366
359
  if (isCurrentLine) {
367
- editor.addOverlay(
368
- bufferId,
369
- "gitlog",
370
- lineStart,
371
- lineEnd,
372
- colors.selected[0],
373
- colors.selected[1],
374
- colors.selected[2],
375
- true, // underline to make it visible
376
- true, // bold
377
- false // italic
378
- );
360
+ editor.addOverlay(bufferId, "gitlog", lineStart, lineEnd, {
361
+ fg: colors.selected,
362
+ underline: true,
363
+ bold: true,
364
+ });
379
365
  }
380
366
 
381
367
  // Parse the line format: "shortHash (author, relativeDate) subject [refs]"
382
368
  // Highlight hash (first 7+ chars until space)
383
369
  const hashEnd = commit.shortHash.length;
384
- editor.addOverlay(
385
- bufferId,
386
- "gitlog",
387
- lineStart,
388
- lineStart + hashEnd,
389
- colors.hash[0],
390
- colors.hash[1],
391
- colors.hash[2],
392
- false, // underline
393
- false, // bold
394
- false // italic
395
- );
370
+ editor.addOverlay(bufferId, "gitlog", lineStart, lineStart + hashEnd, {
371
+ fg: colors.hash,
372
+ });
396
373
 
397
374
  // Highlight author name (inside parentheses)
398
375
  const authorPattern = "(" + commit.author + ",";
@@ -400,18 +377,9 @@ function applyGitLogHighlighting(): void {
400
377
  if (authorStartInLine >= 0) {
401
378
  const authorStart = lineStart + authorStartInLine + 1; // skip "("
402
379
  const authorEnd = authorStart + commit.author.length;
403
- editor.addOverlay(
404
- bufferId,
405
- "gitlog",
406
- authorStart,
407
- authorEnd,
408
- colors.author[0],
409
- colors.author[1],
410
- colors.author[2],
411
- false, // underline
412
- false, // bold
413
- false // italic
414
- );
380
+ editor.addOverlay(bufferId, "gitlog", authorStart, authorEnd, {
381
+ fg: colors.author,
382
+ });
415
383
  }
416
384
 
417
385
  // Highlight relative date
@@ -420,18 +388,9 @@ function applyGitLogHighlighting(): void {
420
388
  if (dateStartInLine >= 0) {
421
389
  const dateStart = lineStart + dateStartInLine + 2; // skip ", "
422
390
  const dateEnd = dateStart + commit.relativeDate.length;
423
- editor.addOverlay(
424
- bufferId,
425
- "gitlog",
426
- dateStart,
427
- dateEnd,
428
- colors.date[0],
429
- colors.date[1],
430
- colors.date[2],
431
- false, // underline
432
- false, // bold
433
- false // italic
434
- );
391
+ editor.addOverlay(bufferId, "gitlog", dateStart, dateEnd, {
392
+ fg: colors.date,
393
+ });
435
394
  }
436
395
 
437
396
  // Highlight refs (branches/tags) at end of line if present
@@ -449,18 +408,10 @@ function applyGitLogHighlighting(): void {
449
408
  refColor = colors.remote;
450
409
  }
451
410
 
452
- editor.addOverlay(
453
- bufferId,
454
- "gitlog",
455
- refsStart,
456
- refsEnd,
457
- refColor[0],
458
- refColor[1],
459
- refColor[2],
460
- false, // underline
461
- true, // bold (make refs stand out)
462
- false // italic
463
- );
411
+ editor.addOverlay(bufferId, "gitlog", refsStart, refsEnd, {
412
+ fg: refColor,
413
+ bold: true,
414
+ });
464
415
  }
465
416
  }
466
417
 
@@ -621,112 +572,52 @@ function applyCommitDetailHighlighting(): void {
621
572
 
622
573
  // Highlight diff additions (green)
623
574
  if (line.startsWith("+") && !line.startsWith("+++")) {
624
- editor.addOverlay(
625
- bufferId,
626
- "gitdetail",
627
- lineStart,
628
- lineEnd,
629
- colors.diffAdd[0],
630
- colors.diffAdd[1],
631
- colors.diffAdd[2],
632
- false, // underline
633
- false, // bold
634
- false // italic
635
- );
575
+ editor.addOverlay(bufferId, "gitdetail", lineStart, lineEnd, {
576
+ fg: colors.diffAdd,
577
+ });
636
578
  }
637
579
  // Highlight diff deletions (red)
638
580
  else if (line.startsWith("-") && !line.startsWith("---")) {
639
- editor.addOverlay(
640
- bufferId,
641
- "gitdetail",
642
- lineStart,
643
- lineEnd,
644
- colors.diffDel[0],
645
- colors.diffDel[1],
646
- colors.diffDel[2],
647
- false, // underline
648
- false, // bold
649
- false // italic
650
- );
581
+ editor.addOverlay(bufferId, "gitdetail", lineStart, lineEnd, {
582
+ fg: colors.diffDel,
583
+ });
651
584
  }
652
585
  // Highlight hunk headers (cyan/blue)
653
586
  else if (line.startsWith("@@")) {
654
- editor.addOverlay(
655
- bufferId,
656
- "gitdetail",
657
- lineStart,
658
- lineEnd,
659
- colors.diffHunk[0],
660
- colors.diffHunk[1],
661
- colors.diffHunk[2],
662
- false, // underline
663
- true, // bold
664
- false // italic
665
- );
587
+ editor.addOverlay(bufferId, "gitdetail", lineStart, lineEnd, {
588
+ fg: colors.diffHunk,
589
+ bold: true,
590
+ });
666
591
  }
667
592
  // Highlight commit hash in "commit <hash>" line (git show format)
668
593
  else if (line.startsWith("commit ")) {
669
594
  const hashMatch = line.match(/^commit ([a-f0-9]+)/);
670
595
  if (hashMatch) {
671
596
  const hashStart = lineStart + 7; // "commit " is 7 chars
672
- editor.addOverlay(
673
- bufferId,
674
- "gitdetail",
675
- hashStart,
676
- hashStart + hashMatch[1].length,
677
- colors.hash[0],
678
- colors.hash[1],
679
- colors.hash[2],
680
- false, // underline
681
- true, // bold
682
- false // italic
683
- );
597
+ editor.addOverlay(bufferId, "gitdetail", hashStart, hashStart + hashMatch[1].length, {
598
+ fg: colors.hash,
599
+ bold: true,
600
+ });
684
601
  }
685
602
  }
686
603
  // Highlight author line
687
604
  else if (line.startsWith("Author:")) {
688
- editor.addOverlay(
689
- bufferId,
690
- "gitdetail",
691
- lineStart + 8, // "Author: " is 8 chars
692
- lineEnd,
693
- colors.author[0],
694
- colors.author[1],
695
- colors.author[2],
696
- false, // underline
697
- false, // bold
698
- false // italic
699
- );
605
+ editor.addOverlay(bufferId, "gitdetail", lineStart + 8, lineEnd, {
606
+ fg: colors.author,
607
+ });
700
608
  }
701
609
  // Highlight date line
702
610
  else if (line.startsWith("Date:")) {
703
- editor.addOverlay(
704
- bufferId,
705
- "gitdetail",
706
- lineStart + 6, // "Date: " is 6 chars (with trailing spaces it's 8)
707
- lineEnd,
708
- colors.date[0],
709
- colors.date[1],
710
- colors.date[2],
711
- false, // underline
712
- false, // bold
713
- false // italic
714
- );
611
+ editor.addOverlay(bufferId, "gitdetail", lineStart + 6, lineEnd, {
612
+ fg: colors.date,
613
+ });
715
614
  }
716
615
  // Highlight diff file headers
717
616
  else if (line.startsWith("diff --git")) {
718
- editor.addOverlay(
719
- bufferId,
720
- "gitdetail",
721
- lineStart,
722
- lineEnd,
723
- colors.header[0],
724
- colors.header[1],
725
- colors.header[2],
726
- false, // underline
727
- true, // bold
728
- false // italic
729
- );
617
+ editor.addOverlay(bufferId, "gitdetail", lineStart, lineEnd, {
618
+ fg: colors.header,
619
+ bold: true,
620
+ });
730
621
  }
731
622
 
732
623
  byteOffset += line.length + 1;
@@ -1080,7 +971,10 @@ function applyFileViewHighlighting(bufferId: number, content: string, filePath:
1080
971
  inMultilineComment = true;
1081
972
  }
1082
973
  if (inMultilineComment) {
1083
- editor.addOverlay(bufferId, "syntax", lineStart, lineStart + line.length, colors.syntaxComment[0], colors.syntaxComment[1], colors.syntaxComment[2], false, false, true);
974
+ editor.addOverlay(bufferId, "syntax", lineStart, lineStart + line.length, {
975
+ fg: colors.syntaxComment,
976
+ italic: true,
977
+ });
1084
978
  if (line.includes("*/")) {
1085
979
  inMultilineComment = false;
1086
980
  }
@@ -1099,7 +993,9 @@ function applyFileViewHighlighting(bufferId: number, content: string, filePath:
1099
993
  }
1100
994
  }
1101
995
  if (inMultilineString) {
1102
- editor.addOverlay(bufferId, "syntax", lineStart, lineStart + line.length, colors.syntaxString[0], colors.syntaxString[1], colors.syntaxString[2], false, false, false);
996
+ editor.addOverlay(bufferId, "syntax", lineStart, lineStart + line.length, {
997
+ fg: colors.syntaxString,
998
+ });
1103
999
  byteOffset += line.length + 1;
1104
1000
  continue;
1105
1001
  }
@@ -1113,12 +1009,14 @@ function applyFileViewHighlighting(bufferId: number, content: string, filePath:
1113
1009
  }
1114
1010
 
1115
1011
  if (commentStart >= 0) {
1116
- editor.addOverlay(bufferId, "syntax", lineStart + commentStart, lineStart + line.length, colors.syntaxComment[0], colors.syntaxComment[1], colors.syntaxComment[2], false, false, true);
1012
+ editor.addOverlay(bufferId, "syntax", lineStart + commentStart, lineStart + line.length, {
1013
+ fg: colors.syntaxComment,
1014
+ italic: true,
1015
+ });
1117
1016
  }
1118
1017
 
1119
1018
  // String highlighting (simple: find "..." and '...')
1120
1019
  let i = 0;
1121
- let stringCount = 0;
1122
1020
  while (i < line.length) {
1123
1021
  const ch = line[i];
1124
1022
  if (ch === '"' || ch === "'") {
@@ -1132,7 +1030,9 @@ function applyFileViewHighlighting(bufferId: number, content: string, filePath:
1132
1030
  if (i < line.length) i++; // Include closing quote
1133
1031
  const end = i;
1134
1032
  if (commentStart < 0 || start < commentStart) {
1135
- editor.addOverlay(bufferId, "syntax", lineStart + start, lineStart + end, colors.syntaxString[0], colors.syntaxString[1], colors.syntaxString[2], false, false, false);
1033
+ editor.addOverlay(bufferId, "syntax", lineStart + start, lineStart + end, {
1034
+ fg: colors.syntaxString,
1035
+ });
1136
1036
  }
1137
1037
  } else {
1138
1038
  i++;
@@ -1142,25 +1042,30 @@ function applyFileViewHighlighting(bufferId: number, content: string, filePath:
1142
1042
  // Keyword highlighting
1143
1043
  for (const keyword of keywords) {
1144
1044
  const regex = new RegExp(`\\b${keyword}\\b`, "g");
1145
- let match;
1045
+ let match: RegExpExecArray | null;
1146
1046
  while ((match = regex.exec(line)) !== null) {
1147
1047
  const kwStart = match.index;
1148
1048
  const kwEnd = kwStart + keyword.length;
1149
1049
  // Don't highlight if inside comment
1150
1050
  if (commentStart < 0 || kwStart < commentStart) {
1151
- editor.addOverlay(bufferId, "syntax", lineStart + kwStart, lineStart + kwEnd, colors.syntaxKeyword[0], colors.syntaxKeyword[1], colors.syntaxKeyword[2], false, true, false);
1051
+ editor.addOverlay(bufferId, "syntax", lineStart + kwStart, lineStart + kwEnd, {
1052
+ fg: colors.syntaxKeyword,
1053
+ bold: true,
1054
+ });
1152
1055
  }
1153
1056
  }
1154
1057
  }
1155
1058
 
1156
1059
  // Number highlighting
1157
1060
  const numberRegex = /\b\d+(\.\d+)?\b/g;
1158
- let numMatch;
1061
+ let numMatch: RegExpExecArray | null;
1159
1062
  while ((numMatch = numberRegex.exec(line)) !== null) {
1160
1063
  const numStart = numMatch.index;
1161
1064
  const numEnd = numStart + numMatch[0].length;
1162
1065
  if (commentStart < 0 || numStart < commentStart) {
1163
- editor.addOverlay(bufferId, "syntax", lineStart + numStart, lineStart + numEnd, colors.syntaxNumber[0], colors.syntaxNumber[1], colors.syntaxNumber[2], false, false, false);
1066
+ editor.addOverlay(bufferId, "syntax", lineStart + numStart, lineStart + numEnd, {
1067
+ fg: colors.syntaxNumber,
1068
+ });
1164
1069
  }
1165
1070
  }
1166
1071