From bb6594e69188a457239654d5d7f7f08fbfef6629 Mon Sep 17 00:00:00 2001 From: Mitchell Kember Date: Sat, 27 Apr 2019 12:48:56 -0400 Subject: [PATCH] Add 3 new themes: ansi-light, ansi-dark, base16 Also, interpret transparent colors (#RRGGBB00) as specifying a terminal color palette number with RR. The three new themes use this. --- assets/themes/ansi-dark.tmTheme | 504 ++++++++++++++++++++++++++++ assets/themes/ansi-light.tmTheme | 504 ++++++++++++++++++++++++++++ assets/themes/base16.tmTheme | 543 +++++++++++++++++++++++++++++++ src/terminal.rs | 8 +- 4 files changed, 1558 insertions(+), 1 deletion(-) create mode 100644 assets/themes/ansi-dark.tmTheme create mode 100644 assets/themes/ansi-light.tmTheme create mode 100644 assets/themes/base16.tmTheme diff --git a/assets/themes/ansi-dark.tmTheme b/assets/themes/ansi-dark.tmTheme new file mode 100644 index 00000000..a7976951 --- /dev/null +++ b/assets/themes/ansi-dark.tmTheme @@ -0,0 +1,504 @@ + + + + + + author + Template: Chris Kempson, Scheme: Mitchell Kember + name + ANSI Dark + colorSpaceName + sRGB + settings + + + settings + + background + #00000000 + caret + #07000000 + foreground + #07000000 + invisibles + #07000000 + lineHighlight + #07000000 + selection + #07000000 + gutter + #00000000 + gutterForeground + #07000000 + + + + name + Text + scope + variable.parameter.function + settings + + foreground + #07000000 + + + + name + Comments + scope + comment, punctuation.definition.comment + settings + + foreground + #02000000 + + + + name + Punctuation + scope + punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array + settings + + foreground + #07000000 + + + + name + Delimiters + scope + none + settings + + foreground + #07000000 + + + + name + Operators + scope + keyword.operator + settings + + foreground + #07000000 + + + + name + Keywords + scope + keyword + settings + + foreground + #05000000 + + + + name + Variables + scope + variable + settings + + foreground + #07000000 + + + + name + Functions + scope + entity.name.function, meta.require, support.function.any-method + settings + + foreground + #04000000 + + + + name + Labels + scope + entity.name.label + settings + + foreground + #06000000 + + + + name + Classes + scope + support.class, entity.name.class, entity.name.type.class + settings + + foreground + #03000000 + + + + name + Classes + scope + meta.class + settings + + foreground + #07000000 + + + + name + Methods + scope + keyword.other.special-method + settings + + foreground + #04000000 + + + + name + Storage + scope + storage + settings + + foreground + #05000000 + + + + name + Support + scope + support.function + settings + + foreground + #06000000 + + + + name + Strings, Inherited Class + scope + string, constant.other.symbol, entity.other.inherited-class + settings + + foreground + #02000000 + + + + name + Integers + scope + constant.numeric + settings + + foreground + #03000000 + + + + name + Floats + scope + none + settings + + foreground + #03000000 + + + + name + Boolean + scope + none + settings + + foreground + #03000000 + + + + name + Constants + scope + constant + settings + + foreground + #03000000 + + + + name + Tags + scope + entity.name.tag + settings + + foreground + #01000000 + + + + name + Attributes + scope + entity.other.attribute-name + settings + + foreground + #03000000 + + + + name + Attribute IDs + scope + entity.other.attribute-name.id, punctuation.definition.entity + settings + + foreground + #04000000 + + + + name + Selector + scope + meta.selector + settings + + foreground + #05000000 + + + + name + Values + scope + none + settings + + foreground + #03000000 + + + + name + Headings + scope + markup.heading punctuation.definition.heading, entity.name.section + settings + + fontStyle + + foreground + #04000000 + + + + name + Units + scope + keyword.other.unit + settings + + foreground + #03000000 + + + + name + Bold + scope + markup.bold, punctuation.definition.bold + settings + + fontStyle + bold + foreground + #03000000 + + + + name + Italic + scope + markup.italic, punctuation.definition.italic + settings + + fontStyle + italic + foreground + #05000000 + + + + name + Code + scope + markup.raw.inline + settings + + foreground + #02000000 + + + + name + Link Text + scope + string.other.link, punctuation.definition.string.end.markdown, punctuation.definition.string.begin.markdown + settings + + foreground + #01000000 + + + + name + Link Url + scope + meta.link + settings + + foreground + #03000000 + + + + name + Quotes + scope + markup.quote + settings + + foreground + #03000000 + + + + name + Inserted + scope + markup.inserted + settings + + foreground + #02000000 + + + + name + Deleted + scope + markup.deleted + settings + + foreground + #01000000 + + + + name + Changed + scope + markup.changed + settings + + foreground + #05000000 + + + + name + Colors + scope + constant.other.color + settings + + foreground + #06000000 + + + + name + Regular Expressions + scope + string.regexp + settings + + foreground + #06000000 + + + + name + Escape Characters + scope + constant.character.escape + settings + + foreground + #06000000 + + + + name + Embedded + scope + punctuation.section.embedded, variable.interpolation + settings + + foreground + #05000000 + + + + name + Illegal + scope + invalid.illegal + settings + + background + #01000000 + foreground + #07000000 + + + + name + Broken + scope + invalid.broken + settings + + background + #03000000 + foreground + #00000000 + + + + uuid + uuid + + diff --git a/assets/themes/ansi-light.tmTheme b/assets/themes/ansi-light.tmTheme new file mode 100644 index 00000000..5dfb94e8 --- /dev/null +++ b/assets/themes/ansi-light.tmTheme @@ -0,0 +1,504 @@ + + + + + + author + Template: Chris Kempson, Scheme: Mitchell Kember + name + ANSI Light + colorSpaceName + sRGB + settings + + + settings + + background + #07000000 + caret + #00000000 + foreground + #00000000 + invisibles + #00000000 + lineHighlight + #00000000 + selection + #00000000 + gutter + #07000000 + gutterForeground + #00000000 + + + + name + Text + scope + variable.parameter.function + settings + + foreground + #00000000 + + + + name + Comments + scope + comment, punctuation.definition.comment + settings + + foreground + #02000000 + + + + name + Punctuation + scope + punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array + settings + + foreground + #00000000 + + + + name + Delimiters + scope + none + settings + + foreground + #00000000 + + + + name + Operators + scope + keyword.operator + settings + + foreground + #00000000 + + + + name + Keywords + scope + keyword + settings + + foreground + #05000000 + + + + name + Variables + scope + variable + settings + + foreground + #00000000 + + + + name + Functions + scope + entity.name.function, meta.require, support.function.any-method + settings + + foreground + #04000000 + + + + name + Labels + scope + entity.name.label + settings + + foreground + #06000000 + + + + name + Classes + scope + support.class, entity.name.class, entity.name.type.class + settings + + foreground + #03000000 + + + + name + Classes + scope + meta.class + settings + + foreground + #00000000 + + + + name + Methods + scope + keyword.other.special-method + settings + + foreground + #04000000 + + + + name + Storage + scope + storage + settings + + foreground + #05000000 + + + + name + Support + scope + support.function + settings + + foreground + #06000000 + + + + name + Strings, Inherited Class + scope + string, constant.other.symbol, entity.other.inherited-class + settings + + foreground + #02000000 + + + + name + Integers + scope + constant.numeric + settings + + foreground + #03000000 + + + + name + Floats + scope + none + settings + + foreground + #03000000 + + + + name + Boolean + scope + none + settings + + foreground + #03000000 + + + + name + Constants + scope + constant + settings + + foreground + #03000000 + + + + name + Tags + scope + entity.name.tag + settings + + foreground + #01000000 + + + + name + Attributes + scope + entity.other.attribute-name + settings + + foreground + #03000000 + + + + name + Attribute IDs + scope + entity.other.attribute-name.id, punctuation.definition.entity + settings + + foreground + #04000000 + + + + name + Selector + scope + meta.selector + settings + + foreground + #05000000 + + + + name + Values + scope + none + settings + + foreground + #03000000 + + + + name + Headings + scope + markup.heading punctuation.definition.heading, entity.name.section + settings + + fontStyle + + foreground + #04000000 + + + + name + Units + scope + keyword.other.unit + settings + + foreground + #03000000 + + + + name + Bold + scope + markup.bold, punctuation.definition.bold + settings + + fontStyle + bold + foreground + #03000000 + + + + name + Italic + scope + markup.italic, punctuation.definition.italic + settings + + fontStyle + italic + foreground + #05000000 + + + + name + Code + scope + markup.raw.inline + settings + + foreground + #02000000 + + + + name + Link Text + scope + string.other.link, punctuation.definition.string.end.markdown, punctuation.definition.string.begin.markdown + settings + + foreground + #01000000 + + + + name + Link Url + scope + meta.link + settings + + foreground + #03000000 + + + + name + Quotes + scope + markup.quote + settings + + foreground + #03000000 + + + + name + Inserted + scope + markup.inserted + settings + + foreground + #02000000 + + + + name + Deleted + scope + markup.deleted + settings + + foreground + #01000000 + + + + name + Changed + scope + markup.changed + settings + + foreground + #05000000 + + + + name + Colors + scope + constant.other.color + settings + + foreground + #06000000 + + + + name + Regular Expressions + scope + string.regexp + settings + + foreground + #06000000 + + + + name + Escape Characters + scope + constant.character.escape + settings + + foreground + #06000000 + + + + name + Embedded + scope + punctuation.section.embedded, variable.interpolation + settings + + foreground + #05000000 + + + + name + Illegal + scope + invalid.illegal + settings + + background + #01000000 + foreground + #00000000 + + + + name + Broken + scope + invalid.broken + settings + + background + #03000000 + foreground + #07000000 + + + + uuid + uuid + + diff --git a/assets/themes/base16.tmTheme b/assets/themes/base16.tmTheme new file mode 100644 index 00000000..eff2eba4 --- /dev/null +++ b/assets/themes/base16.tmTheme @@ -0,0 +1,543 @@ + + + + + + author + Template: Chris Kempson, Scheme: Mitchell Kember + name + Base16 + colorSpaceName + sRGB + settings + + + settings + + background + #00000000 + caret + #07000000 + foreground + #07000000 + invisibles + #08000000 + lineHighlight + #08000000 + selection + #0b000000 + gutter + #0a000000 + gutterForeground + #08000000 + + + + name + Text + scope + variable.parameter.function + settings + + foreground + #07000000 + + + + name + Comments + scope + comment, punctuation.definition.comment + settings + + foreground + #08000000 + + + + name + Punctuation + scope + punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array + settings + + foreground + #07000000 + + + + name + Delimiters + scope + none + settings + + foreground + #07000000 + + + + name + Operators + scope + keyword.operator + settings + + foreground + #07000000 + + + + name + Keywords + scope + keyword + settings + + foreground + #05000000 + + + + name + Variables + scope + variable + settings + + foreground + #07000000 + + + + name + Functions + scope + entity.name.function, meta.require, support.function.any-method + settings + + foreground + #04000000 + + + + name + Labels + scope + entity.name.label + settings + + foreground + #0e000000 + + + + name + Classes + scope + support.class, entity.name.class, entity.name.type.class + settings + + foreground + #03000000 + + + + name + Classes + scope + meta.class + settings + + foreground + #0f000000 + + + + name + Methods + scope + keyword.other.special-method + settings + + foreground + #04000000 + + + + name + Storage + scope + storage + settings + + foreground + #05000000 + + + + name + Support + scope + support.function + settings + + foreground + #06000000 + + + + name + Strings, Inherited Class + scope + string, constant.other.symbol, entity.other.inherited-class + settings + + foreground + #02000000 + + + + name + Integers + scope + constant.numeric + settings + + foreground + #09000000 + + + + name + Floats + scope + none + settings + + foreground + #09000000 + + + + name + Boolean + scope + none + settings + + foreground + #09000000 + + + + name + Constants + scope + constant + settings + + foreground + #09000000 + + + + name + Tags + scope + entity.name.tag + settings + + foreground + #01000000 + + + + name + Attributes + scope + entity.other.attribute-name + settings + + foreground + #09000000 + + + + name + Attribute IDs + scope + entity.other.attribute-name.id, punctuation.definition.entity + settings + + foreground + #04000000 + + + + name + Selector + scope + meta.selector + settings + + foreground + #05000000 + + + + name + Values + scope + none + settings + + foreground + #09000000 + + + + name + Headings + scope + markup.heading punctuation.definition.heading, entity.name.section + settings + + fontStyle + + foreground + #04000000 + + + + name + Units + scope + keyword.other.unit + settings + + foreground + #09000000 + + + + name + Bold + scope + markup.bold, punctuation.definition.bold + settings + + fontStyle + bold + foreground + #03000000 + + + + name + Italic + scope + markup.italic, punctuation.definition.italic + settings + + fontStyle + italic + foreground + #05000000 + + + + name + Code + scope + markup.raw.inline + settings + + foreground + #02000000 + + + + name + Link Text + scope + string.other.link, punctuation.definition.string.end.markdown, punctuation.definition.string.begin.markdown + settings + + foreground + #01000000 + + + + name + Link Url + scope + meta.link + settings + + foreground + #09000000 + + + + name + Quotes + scope + markup.quote + settings + + foreground + #09000000 + + + + name + Separator + scope + meta.separator + settings + + background + #0b000000 + foreground + #07000000 + + + + name + Inserted + scope + markup.inserted + settings + + foreground + #02000000 + + + + name + Deleted + scope + markup.deleted + settings + + foreground + #01000000 + + + + name + Changed + scope + markup.changed + settings + + foreground + #05000000 + + + + name + Colors + scope + constant.other.color + settings + + foreground + #06000000 + + + + name + Regular Expressions + scope + string.regexp + settings + + foreground + #06000000 + + + + name + Escape Characters + scope + constant.character.escape + settings + + foreground + #06000000 + + + + name + Embedded + scope + punctuation.section.embedded, variable.interpolation + settings + + foreground + #05000000 + + + + name + Illegal + scope + invalid.illegal + settings + + background + #01000000 + foreground + #0f000000 + + + + name + Broken + scope + invalid.broken + settings + + background + #09000000 + foreground + #00000000 + + + + name + Deprecated + scope + invalid.deprecated + settings + + background + #0e000000 + foreground + #0f000000 + + + + name + Unimplemented + scope + invalid.unimplemented + settings + + background + #08000000 + foreground + #0f000000 + + + + uuid + uuid + + diff --git a/src/terminal.rs b/src/terminal.rs index f01e9d60..b02e8618 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -6,7 +6,13 @@ use ansi_term::{self, Style}; use syntect::highlighting::{self, FontStyle}; pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term::Colour { - if true_color { + if color.a == 0 { + // Themes can specify one of the user-configurable terminal colors by + // encoding them as #RRGGBBAA with AA set to 00 (transparent) and RR set + // to the color palette number. The built-in themes ansi-light, + // ansi-dark, and base16 use this. + Fixed(color.r) + } else if true_color { RGB(color.r, color.g, color.b) } else { Fixed(ansi_colours::ansi256_from_rgb((color.r, color.g, color.b)))