Use separate editor foreground color (#3661)

Marshall Bowers created

This PR populates the `editor_foreground` color in the various themes
and updates the editor to use this as the color for text.

The `text` field in the theme should now be used for UI elements, while
`editor_foreground` should be used for buffers.

This improves the contrast in some themes, notably Ayu Dark.

Release Notes:

- N/A

Change summary

crates/editor2/src/editor.rs                  |  4 +-
crates/theme2/src/themes/andromeda.rs         |  2 +
crates/theme2/src/themes/ayu.rs               |  3 ++
crates/theme2/src/themes/dracula.rs           |  1 
crates/theme2/src/themes/gruvbox.rs           |  6 ++++
crates/theme2/src/themes/night_owl.rs         |  2 +
crates/theme2/src/themes/noctis.rs            | 11 ++++++++
crates/theme2/src/themes/nord.rs              |  1 
crates/theme2/src/themes/palenight.rs         |  3 ++
crates/theme2/src/themes/rose_pine.rs         |  3 ++
crates/theme2/src/themes/solarized.rs         |  2 +
crates/theme_importer/src/theme_printer.rs    |  1 
crates/theme_importer/src/vscode/converter.rs | 27 +++++++++++++-------
13 files changed, 54 insertions(+), 12 deletions(-)

Detailed changes

crates/editor2/src/editor.rs 🔗

@@ -9297,7 +9297,7 @@ impl Render for Editor {
         let settings = ThemeSettings::get_global(cx);
         let text_style = match self.mode {
             EditorMode::SingleLine | EditorMode::AutoHeight { .. } => TextStyle {
-                color: cx.theme().colors().text,
+                color: cx.theme().colors().editor_foreground,
                 font_family: settings.ui_font.family.clone(),
                 font_features: settings.ui_font.features,
                 font_size: rems(0.875).into(),
@@ -9310,7 +9310,7 @@ impl Render for Editor {
             },
 
             EditorMode::Full => TextStyle {
-                color: cx.theme().colors().text,
+                color: cx.theme().colors().editor_foreground,
                 font_family: settings.buffer_font.family.clone(),
                 font_features: settings.buffer_font.features,
                 font_size: settings.buffer_font_size(cx).into(),

crates/theme2/src/themes/andromeda.rs 🔗

@@ -47,6 +47,7 @@ pub fn andromeda() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x3a3f4c77).into()),
                         scrollbar_track_background: Some(rgba(0x23262eff).into()),
                         scrollbar_track_border: Some(rgba(0x1b1d23ff).into()),
+                        editor_foreground: Some(rgba(0xd5ced9ff).into()),
                         editor_background: Some(rgba(0x23262eff).into()),
                         editor_gutter_background: Some(rgba(0x23262eff).into()),
                         editor_line_number: Some(rgba(0x746f77ff).into()),
@@ -261,6 +262,7 @@ pub fn andromeda() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x3a3f4c77).into()),
                         scrollbar_track_background: Some(rgba(0x262a33ff).into()),
                         scrollbar_track_border: Some(rgba(0x1b1d23ff).into()),
+                        editor_foreground: Some(rgba(0xd5ced9ff).into()),
                         editor_background: Some(rgba(0x262a33ff).into()),
                         editor_gutter_background: Some(rgba(0x262a33ff).into()),
                         editor_line_number: Some(rgba(0x746f77ff).into()),

crates/theme2/src/themes/ayu.rs 🔗

@@ -46,6 +46,7 @@ pub fn ayu() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x8a919966).into()),
                         scrollbar_track_background: Some(rgba(0xf8f9faff).into()),
                         scrollbar_track_border: Some(rgba(0x6b7d8f1f).into()),
+                        editor_foreground: Some(rgba(0x5c6166ff).into()),
                         editor_background: Some(rgba(0xf8f9faff).into()),
                         editor_gutter_background: Some(rgba(0xf8f9faff).into()),
                         editor_line_number: Some(rgba(0x8a919966).into()),
