diff options
| author | sigoden <sigoden@gmail.com> | 2023-03-07 11:38:44 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-07 11:38:44 +0800 |
| commit | 1640456049cda9999bb27501af30e05e46b0360d (patch) | |
| tree | 8cc1ad88bd233a5898bff0520fd933db41f1e0da /src/render | |
| parent | c12ae0275108acbbb124a41ff936b441723ae625 (diff) | |
| download | aichat-1640456049cda9999bb27501af30e05e46b0360d.tar.gz | |
refactor: use syntect for highlight, abandon mdcat (#26)
* refactor: use syntect for highlight, abandon mdcat
* split src/render.rs to sub modules. embed a default theme
* simulate typing effect.
* fix format
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/markdown.rs | 150 | ||||
| -rw-r--r-- | src/render/mod.rs | 120 | ||||
| -rw-r--r-- | src/render/theme.yaml | 2846 |
3 files changed, 3116 insertions, 0 deletions
diff --git a/src/render/markdown.rs b/src/render/markdown.rs new file mode 100644 index 0000000..fc0bc3e --- /dev/null +++ b/src/render/markdown.rs @@ -0,0 +1,150 @@ +use syntect::highlighting::Theme; +use syntect::parsing::SyntaxSet; +use syntect::util::as_24_bit_terminal_escaped; +use syntect::{easy::HighlightLines, parsing::SyntaxReference}; + +const THEME: &[u8] = include_bytes!("theme.yaml"); + +pub struct MarkdownRender { + syntax_set: SyntaxSet, + theme: Theme, + md_syntax: SyntaxReference, + txt_syntax: SyntaxReference, + code_syntax: SyntaxReference, + line_type: LineType, +} + +impl MarkdownRender { + pub fn new() -> Self { + let syntax_set = SyntaxSet::load_defaults_newlines(); + let theme: Theme = serde_yaml::from_slice(THEME).unwrap(); + let md_syntax = syntax_set.find_syntax_by_extension("md").unwrap().clone(); + let txt_syntax = syntax_set.find_syntax_by_extension("txt").unwrap().clone(); + let code_syntax = txt_syntax.clone(); + let line_type = LineType::Normal; + Self { + syntax_set, + theme, + md_syntax, + code_syntax, + txt_syntax, + line_type, + } + } + + pub fn render(&mut self, src: &str) -> String { + src.split('\n') + .map(|line| self.render_line(line).unwrap_or_else(|| line.to_string())) + .collect::<Vec<String>>() + .join("\n") + } + + pub fn render_line(&mut self, line: &str) -> Option<String> { + if let Some(lang) = detect_code_block(line) { + match self.line_type { + LineType::Normal | LineType::CodeEnd => { + self.line_type = LineType::CodeBegin; + self.code_syntax = if lang.is_empty() { + self.txt_syntax.clone() + } else { + self.find_syntax(&lang) + .cloned() + .unwrap_or_else(|| self.txt_syntax.clone()) + }; + } + LineType::CodeBegin | LineType::CodeInner => { + self.line_type = LineType::CodeEnd; + self.code_syntax = self.txt_syntax.clone(); + } + } + self.render_line_inner(line, &self.md_syntax) + } else { + match self.line_type { + LineType::Normal => self.render_line_inner(line, &self.md_syntax), + LineType::CodeEnd => { + self.line_type = LineType::Normal; + self.render_line_inner(line, &self.md_syntax) + } + LineType::CodeBegin => { + self.line_type = LineType::CodeInner; + self.render_line_inner(line, &self.code_syntax) + } + LineType::CodeInner => self.render_line_inner(line, &self.code_syntax), + } + } + } + + pub fn render_line_stateless(&self, line: &str) -> String { + let output = if detect_code_block(line).is_some() { + self.render_line_inner(line, &self.md_syntax) + } else { + match self.line_type { + LineType::Normal | LineType::CodeEnd => { + self.render_line_inner(line, &self.md_syntax) + } + _ => self.render_line_inner(line, &self.code_syntax), + } + }; + + output.unwrap_or_else(|| line.to_string()) + } + + fn render_line_inner(&self, line: &str, syntax: &SyntaxReference) -> Option<String> { + let mut highlighter = HighlightLines::new(syntax, &self.theme); + let ranges = highlighter.highlight_line(line, &self.syntax_set).ok()?; + Some(as_24_bit_terminal_escaped(&ranges[..], false)) + } + + fn find_syntax(&self, lang: &str) -> Option<&SyntaxReference> { + self.syntax_set.find_syntax_by_extension(lang).or_else(|| { + LANGEGUATE_NAME_EXTS + .iter() + .find(|(name, _)| *name == lang.to_lowercase()) + .and_then(|(_, ext)| self.syntax_set.find_syntax_by_extension(ext)) + }) + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum LineType { + Normal, + CodeBegin, + CodeInner, + CodeEnd, +} + +const LANGEGUATE_NAME_EXTS: [(&str, &str); 21] = [ + ("asp", "asa"), + ("actionscript", "as"), + ("c#", "cs"), + ("clojure", "clj"), + ("erlang", "erl"), + ("haskell", "hs"), + ("javascript", "js"), + ("bibtex", "bib"), + ("latex", "tex"), + ("tex", "sty"), + ("ocaml", "ml"), + ("ocamllex", "mll"), + ("ocamlyacc", "mly"), + ("objective-c++", "mm"), + ("objective-c", "m"), + ("pascal", "pas"), + ("perl", "pl"), + ("python", "py"), + ("restructuredtext", "rst"), + ("ruby", "rb"), + ("rust", "rs"), +]; + +fn detect_code_block(line: &str) -> Option<String> { + if !line.starts_with("```") { + return None; + } + let lang = line + .chars() + .skip(3) + .take_while(|v| v.is_alphanumeric()) + .collect(); + Some(lang) +} diff --git a/src/render/mod.rs b/src/render/mod.rs new file mode 100644 index 0000000..d9fcc95 --- /dev/null +++ b/src/render/mod.rs @@ -0,0 +1,120 @@ +mod markdown; + +pub use self::markdown::MarkdownRender; +use crate::repl::ReplyStreamEvent; + +use anyhow::Result; +use crossbeam::channel::Receiver; +use crossterm::{ + cursor, + event::{self, Event, KeyCode, KeyModifiers}, + queue, style, + terminal::{self, disable_raw_mode, enable_raw_mode}, +}; +use std::{ + io::{self, Stdout, Write}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + time::{Duration, Instant}, +}; +use unicode_width::UnicodeWidthStr; + +pub fn render_stream(rx: Receiver<ReplyStreamEvent>, ctrlc: Arc<AtomicBool>) -> Result<()> { + enable_raw_mode()?; + let mut stdout = io::stdout(); + queue!(stdout, event::DisableMouseCapture)?; + + let ret = render_stream_inner(rx, ctrlc, &mut stdout); + + queue!(stdout, event::DisableMouseCapture)?; + disable_raw_mode()?; + + ret +} + +pub fn render_stream_inner( + rx: Receiver<ReplyStreamEvent>, + ctrlc: Arc<AtomicBool>, + writer: &mut Stdout, +) -> Result<()> { + let mut last_tick = Instant::now(); + let tick_rate = Duration::from_millis(200); + let mut buffer = String::new(); + let mut markdown_render = MarkdownRender::new(); + let terminal_columns = terminal::size()?.0; + loop { + if ctrlc.load(Ordering::SeqCst) { + return Ok(()); + } + + if let Ok(evt) = rx.try_recv() { + recover_cursor(writer, terminal_columns, &buffer)?; + + match evt { + ReplyStreamEvent::Text(text) => { + if text.contains('\n') { + let text = format!("{buffer}{text}"); + let mut lines: Vec<&str> = text.split('\n').collect(); + buffer = lines.pop().unwrap_or_default().to_string(); + let output = markdown_render.render(&lines.join("\n")); + queue!( + writer, + style::Print(output), + style::Print("\n"), + style::Print(&buffer), + )?; + } else { + buffer = format!("{buffer}{text}"); + let output = markdown_render.render_line_stateless(&buffer); + queue!(writer, style::Print(&output))?; + } + writer.flush()?; + } + ReplyStreamEvent::Done => { + let output = markdown_render.render_line_stateless(&buffer); + queue!(writer, style::Print(output), style::Print("\n"))?; + writer.flush()?; + break; + } + } + continue; + } + + let timeout = tick_rate + .checked_sub(last_tick.elapsed()) + .unwrap_or_else(|| Duration::from_secs(0)); + if crossterm::event::poll(timeout)? { + if let Event::Key(key) = event::read()? { + match key.code { + KeyCode::Char('c') if key.modifiers == KeyModifiers::CONTROL => { + ctrlc.store(true, Ordering::SeqCst); + return Ok(()); + } + _ => {} + } + } + } + + if last_tick.elapsed() >= tick_rate { + last_tick = Instant::now(); + } + } + Ok(()) +} + +fn recover_cursor(writer: &mut Stdout, terminal_columns: u16, buffer: &str) -> Result<()> { + let buffer_rows = (buffer.width() as u16 + terminal_columns - 1) / terminal_columns; + let (_, row) = cursor::position()?; + if row + 1 >= buffer_rows { + queue!(writer, cursor::MoveTo(0, row + 1 - buffer_rows))?; + } else { + queue!( + writer, + terminal::ScrollUp(buffer_rows - 1 - row), + cursor::MoveTo(0, 0) + )?; + } + Ok(()) +} diff --git a/src/render/theme.yaml b/src/render/theme.yaml new file mode 100644 index 0000000..9475b9b --- /dev/null +++ b/src/render/theme.yaml @@ -0,0 +1,2846 @@ +--- +name: Monokai Extended +author: github.com/jonschlinkert +settings: + foreground: + r: 248 + g: 248 + b: 242 + a: 255 + background: + r: 34 + g: 34 + b: 34 + a: 255 + caret: + r: 248 + g: 248 + b: 240 + a: 255 + line_highlight: + r: 51 + g: 51 + b: 51 + a: 255 + misspelling: ~ + minimap_border: ~ + accent: ~ + popup_css: ~ + phantom_css: ~ + bracket_contents_foreground: + r: 248 + g: 248 + b: 242 + a: 165 + bracket_contents_options: Underline + brackets_foreground: + r: 248 + g: 248 + b: 242 + a: 165 + brackets_background: ~ + brackets_options: Underline + tags_foreground: ~ + tags_options: StippledUnderline + highlight: ~ + find_highlight: + r: 255 + g: 231 + b: 146 + a: 255 + find_highlight_foreground: + r: 0 + g: 0 + b: 0 + a: 255 + gutter: ~ + gutter_foreground: ~ + selection: + r: 68 + g: 68 + b: 68 + a: 255 + selection_foreground: ~ + selection_border: + r: 28 + g: 28 + b: 28 + a: 255 + inactive_selection: ~ + inactive_selection_foreground: ~ + guide: ~ + active_guide: + r: 157 + g: 85 + b: 15 + a: 176 + stack_guide: ~ + shadow: ~ +scopes: + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - comment + excludes: [] + style: + foreground: + r: 117 + g: 113 + b: 94 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - string + excludes: [] + style: + foreground: + r: 230 + g: 219 + b: 116 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.numeric + excludes: [] + style: + foreground: + r: 190 + g: 132 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.language + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.preprocessor + excludes: [] + style: + foreground: + r: 190 + g: 132 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.character + excludes: [] + - path: + clear_stack: [] + scopes: + - constant.other + excludes: [] + style: + foreground: + r: 190 + g: 132 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.language + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.other + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage.type + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.class + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 2 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.other.inherited-class + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 6 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.function + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.parameter + excludes: [] + style: + foreground: + r: 253 + g: 151 + b: 31 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.tag + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.other.attribute-name + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.function + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.constant + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.type + excludes: [] + - path: + clear_stack: [] + scopes: + - support.class + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.other.variable + excludes: [] + style: + foreground: ~ + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - string + - constant + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - string.regexp + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - string + - variable + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.variable + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.tag.sgml.doctype.xml + excludes: [] + - path: + clear_stack: [] + scopes: + - declaration.sgml.html + - declaration.doctype + excludes: [] + - path: + clear_stack: [] + scopes: + - declaration.sgml.html + - declaration.doctype + - entity + excludes: [] + - path: + clear_stack: [] + scopes: + - declaration.sgml.html + - declaration.doctype + - string + excludes: [] + - path: + clear_stack: [] + scopes: + - declaration.xml-processing + excludes: [] + - path: + clear_stack: [] + scopes: + - declaration.xml-processing + - entity + excludes: [] + - path: + clear_stack: [] + scopes: + - declaration.xml-processing + - string + excludes: [] + - path: + clear_stack: [] + scopes: + - doctype + excludes: [] + style: + foreground: + r: 200 + g: 206 + b: 204 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - comment.block.html + excludes: [] + style: + foreground: + r: 124 + g: 120 + b: 101 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.tag.script.html + excludes: [] + style: + foreground: ~ + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - text.html.basic + - meta.tag.other.html + excludes: [] + - path: + clear_stack: [] + scopes: + - text.html.basic + - meta.tag.any.html + excludes: [] + - path: + clear_stack: [] + scopes: + - text.html.basic + - meta.tag.block.any + excludes: [] + - path: + clear_stack: [] + scopes: + - text.html.basic + - meta.tag.inline.any + excludes: [] + - path: + clear_stack: [] + scopes: + - text.html.basic + - meta.tag.structure.any.html + excludes: [] + - path: + clear_stack: [] + scopes: + - text.html.basic + - source.js.embedded.html + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.separator.key-value.html + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - text.html.basic + - entity.other.attribute-name.html + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - text.html.basic + - meta.tag.structure.any.html + - punctuation.definition.string.begin.html + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.begin.html + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.end.html + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.tag.end + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.tag.begin + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.tag + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.parameter.handlebars + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.constant.handlebars + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.function.block.start.handlebars + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.preprocessor.at-rule + - keyword.control.at-rule + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.selector.css + - entity.other.attribute-name.id + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.selector.css + - entity.other.attribute-name.class + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.type.property-name.css + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.constructor.argument.css + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.section.property-list.css + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.tag.css + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.separator.key-value.css + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.terminator.rule.css + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.other.attribute-name.pseudo-element.css + excludes: [] + - path: + clear_stack: [] + scopes: + - entity.other.attribute-name.pseudo-class.css + excludes: [] + - path: + clear_stack: [] + scopes: + - entity.other.attribute-name.pseudo-selector.css + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.other.less + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.other.less.mixin + excludes: [] + style: + foreground: + r: 224 + g: 253 + b: 206 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.other.attribute-name.pseudo-element.less + excludes: [] + style: + foreground: + r: 255 + g: 145 + b: 23 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.instance.constructor + - meta.function-call.constructor.js + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.template.expression.js + - punctuation.definition.template-expression.begin.js + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.template.expression.js + - punctuation.definition.template-expression.end.js + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.template.expression.js + - punctuation.accessor + excludes: [] + style: + foreground: + r: 175 + g: 241 + b: 50 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.function.js + excludes: [] + - path: + clear_stack: [] + scopes: + - entity.name.function.js + excludes: [] + - path: + clear_stack: [] + scopes: + - support.function.dom.js + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - source.js + - meta.function.js + - punctuation.separator.parameter.function.js + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.property.object.js + excludes: [] + - path: + clear_stack: [] + scopes: + - keyword.operator.accessor.js + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - source.js + - meta.group.braces.curly + - constant.other.object.key.js + - punctuation.separator.key-value.js + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - source.js + - meta.group.braces.curly + - constant.other.object.key.js + - string.unquoted.label.js + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.type.object.module.js + excludes: [] + - path: + clear_stack: [] + scopes: + - source.js + - meta.function.declaration.js + - support.class.js + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.type.object.module.js + - support.type.object.module.js + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage.type.js + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - text.html.basic + - source.js.embedded.html + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage.type.function.js + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.numeric.js + excludes: [] + style: + foreground: + r: 174 + g: 129 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.language.arguments.js + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.language.super.js + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.language.this.js + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.language.self.js + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.language.proto.js + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.language.constructor.js + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.language.prototype.js + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.brace.square.js + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.brace.round + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.parameters.begin.js + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.parameters.end.js + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.group + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.brace.curly.js + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.object-literal.js + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.mapping.key.json + - string.quoted.double.json + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.separator.sequence.csv + excludes: [] + style: + foreground: + r: 253 + g: 151 + b: 31 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.section.embedded.coffee + excludes: [] + style: + foreground: + r: 230 + g: 159 + b: 102 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.operator.index-start.php + excludes: [] + - path: + clear_stack: [] + scopes: + - keyword.operator.index-end.php + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.array.php + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.array.php + - support.function.construct.php + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.array.empty.php + - support.function.construct.php + excludes: [] + style: + foreground: + r: 228 + g: 46 + b: 112 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.function.construct.php + excludes: [] + style: + foreground: + r: 228 + g: 46 + b: 112 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage.type.function.php + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 221 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.numeric.php + excludes: [] + style: + foreground: + r: 190 + g: 132 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.other.new.php + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.class.php + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.other.property.php + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage.modifier.extends.php + excludes: [] + - path: + clear_stack: [] + scopes: + - storage.type.class.php + excludes: [] + - path: + clear_stack: [] + scopes: + - keyword.operator.class.php + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.other.inherited-class.php + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage.type.php + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.function.php + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.function.construct.php + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.type.class.php + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.function-call.php + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.function-call.static.php + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.function-call.object.php + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.other.phpdoc + excludes: [] + style: + foreground: + r: 124 + g: 120 + b: 101 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - source.php.embedded.block.html + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - invalid + excludes: [] + - path: + clear_stack: [] + scopes: + - markup.error + excludes: [] + style: + foreground: + r: 248 + g: 248 + b: 240 + a: 255 + background: + r: 249 + g: 38 + b: 114 + a: 255 + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - invalid.deprecated + excludes: [] + - path: + clear_stack: [] + scopes: + - markup.warning + excludes: [] + style: + foreground: + r: 248 + g: 248 + b: 240 + a: 255 + background: + r: 174 + g: 129 + b: 255 + a: 255 + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.diff + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.diff.header + excludes: [] + style: + foreground: + r: 117 + g: 113 + b: 94 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.deleted + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.inserted + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.changed + excludes: [] + style: + foreground: + r: 230 + g: 219 + b: 116 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.diff + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.diff.range + excludes: [] + style: + foreground: + r: 59 + g: 192 + b: 240 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - storage.type.class.python + excludes: [] + - path: + clear_stack: [] + scopes: + - storage.type.function.python + excludes: [] + - path: + clear_stack: [] + scopes: + - storage.modifier.global.python + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.control.import.python + excludes: [] + - path: + clear_stack: [] + scopes: + - keyword.control.import.from.python + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 221 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.type.exception.python + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.variable.perl + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.other.readwrite.global.perl + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.other.predefined.perl + excludes: [] + - path: + clear_stack: [] + scopes: + - keyword.operator.comparison.perl + excludes: [] + style: + foreground: + r: 228 + g: 46 + b: 112 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.function.perl + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - comment.line.number-sign.perl + excludes: [] + style: + foreground: + r: 117 + g: 113 + b: 94 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.begin.perl + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.end.perl + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.character.escape.perl + excludes: [] + style: + foreground: + r: 220 + g: 50 + b: 47 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.language.ruby + excludes: [] + - path: + clear_stack: [] + scopes: + - constant.numeric.ruby + excludes: [] + style: + foreground: + r: 174 + g: 129 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.variable.ruby + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.function.method.with-arguments.ruby + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.language.ruby + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.function.ruby + excludes: [] + style: + foreground: + r: 246 + g: 170 + b: 17 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.control.ruby + excludes: [] + - path: + clear_stack: [] + scopes: + - keyword.control.def.ruby + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 1 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.control.class.ruby + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.class.ruby + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.type.class.ruby + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.control.ruby + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.class.ruby + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.other.special-method.ruby + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.other.constant.ruby + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - constant.other.symbol.ruby + excludes: [] + style: + foreground: + r: 246 + g: 240 + b: 128 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.section.embedded.ruby + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.begin.ruby + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.end.ruby + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - keyword.other.special-method.ruby + excludes: [] + style: + foreground: + r: 228 + g: 46 + b: 112 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - text.html.markdown + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - text.html.markdown + - markup.raw.inline + excludes: [] + style: + foreground: + r: 236 + g: 53 + b: 51 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - text.html.markdown + - meta.dummy.line-break + excludes: [] + style: + foreground: + r: 224 + g: 237 + b: 221 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markdown.heading + excludes: [] + - path: + clear_stack: [] + scopes: + - markup.heading + excludes: [] + - path: + clear_stack: [] + scopes: + - markup.heading + - entity.name + excludes: [] + - path: + clear_stack: [] + scopes: + - markup.heading.markdown + - punctuation.definition.heading.markdown + excludes: [] + style: + foreground: + r: 253 + g: 151 + b: 31 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.italic + excludes: [] + style: + foreground: + r: 228 + g: 46 + b: 112 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.bold + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: + bits: 1 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.underline + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 2 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.strike + excludes: [] + style: + foreground: + r: 204 + g: 66 + b: 115 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.quote + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.blockquote.markdown + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.quote + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - string.other.link.title.markdown + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 2 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.raw.block + excludes: [] + style: + foreground: + r: 174 + g: 129 + b: 255 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.list_item.markdown + excludes: [] + style: + foreground: + r: 119 + g: 119 + b: 119 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.raw.block.fenced.markdown + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: + r: 2 + g: 2 + b: 2 + a: 255 + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.fenced.markdown + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.language.fenced.markdown + excludes: [] + style: + foreground: + r: 99 + g: 96 + b: 80 + a: 255 + background: + r: 34 + g: 34 + b: 34 + a: 255 + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.language.fenced.markdown + excludes: [] + style: + foreground: + r: 124 + g: 120 + b: 101 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.separator + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 51 + background: + r: 255 + g: 255 + b: 255 + a: 15 + font_style: + bits: 1 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.table + excludes: [] + style: + foreground: + r: 180 + g: 42 + b: 29 + a: 255 + background: + r: 255 + g: 58 + b: 40 + a: 26 + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.other.math.tex + excludes: [] + style: + foreground: + r: 230 + g: 219 + b: 116 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - other.package.exclude + excludes: [] + - path: + clear_stack: [] + scopes: + - other.remove + excludes: [] + style: + foreground: + r: 211 + g: 32 + b: 31 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - support.function.builtin.shell + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.other.normal.shell + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - source.shell + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.scope.for-in-loop.shell + excludes: [] + - path: + clear_stack: [] + scopes: + - variable.other.loop.shell + excludes: [] + style: + foreground: + r: 253 + g: 151 + b: 31 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.function.shell + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.end.shell + excludes: [] + - path: + clear_stack: [] + scopes: + - punctuation.definition.string.begin.shell + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.scope.case-block.shell + excludes: [] + - path: + clear_stack: [] + scopes: + - meta.scope.case-body.shell + excludes: [] + style: + foreground: + r: 253 + g: 151 + b: 31 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.logical-expression.shell + excludes: [] + style: + foreground: + r: 255 + g: 255 + b: 255 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - comment.line.number-sign.shell + excludes: [] + style: + foreground: + r: 124 + g: 120 + b: 101 + a: 255 + background: ~ + font_style: + bits: 4 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - comment.line.number-sign.makefile + excludes: [] + style: + foreground: + r: 124 + g: 120 + b: 101 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - punctuation.definition.comment.makefile + excludes: [] + style: + foreground: + r: 124 + g: 120 + b: 101 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - variable.other.makefile + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - entity.name.function.makefile + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - meta.function.makefile + excludes: [] + style: + foreground: + r: 102 + g: 217 + b: 239 + a: 255 + background: ~ + font_style: + bits: 0 + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.deleted.git_gutter + excludes: [] + style: + foreground: + r: 249 + g: 38 + b: 114 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.inserted.git_gutter + excludes: [] + style: + foreground: + r: 166 + g: 226 + b: 46 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.changed.git_gutter + excludes: [] + style: + foreground: + r: 252 + g: 149 + b: 30 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.ignored.git_gutter + excludes: [] + style: + foreground: + r: 86 + g: 86 + b: 86 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - markup.untracked.git_gutter + excludes: [] + style: + foreground: + r: 86 + g: 86 + b: 86 + a: 255 + background: ~ + font_style: ~ + - scope: + selectors: + - path: + clear_stack: [] + scopes: + - string.other.path.nginx + excludes: [] + style: + foreground: + r: 252 + g: 149 + b: 30 + a: 255 + background: ~ + font_style: ~ + |
