Colors
Okay, so far so good. We can use macros like @red
and the tprint
function to print colored strings. But so far we've only been using few named colors, but..
there's a whole rainbow
of colors out there
so how can we use different kinds of colors? It's all done through Term
's markup syntax of course. Look:
tprint("{(255, 50, 100)}colors!{/(255, 50, 100)}"; highlight=false)
colors!
yep, you can pass a set of (r, g, b)
values and that'll do it. Personally, I prefer working with hex codes, and so Term
can accept them too:
indigo = "#42A5F5"
tprint("Some {$indigo}color!{/$indigo}"; highlight=false)
Some color!
Under the hood
What Term
is doing here is taking each bit of style information in the markup tag (each word or each (...)
within {...}
) and constructing style codes with an ANSICode
object.
If the style information represents a color, Term
first represents it as a AbstractColor
type: NamedColor
or BitColor
or RGBColor
.
NamedColor
objects represent simple colors like red
and blue
, BitColor
represent 16-bit colors like dark_goldenrod
and RGBColor
, surprisingly, represents rgb-style colors. There's no method to represent hex colors as these are converted into rgb first.
The distinction between NamedColor
, BitColor
and RGBColor
is necessary because the three color styles are represented by a different syntax in the ANSI codes. Naturally, Term
users won't normally worry about this and can use whichever color formulation is most convenient.
Theme
Term defines a Theme
type that carries styling information used throughout. It tells highlight
what color things should be, it stores the colors of elements of Tree, and of the Repr functionality.
import Term: Theme, set_theme, TERM_THEME
default = TERM_THEME[]
╭──── Theme: default ────────────────────────────────────────────╮
│ │
│ ■■ name │
│ ■■ docstring │
│ ■■ string │
│ ■■ type │
│ ■■ code │
│ ■■ multiline_code │
│ ■■ symbol │
│ ■■ expression │
│ ■■ number │
│ ■■ operator │
│ ■■ func │
│ ■■ link │
│ ■■ text │
│ ■■ text_accent │
│ ■■ emphasis │
│ ■■ emphasis_light │
│ ■■ line │
│ ROUNDED box │
│ ■■ info │
│ ■■ debug │
│ ■■ warn │
│ ■■ error │
│ ■■ logmsg │
│ ■■ tree_mid │
│ ■■ tree_terminator │
│ ■■ tree_skip │
│ ■■ tree_dash │
│ ■■ tree_trunc │
│ ■■ tree_pair │
│ ■■ tree_keys │
│ ■■ tree_title │
│ 44 tree_max_leaf_width │
│ ■■ repr_accent │
│ ■■ repr_name │
│ ■■ repr_type │
│ ■■ repr_values │
│ ■■ repr_line │
│ ■■ repr_panel │
│ ■■ repr_array_panel │
│ ■■ repr_array_title │
│ ■■ repr_array_text │
│ ■■ err_accent │
│ ■■ er_bt │
│ ■■ err_btframe_panel │
│ ■■ err_filepath │
│ ■■ err_errmsg │
│ ■■ inspect_highlight │
│ ■■ inspect_accent │
│ ■■ progress_accent │
│ ■■ progress_elapsedcol_default │
│ ■■ progress_etacol_default │
│ ■■ progress_spiner_default │
│ ■■ progress_spinnerdone_default │
│ ■■ dendo_title │
│ ■■ dendo_pretitle │
│ ■■ dendo_leaves │
│ ■■ dendo_lines │
│ ■■ md_h1 │
│ ■■ md_h2 │
│ ■■ md_h3 │
│ ■■ md_h4 │
│ ■■ md_h5 │
│ ■■ md_h6 │
│ ■■ md_latex │
│ ■■ md_code │
│ ■■ md_codeblock_bg │
│ ■■ md_quote │
│ ■■ md_footnote │
│ ■■ md_table_header │
│ ■■ md_admonition_note │
│ ■■ md_admonition_info │
│ ■■ md_admonition_warning │
│ ■■ md_admonition_danger │
│ ■■ md_admonition_tip │
│ ■■ tb_style │
│ ■■ tb_header │
│ ■■ tb_columns │
│ ■■ tb_footer │
│ MINIMAL_HEAVY_HEAD tb_box │
│ ■■ prompt_text │
│ ■■ prompt_default_option │
│ ■■ prompt_options │
│ ■■ annotation_color │
│ │
╰────────────────────────────────────────────────────────────────╯
You can create a new theme with different colors:
newtheme = Theme(string="red", code="black on_white")
╭──── Theme: default ────────────────────────────────────────────╮
│ │
│ ■■ name │
│ ■■ docstring │
│ ■■ string │
│ ■■ type │
│ ■■ code │
│ ■■ multiline_code │
│ ■■ symbol │
│ ■■ expression │
│ ■■ number │
│ ■■ operator │
│ ■■ func │
│ ■■ link │
│ ■■ text │
│ ■■ text_accent │
│ ■■ emphasis │
│ ■■ emphasis_light │
│ ■■ line │
│ ROUNDED box │
│ ■■ info │
│ ■■ debug │
│ ■■ warn │
│ ■■ error │
│ ■■ logmsg │
│ ■■ tree_mid │
│ ■■ tree_terminator │
│ ■■ tree_skip │
│ ■■ tree_dash │
│ ■■ tree_trunc │
│ ■■ tree_pair │
│ ■■ tree_keys │
│ ■■ tree_title │
│ 44 tree_max_leaf_width │
│ ■■ repr_accent │
│ ■■ repr_name │
│ ■■ repr_type │
│ ■■ repr_values │
│ ■■ repr_line │
│ ■■ repr_panel │
│ ■■ repr_array_panel │
│ ■■ repr_array_title │
│ ■■ repr_array_text │
│ ■■ err_accent │
│ ■■ er_bt │
│ ■■ err_btframe_panel │
│ ■■ err_filepath │
│ ■■ err_errmsg │
│ ■■ inspect_highlight │
│ ■■ inspect_accent │
│ ■■ progress_accent │
│ ■■ progress_elapsedcol_default │
│ ■■ progress_etacol_default │
│ ■■ progress_spiner_default │
│ ■■ progress_spinnerdone_default │
│ ■■ dendo_title │
│ ■■ dendo_pretitle │
│ ■■ dendo_leaves │
│ ■■ dendo_lines │
│ ■■ md_h1 │
│ ■■ md_h2 │
│ ■■ md_h3 │
│ ■■ md_h4 │
│ ■■ md_h5 │
│ ■■ md_h6 │
│ ■■ md_latex │
│ ■■ md_code │
│ ■■ md_codeblock_bg │
│ ■■ md_quote │
│ ■■ md_footnote │
│ ■■ md_table_header │
│ ■■ md_admonition_note │
│ ■■ md_admonition_info │
│ ■■ md_admonition_warning │
│ ■■ md_admonition_danger │
│ ■■ md_admonition_tip │
│ ■■ tb_style │
│ ■■ tb_header │
│ ■■ tb_columns │
│ ■■ tb_footer │
│ MINIMAL_HEAVY_HEAD tb_box │
│ ■■ prompt_text │
│ ■■ prompt_default_option │
│ ■■ prompt_options │
│ ■■ annotation_color │
│ │
╰────────────────────────────────────────────────────────────────╯
and set it as the new theme to be used by Term:
set_theme(newtheme)
╭──── Theme: default ────────────────────────────────────────────╮
│ │
│ ■■ name │
│ ■■ docstring │
│ ■■ string │
│ ■■ type │
│ ■■ code │
│ ■■ multiline_code │
│ ■■ symbol │
│ ■■ expression │
│ ■■ number │
│ ■■ operator │
│ ■■ func │
│ ■■ link │
│ ■■ text │
│ ■■ text_accent │
│ ■■ emphasis │
│ ■■ emphasis_light │
│ ■■ line │
│ ROUNDED box │
│ ■■ info │
│ ■■ debug │
│ ■■ warn │
│ ■■ error │
│ ■■ logmsg │
│ ■■ tree_mid │
│ ■■ tree_terminator │
│ ■■ tree_skip │
│ ■■ tree_dash │
│ ■■ tree_trunc │
│ ■■ tree_pair │
│ ■■ tree_keys │
│ ■■ tree_title │
│ 44 tree_max_leaf_width │
│ ■■ repr_accent │
│ ■■ repr_name │
│ ■■ repr_type │
│ ■■ repr_values │
│ ■■ repr_line │
│ ■■ repr_panel │
│ ■■ repr_array_panel │
│ ■■ repr_array_title │
│ ■■ repr_array_text │
│ ■■ err_accent │
│ ■■ er_bt │
│ ■■ err_btframe_panel │
│ ■■ err_filepath │
│ ■■ err_errmsg │
│ ■■ inspect_highlight │
│ ■■ inspect_accent │
│ ■■ progress_accent │
│ ■■ progress_elapsedcol_default │
│ ■■ progress_etacol_default │
│ ■■ progress_spiner_default │
│ ■■ progress_spinnerdone_default │
│ ■■ dendo_title │
│ ■■ dendo_pretitle │
│ ■■ dendo_leaves │
│ ■■ dendo_lines │
│ ■■ md_h1 │
│ ■■ md_h2 │
│ ■■ md_h3 │
│ ■■ md_h4 │
│ ■■ md_h5 │
│ ■■ md_h6 │
│ ■■ md_latex │
│ ■■ md_code │
│ ■■ md_codeblock_bg │
│ ■■ md_quote │
│ ■■ md_footnote │
│ ■■ md_table_header │
│ ■■ md_admonition_note │
│ ■■ md_admonition_info │
│ ■■ md_admonition_warning │
│ ■■ md_admonition_danger │
│ ■■ md_admonition_tip │
│ ■■ tb_style │
│ ■■ tb_header │
│ ■■ tb_columns │
│ ■■ tb_footer │
│ MINIMAL_HEAVY_HEAD tb_box │
│ ■■ prompt_text │
│ ■■ prompt_default_option │
│ ■■ prompt_options │
│ ■■ annotation_color │
│ │
╰────────────────────────────────────────────────────────────────╯
╭──── Theme: default ────────────────────────────────────────────╮
│ │
│ ■■ name │
│ ■■ docstring │
│ ■■ string │
│ ■■ type │
│ ■■ code │
│ ■■ multiline_code │
│ ■■ symbol │
│ ■■ expression │
│ ■■ number │
│ ■■ operator │
│ ■■ func │
│ ■■ link │
│ ■■ text │
│ ■■ text_accent │
│ ■■ emphasis │
│ ■■ emphasis_light │
│ ■■ line │
│ ROUNDED box │
│ ■■ info │
│ ■■ debug │
│ ■■ warn │
│ ■■ error │
│ ■■ logmsg │
│ ■■ tree_mid │
│ ■■ tree_terminator │
│ ■■ tree_skip │
│ ■■ tree_dash │
│ ■■ tree_trunc │
│ ■■ tree_pair │
│ ■■ tree_keys │
│ ■■ tree_title │
│ 44 tree_max_leaf_width │
│ ■■ repr_accent │
│ ■■ repr_name │
│ ■■ repr_type │
│ ■■ repr_values │
│ ■■ repr_line │
│ ■■ repr_panel │
│ ■■ repr_array_panel │
│ ■■ repr_array_title │
│ ■■ repr_array_text │
│ ■■ err_accent │
│ ■■ er_bt │
│ ■■ err_btframe_panel │
│ ■■ err_filepath │
│ ■■ err_errmsg │
│ ■■ inspect_highlight │
│ ■■ inspect_accent │
│ ■■ progress_accent │
│ ■■ progress_elapsedcol_default │
│ ■■ progress_etacol_default │
│ ■■ progress_spiner_default │
│ ■■ progress_spinnerdone_default │
│ ■■ dendo_title │
│ ■■ dendo_pretitle │
│ ■■ dendo_leaves │
│ ■■ dendo_lines │
│ ■■ md_h1 │
│ ■■ md_h2 │
│ ■■ md_h3 │
│ ■■ md_h4 │
│ ■■ md_h5 │
│ ■■ md_h6 │
│ ■■ md_latex │
│ ■■ md_code │
│ ■■ md_codeblock_bg │
│ ■■ md_quote │
│ ■■ md_footnote │
│ ■■ md_table_header │
│ ■■ md_admonition_note │
│ ■■ md_admonition_info │
│ ■■ md_admonition_warning │
│ ■■ md_admonition_danger │
│ ■■ md_admonition_tip │
│ ■■ tb_style │
│ ■■ tb_header │
│ ■■ tb_columns │
│ ■■ tb_footer │
│ MINIMAL_HEAVY_HEAD tb_box │
│ ■■ prompt_text │
│ ■■ prompt_default_option │
│ ■■ prompt_options │
│ ■■ annotation_color │
│ │
╰────────────────────────────────────────────────────────────────╯
The default theme used by Term
is tailored for a dark terminal, if you fancy a lighter terminal experience, you might want to:
import Term: set_theme, LightTheme
set_theme(LightTheme)