@@ -352,6 +353,7 @@ pub fn ayu() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x707a8c66).into()),
                         scrollbar_track_background: Some(rgba(0x1f2430ff).into()),
                         scrollbar_track_border: Some(rgba(0x171b24ff).into()),
+                        editor_foreground: Some(rgba(0xcccac2ff).into()),
                         editor_background: Some(rgba(0x1f2430ff).into()),
                         editor_gutter_background: Some(rgba(0x1f2430ff).into()),
                         editor_line_number: Some(rgba(0x8a919966).into()),
@@ -658,6 +660,7 @@ pub fn ayu() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x565b6666).into()),
                         scrollbar_track_background: Some(rgba(0x0b0e14ff).into()),
                         scrollbar_track_border: Some(rgba(0x1e232bff).into()),
+                        editor_foreground: Some(rgba(0xbfbdb6ff).into()),
                         editor_background: Some(rgba(0x0b0e14ff).into()),
                         editor_gutter_background: Some(rgba(0x0b0e14ff).into()),
                         editor_line_number: Some(rgba(0x6c738099).into()),

crates/theme2/src/themes/dracula.rs 🔗

@@ -43,6 +43,7 @@ pub fn dracula() -> UserThemeFamily {
                     tab_active_background: Some(rgba(0x282a36ff).into()),
                     scrollbar_track_background: Some(rgba(0x282a36ff).into()),
                     scrollbar_track_border: Some(rgba(0x191a21ff).into()),
+                    editor_foreground: Some(rgba(0xf8f8f2ff).into()),
                     editor_background: Some(rgba(0x282a36ff).into()),
                     editor_gutter_background: Some(rgba(0x282a36ff).into()),
                     editor_line_number: Some(rgba(0x6272a4ff).into()),

crates/theme2/src/themes/gruvbox.rs 🔗

@@ -46,6 +46,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x50494599).into()),
                         scrollbar_track_background: Some(rgba(0x1d2021ff).into()),
                         scrollbar_track_border: Some(rgba(0x1d202100).into()),
+                        editor_foreground: Some(rgba(0xebdbb2ff).into()),
                         editor_background: Some(rgba(0x1d2021ff).into()),
                         editor_gutter_background: Some(rgba(0x1d2021ff).into()),
                         editor_line_number: Some(rgba(0x665c54ff).into()),
@@ -338,6 +339,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x50494599).into()),
                         scrollbar_track_background: Some(rgba(0x282828ff).into()),
                         scrollbar_track_border: Some(rgba(0x28282800).into()),
+                        editor_foreground: Some(rgba(0xebdbb2ff).into()),
                         editor_background: Some(rgba(0x282828ff).into()),
                         editor_gutter_background: Some(rgba(0x282828ff).into()),
                         editor_line_number: Some(rgba(0x665c54ff).into()),
@@ -630,6 +632,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x50494599).into()),
                         scrollbar_track_background: Some(rgba(0x32302fff).into()),
                         scrollbar_track_border: Some(rgba(0x32302f00).into()),
+                        editor_foreground: Some(rgba(0xebdbb2ff).into()),
                         editor_background: Some(rgba(0x32302fff).into()),
                         editor_gutter_background: Some(rgba(0x32302fff).into()),
                         editor_line_number: Some(rgba(0x665c54ff).into()),
@@ -922,6 +925,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0xd5c4a199).into()),
                         scrollbar_track_background: Some(rgba(0xf9f5d7ff).into()),
                         scrollbar_track_border: Some(rgba(0xf9f5d700).into()),
+                        editor_foreground: Some(rgba(0x3c3836ff).into()),
                         editor_background: Some(rgba(0xf9f5d7ff).into()),
                         editor_gutter_background: Some(rgba(0xf9f5d7ff).into()),
                         editor_line_number: Some(rgba(0xbdae93ff).into()),
@@ -1214,6 +1218,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0xd5c4a199).into()),
                         scrollbar_track_background: Some(rgba(0xfbf1c7ff).into()),
                         scrollbar_track_border: Some(rgba(0xfbf1c700).into()),
