terminology/COLORSCHEMES.md

4.1 KiB

Color Schemes in Terminology

Terminology uses color schemes to define the usual colors used by terminal applications, and a bit more: color schemes can also have an impact on the theme used.

Configuration file

The colorschemes are stored in EET format for speed up and ease of development. This format being a bit cumbersome to edit, color schemes can be edit in an easy INI format described below.

One can have a look at data/color_schemes/Default.ini for an example.

Organisation of the file

The INI format is made of sections, where the name appears in square brackets ([ and ]), that contain keys. Every key has a name and a value, delimited by an equals sign (=).

Those value have 3 types:

  • integers, mostly used to describe versions,
  • strings, surrounded by double quotes (") or not,
  • colors, described as hex color codes, with or without alpha channels, like #00ffcc or #00ff00aa.

Semicolons (;) at the beginning of the line indicate a comment.

The color scheme file contains the following sections that are mandatory: Main, Metadata, Colors, Normal, Bright, Faint and BrightFaint.

Main

This section has only one field version with a default of 1. In case the format has to change, this value will change.

Metadata

This describes everything that is related to the color scheme but is not actually a color! The fields are the following:

  • version: an integer, this is the version of the color scheme itself
  • name is the name of the color scheme. It is expected to be the same as the file name without the .ini extension
  • author: who made this color scheme
  • website
  • license: the short code of an opensource-approved license as listed on https://spdx.org/licenses/

Colors

This section describes colors used in the UI. The fields are:

  • bg: the background color of the terminal
  • main: this color is used as the main color for cursor and various effects on the terminal, like change of border on focus …
  • hl: a color used for an object or text when being highlighted. Usually surrounded by the main color.
  • end_sel: on selections, the color of the handles used to expand or shrink the area of the selection
  • tab_missed_1, tab_missed_2, tab_missed_3: the main color, the outline color and the shadow color of the number of tabs where a bell has rung, tabs that need attention.
  • tab_missed_over_1, tab_missed_over_2, tab_missed_over_3: same as before but when the mouse is over that number
  • tab_title_2: the outline color of the active tab title. The foreground used is Normal.def and the shadow is bg.

Normal, Bright, Faint, BrightFaint

All those sections offer the same set of colors. Normal are the base colors. Bright are a brighter version of the Normal colors, while Faint are a dimer version of the Normal colors. Finally, BrightFaint are a dimer version of the Bright colors.

They all have those fields:

  • def: the default foreground color
  • black, red, green, yellow, blue, magenta, cyan and white are self-explanatory
  • inverse_fg and inverse_fg are the colors used when espace codes are used to reverse background and foreground. Sometimes used to display selections by the terminal applications

How to add a new color scheme

First, one has to write a color scheme file as described above. Let's say we are creating the color scheme FooBar stored in file FooBar.ini.

The Faint and BrightFaint version can be generated by using the gen_faint.py script stored in data/color_schemes/ as seen below: gen_faint.py FooBar.ini

What this script does is to pick the colors from Normal and Bright and merge them with the background color (Colors.bg) in a 70/30 proportion. This proportion is configurable, like this for a 80/20 proportion: gen_faint.py FooBar.ini 80

Now that we are happy with the content of FooBar.ini, we can call the script add_color_scheme.sh stored in data/color_schemes/ as seen below: add_color_scheme.sh eet ~/.config/terminology/colorschemes/FooBar.eet FooBar.ini

Now you should be able to select your color scheme in Terminology!