Dynamic Colors

When working on several different servers at once, or with different user accounts, it is helpful to be able to visually identify the terminal windows by using different color schemes. This can help you to avoid accidentally typing commands into the wrong window, for example running an intensive program on the production server when you meant to run it on the development server. a4 can dynamically update the foreground, background, and full color schemes by matching with text in each terminal's title bar.

Using Color Rules

Below is the general syntax for all ColorRules in a4.ini files. The pattern of each rule is compared, in order, with the text in each terminal's title bar. When the first match is made, the specified ColorScheme is applied as well as optional foreground and background color overrides (-1 keeps the default ColorScheme foreground color). As a special case, a line containing just a single '=' character in the ColorRules section clears all previously defined rules.

[ColorRules]
<pattern> = <colorscheme name> [<fg color|-1> [<bg color>]]

As a full example, let's take an application "bar" that has separate servers for development, testing, and production. To begin, let's give each server a unique color scheme.

[ColorRules]
@bardev         = gruvbox-dark
@bartst         = solarized-dark
@barprd         = redsands
ColorRules example 1

Application "bar" is run from a privileged service account, "barsvc", and there is also some work that must be done as root. We'd like to be able to quickly identify if we're logged in with a privileged user account. Let's keep the same general server color schemes and modify the foreground text color to orange for user "barsvc", and red if we sudo to the root user account. The rules are checked in order, so it's important to put the more specific user account patterns before the more general server name patterns.

[ColorRules]
root@bardev     = gruvbox-dark   red
barsvc@bardev   = gruvbox-dark   orange
@bardev         = gruvbox-dark
root@bartst     = solarized-dark red
barsvc@bartst   = solarized-dark orange
@bartst         = solarized-dark
root@barprd     = redsands       red
barsvc@barprd   = redsands       orange
@barprd         = redsands
ColorRules example 2

As a last step, let's add a production disaster recovery server "barprddr" and give it the same colors as active production but with a 10% darker background color. These rules have to go before the active production rules because the more general "barprd" pattern matches both servers.

[ColorRules]
root@bardev     = gruvbox-dark   red
barsvc@bardev   = gruvbox-dark   orange
@bardev         = gruvbox-dark
root@bartst     = solarized-dark red
barsvc@bartst   = solarized-dark orange
@bartst         = solarized-dark
root@barprddr   = redsands       red    0x521914
barsvc@barprddr = redsands       orange 0x521914
@barprddr       = redsands       -1     0x521914
root@barprd     = redsands       red
barsvc@barprd   = redsands       orange
@barprd         = redsands
ColorRules example 3

Setting Titlebar Text

Making Color Schemes