+                        editor_foreground: Some(rgba(0x3c3836ff).into()),
                         editor_background: Some(rgba(0xfbf1c7ff).into()),
                         editor_gutter_background: Some(rgba(0xfbf1c7ff).into()),
                         editor_line_number: Some(rgba(0xbdae93ff).into()),
@@ -1506,6 +1511,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0xd5c4a199).into()),
                         scrollbar_track_background: Some(rgba(0xf2e5bcff).into()),
                         scrollbar_track_border: Some(rgba(0xf2e5bc00).into()),
+                        editor_foreground: Some(rgba(0x3c3836ff).into()),
                         editor_background: Some(rgba(0xf2e5bcff).into()),
                         editor_gutter_background: Some(rgba(0xf2e5bcff).into()),
                         editor_line_number: Some(rgba(0xbdae93ff).into()),

crates/theme2/src/themes/night_owl.rs 🔗

@@ -46,6 +46,7 @@ pub fn night_owl() -> UserThemeFamily {
                         scrollbar_thumb_hover_background: Some(rgba(0x084d8180).into()),
                         scrollbar_thumb_border: Some(rgba(0x084d8180).into()),
                         scrollbar_track_background: Some(rgba(0x011627ff).into()),
+                        editor_foreground: Some(rgba(0xd6deebff).into()),
                         editor_background: Some(rgba(0x011627ff).into()),
                         editor_gutter_background: Some(rgba(0x011627ff).into()),
                         editor_line_number: Some(rgba(0x4b6479ff).into()),
@@ -305,6 +306,7 @@ pub fn night_owl() -> UserThemeFamily {
                         tab_inactive_background: Some(rgba(0xf0f0f0ff).into()),
                         tab_active_background: Some(rgba(0xf6f6f6ff).into()),
                         scrollbar_track_background: Some(rgba(0xfbfbfbff).into()),
+                        editor_foreground: Some(rgba(0x403f53ff).into()),
                         editor_background: Some(rgba(0xfbfbfbff).into()),
                         editor_gutter_background: Some(rgba(0xfbfbfbff).into()),
                         editor_line_number: Some(rgba(0x90a7b2ff).into()),

crates/theme2/src/themes/noctis.rs 🔗

@@ -47,6 +47,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x008ee633).into()),
                         scrollbar_track_background: Some(rgba(0x07273bff).into()),
                         scrollbar_track_border: Some(rgba(0x07273bff).into()),
+                        editor_foreground: Some(rgba(0xbecfdaff).into()),
                         editor_background: Some(rgba(0x07273bff).into()),
                         editor_gutter_background: Some(rgba(0x07273bff).into()),
                         editor_line_number: Some(rgba(0x4d6c80ff).into()),
@@ -324,6 +325,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0xeb609133).into()),
                         scrollbar_track_background: Some(rgba(0x322a2dff).into()),
                         scrollbar_track_border: Some(rgba(0x322a2dff).into()),
+                        editor_foreground: Some(rgba(0xcbbec2ff).into()),
                         editor_background: Some(rgba(0x322a2dff).into()),
                         editor_gutter_background: Some(rgba(0x322a2dff).into()),
                         editor_line_number: Some(rgba(0x715b63ff).into()),
@@ -601,6 +603,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6a90955b).into()),
                         scrollbar_track_background: Some(rgba(0xf4f6f6ff).into()),
                         scrollbar_track_border: Some(rgba(0xf4f6f6ff).into()),
+                        editor_foreground: Some(rgba(0x005661ff).into()),
                         editor_background: Some(rgba(0xf4f6f6ff).into()),
                         editor_gutter_background: Some(rgba(0xf4f6f6ff).into()),
                         editor_line_number: Some(rgba(0xa0abacff).into()),
@@ -878,6 +881,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6a90955b).into()),
                         scrollbar_track_background: Some(rgba(0xf2f1f8ff).into()),
                         scrollbar_track_border: Some(rgba(0xf2f1f8ff).into()),
