Crate terminal_colorsaurus

source ·
Expand description

Determines the background and foreground color of the terminal using the OSC 10 and OSC 11 terminal sequence.

This crate helps answer the question “Is this terminal dark or light?”.

Windows is not supported.

§Features

  • Background and foreground color detection.
  • Uses a timeout (for situations with high latency such as an SSH connection).
  • Correct perceived lightness calculation.
  • Works even if all of stderr, stdout and stdin are redirected.
  • Safely restores the terminal from raw mode even if the library errors or panicks.
  • Does not send any escape sequences if TERM=dumb.

§Example 1: Test If the Terminal Uses a Dark Background

use terminal_colorsaurus::{color_scheme, QueryOptions, ColorScheme};

let color_scheme = color_scheme(QueryOptions::default()).unwrap();
dbg!(color_scheme == ColorScheme::Dark);

§Example 2: Query for the Terminal’s Foreground Color

use terminal_colorsaurus::{foreground_color, QueryOptions};

let fg = foreground_color(QueryOptions::default()).unwrap();
println!("rgb({}, {}, {})", fg.r, fg.g, fg.b);

§Terminals

The following terminals have known support or non-support for querying for the background/foreground colors.

Note that terminals that support the relevant terminal sequences automatically work with this library even if they are not explicitly listed below.

Supported
  • Alacritty
  • Contour
  • foot
  • GNOME Terminal, (GNOME) Console, MATE Terminal, XFCE Terminal, (elementary) Terminal, LXTerminal
  • Hyper
  • The builtin terminal of JetBrains IDEs (i.e. IntelliJ IDEA, …)
  • iTerm2
  • kitty
  • Konsole
  • macOS Terminal
  • Rio
  • st
  • Terminology
  • Termux
  • tmux (next-3.4)
  • urxvt (rxvt-unicode)
  • VSCode (xterm.js)
  • WezTerm
  • xterm
Unsupported
  • linux
  • Jetbrains Fleet
  • iSH

§Optional Dependencies

§Comparison with Other Crates

§termbg

  • Is hardcoded to use stdin/stderr for communicating with the terminal.
    This means that it does not work if some or all of these streams are redirected.
  • Pulls in an async runtime for the timeout.
  • Does not calculate the perceived lightness, but another metric.

§terminal-light

  • Is hardcoded to use stdin/stdout for communicating with the terminal.
  • Does not report the colors, only the color’s luma.
  • Does not calculate the perceived lightness, but another metric.

Modules§

  • How does colorsaurus detect if a terminal supports querying its colors?
  • What kind of latency do I have to expect?
  • A list of terminals that were tested for support of OSC 10 / OSC 11 and DA1 (= CSI c).
  • Why is Windows not supported?

Structs§

Enums§

  • The color scheme of the terminal.
  • An error returned by this library.

Functions§

  • Queries the terminal for it’s background color.
    If you also need the foreground color it is more efficient to use color_palette instead.
  • Queries the terminal for it’s color scheme (foreground and background color).
  • Detects if the terminal is dark or light.
  • Queries the terminal for it’s foreground color.
    If you also need the foreground color it is more efficient to use color_palette instead.

Type Aliases§

  • Result used by this library.