+                        editor_foreground: Some(rgba(0x0c006bff).into()),
                         editor_background: Some(rgba(0xf2f1f8ff).into()),
                         editor_gutter_background: Some(rgba(0xf2f1f8ff).into()),
                         editor_line_number: Some(rgba(0x9d9ab1ff).into()),
@@ -1155,6 +1159,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6a90955b).into()),
                         scrollbar_track_background: Some(rgba(0xfef8ecff).into()),
                         scrollbar_track_border: Some(rgba(0xfef8ecff).into()),
+                        editor_foreground: Some(rgba(0x005661ff).into()),
                         editor_background: Some(rgba(0xfef8ecff).into()),
                         editor_gutter_background: Some(rgba(0xfef8ecff).into()),
                         editor_line_number: Some(rgba(0xa0abacff).into()),
@@ -1432,6 +1437,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x3f7fa633).into()),
                         scrollbar_track_background: Some(rgba(0x1b2932ff).into()),
                         scrollbar_track_border: Some(rgba(0x1b2932ff).into()),
+                        editor_foreground: Some(rgba(0xc5cdd3ff).into()),
                         editor_background: Some(rgba(0x1b2932ff).into()),
                         editor_gutter_background: Some(rgba(0x1b2932ff).into()),
                         editor_line_number: Some(rgba(0x5d6e79ff).into()),
@@ -1709,6 +1715,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6a90955b).into()),
                         scrollbar_track_background: Some(rgba(0x052529ff).into()),
                         scrollbar_track_border: Some(rgba(0x052529ff).into()),
+                        editor_foreground: Some(rgba(0xb2cacdff).into()),
                         editor_background: Some(rgba(0x052529ff).into()),
                         editor_gutter_background: Some(rgba(0x052529ff).into()),
                         editor_line_number: Some(rgba(0x4e6b6eff).into()),
@@ -1986,6 +1993,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6a90955b).into()),
                         scrollbar_track_background: Some(rgba(0x031417ff).into()),
                         scrollbar_track_border: Some(rgba(0x031417ff).into()),
+                        editor_foreground: Some(rgba(0xb2cacdff).into()),
                         editor_background: Some(rgba(0x031417ff).into()),
                         editor_gutter_background: Some(rgba(0x031417ff).into()),
                         editor_line_number: Some(rgba(0x4e6b6eff).into()),
@@ -2263,6 +2271,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6a90955b).into()),
                         scrollbar_track_background: Some(rgba(0x031417ff).into()),
                         scrollbar_track_border: Some(rgba(0x031417ff).into()),
+                        editor_foreground: Some(rgba(0xb2cacdff).into()),
                         editor_background: Some(rgba(0x031417ff).into()),
                         editor_gutter_background: Some(rgba(0x031417ff).into()),
                         editor_line_number: Some(rgba(0x4e6b6eff).into()),
@@ -2540,6 +2549,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x7060eb33).into()),
                         scrollbar_track_background: Some(rgba(0x292640ff).into()),
                         scrollbar_track_border: Some(rgba(0x292640ff).into()),
+                        editor_foreground: Some(rgba(0xc5c2d6ff).into()),
                         editor_background: Some(rgba(0x292640ff).into()),
                         editor_gutter_background: Some(rgba(0x292640ff).into()),
                         editor_line_number: Some(rgba(0x5c5973ff).into()),
@@ -2817,6 +2827,7 @@ pub fn noctis() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0xa660eb33).into()),
                         scrollbar_track_background: Some(rgba(0x30243dff).into()),
                         scrollbar_track_border: Some(rgba(0x30243dff).into()),
+                        editor_foreground: Some(rgba(0xccbfd9ff).into()),
                         editor_background: Some(rgba(0x30243dff).into()),
                         editor_gutter_background: Some(rgba(0x30243dff).into()),
                         editor_line_number: Some(rgba(0x665973ff).into()),

crates/theme2/src/themes/nord.rs 🔗

@@ -46,6 +46,7 @@ pub fn nord() -> UserThemeFamily {
                     scrollbar_thumb_border: Some(rgba(0x434c5e99).into()),
                     scrollbar_track_background: Some(rgba(0x2e3440ff).into()),
                     scrollbar_track_border: Some(rgba(0x3b4252ff).into()),
+                    editor_foreground: Some(rgba(0xd8dee9ff).into()),
                     editor_background: Some(rgba(0x2e3440ff).into()),
                     editor_gutter_background: Some(rgba(0x2e3440ff).into()),
                     editor_line_number: Some(rgba(0x4c566aff).into()),

crates/theme2/src/themes/palenight.rs 🔗

@@ -46,6 +46,7 @@ pub fn palenight() -> UserThemeFamily {
                         scrollbar_thumb_hover_background: Some(rgba(0x694ca4cc).into()),
                         scrollbar_thumb_border: Some(rgba(0x694ca466).into()),
                         scrollbar_track_background: Some(rgba(0x292d3eff).into()),
+                        editor_foreground: Some(rgba(0xbfc7d5ff).into()),
                         editor_background: Some(rgba(0x292d3eff).into()),
                         editor_gutter_background: Some(rgba(0x292d3eff).into()),
                         editor_line_number: Some(rgba(0x4c5374ff).into()),
@@ -331,6 +332,7 @@ pub fn palenight() -> UserThemeFamily {
                         scrollbar_thumb_hover_background: Some(rgba(0x694ca4cc).into()),
                         scrollbar_thumb_border: Some(rgba(0x694ca466).into()),
                         scrollbar_track_background: Some(rgba(0x292d3eff).into()),
+                        editor_foreground: Some(rgba(0xbfc7d5ff).into()),
                         editor_background: Some(rgba(0x292d3eff).into()),
                         editor_gutter_background: Some(rgba(0x292d3eff).into()),
                         editor_line_number: Some(rgba(0x4c5374ff).into()),
@@ -616,6 +618,7 @@ pub fn palenight() -> UserThemeFamily {
                         scrollbar_thumb_hover_background: Some(rgba(0x694ca4cc).into()),
                         scrollbar_thumb_border: Some(rgba(0x694ca466).into()),
                         scrollbar_track_background: Some(rgba(0x292d3eff).into()),
+                        editor_foreground: Some(rgba(0xbfc7d5ff).into()),
                         editor_background: Some(rgba(0x292d3eff).into()),
                         editor_gutter_background: Some(rgba(0x292d3eff).into()),
                         editor_line_number: Some(rgba(0x4c5374ff).into()),

crates/theme2/src/themes/rose_pine.rs 🔗

@@ -47,6 +47,7 @@ pub fn rose_pine() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6e6a8633).into()),
                         scrollbar_track_background: Some(rgba(0x191724ff).into()),
                         scrollbar_track_border: Some(rgba(0x6e6a8666).into()),
+                        editor_foreground: Some(rgba(0xe0def4ff).into()),
                         editor_background: Some(rgba(0x191724ff).into()),
                         editor_gutter_background: Some(rgba(0x191724ff).into()),
                         editor_line_number: Some(rgba(0x908caaff).into()),
@@ -306,6 +307,7 @@ pub fn rose_pine() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x817c9c26).into()),
                         scrollbar_track_background: Some(rgba(0x232136ff).into()),
                         scrollbar_track_border: Some(rgba(0x817c9c4d).into()),
+                        editor_foreground: Some(rgba(0xe0def4ff).into()),
                         editor_background: Some(rgba(0x232136ff).into()),
                         editor_gutter_background: Some(rgba(0x232136ff).into()),
                         editor_line_number: Some(rgba(0x908caaff).into()),
@@ -565,6 +567,7 @@ pub fn rose_pine() -> UserThemeFamily {
                         scrollbar_thumb_border: Some(rgba(0x6e6a8614).into()),
                         scrollbar_track_background: Some(rgba(0xfaf4edff).into()),
                         scrollbar_track_border: Some(rgba(0x6e6a8626).into()),
+                        editor_foreground: Some(rgba(0x575279ff).into()),
                         editor_background: Some(rgba(0xfaf4edff).into()),
                         editor_gutter_background: Some(rgba(0xfaf4edff).into()),
                         editor_line_number: Some(rgba(0x797593ff).into()),

crates/theme2/src/themes/solarized.rs 🔗

@@ -42,6 +42,7 @@ pub fn solarized() -> UserThemeFamily {
                         tab_inactive_background: Some(rgba(0x004052ff).into()),
                         tab_active_background: Some(rgba(0x002b37ff).into()),
                         scrollbar_track_background: Some(rgba(0x002b36ff).into()),
+                        editor_foreground: Some(rgba(0xbbbbbbff).into()),
                         editor_background: Some(rgba(0x002b36ff).into()),
                         editor_gutter_background: Some(rgba(0x002b36ff).into()),
                         editor_line_number: Some(rgba(0x566c74ff).into()),
@@ -307,6 +308,7 @@ pub fn solarized() -> UserThemeFamily {
                         tab_inactive_background: Some(rgba(0xd3cbb7ff).into()),
                         tab_active_background: Some(rgba(0xfdf6e3ff).into()),
                         scrollbar_track_background: Some(rgba(0xfdf6e3ff).into()),
+                        editor_foreground: Some(rgba(0x333333ff).into()),
                         editor_background: Some(rgba(0xfdf6e3ff).into()),
                         editor_gutter_background: Some(rgba(0xfdf6e3ff).into()),
                         editor_line_number: Some(rgba(0x9ca8a6ff).into()),

crates/theme_importer/src/theme_printer.rs 🔗

@@ -201,6 +201,7 @@ impl<'a> Debug for ThemeColorsRefinementPrinter<'a> {
                 self.0.scrollbar_track_background,
             ),
             ("scrollbar_track_border", self.0.scrollbar_track_border),
+            ("editor_foreground", self.0.editor_foreground),
             ("editor_background", self.0.editor_background),
             ("editor_gutter_background", self.0.editor_gutter_background),
             (

crates/theme_importer/src/vscode/converter.rs 🔗

@@ -132,6 +132,11 @@ impl VsCodeThemeConverter {
             .as_ref()
             .traverse(|color| try_parse_color(&color))?;
 
+        let vscode_editor_foreground = vscode_colors
+            .editor_foreground
+            .as_ref()
+            .traverse(|color| try_parse_color(&color))?;
+
         let vscode_editor_background = vscode_colors
             .editor_background
             .as_ref()
@@ -142,6 +147,16 @@ impl VsCodeThemeConverter {
             .as_ref()
             .traverse(|color| try_parse_color(&color))?;
 
+        let vscode_token_colors_foreground = self
+            .theme
+            .token_colors
+            .iter()
+            .find(|token_color| token_color.scope.is_none())
+            .and_then(|token_color| token_color.settings.foreground.as_ref())
+            .traverse(|color| try_parse_color(&color))
+            .ok()
+            .flatten();
+
         Ok(ThemeColorsRefinement {
             border: vscode_panel_border,
             border_variant: vscode_panel_border,
@@ -197,16 +212,7 @@ impl VsCodeThemeConverter {
                 .foreground
                 .as_ref()
                 .traverse(|color| try_parse_color(&color))?
-                .or_else(|| {
-                    self.theme
-                        .token_colors
-                        .iter()
-                        .find(|token_color| token_color.scope.is_none())
-                        .and_then(|token_color| token_color.settings.foreground.as_ref())
-                        .traverse(|color| try_parse_color(&color))
-                        .ok()
-                        .flatten()
-                }),
+                .or(vscode_token_colors_foreground),
             text_muted: vscode_colors
                 .tab_inactive_foreground
                 .as_ref()
@@ -226,6 +232,7 @@ impl VsCodeThemeConverter {
                 .as_ref()
                 .traverse(|color| try_parse_color(&color))?
                 .or(vscode_editor_background),
+            editor_foreground: vscode_editor_foreground.or(vscode_token_colors_foreground),
             editor_background: vscode_editor_background,
             editor_gutter_background: vscode_editor_background,
             editor_line_number: vscode_colors