rmux_core/input/colour.rs
1//! Colour representation matching tmux colour model.
2
3/// A terminal colour value.
4///
5/// - Values 0–7 are standard colours.
6/// - Value 8 is the default colour.
7/// - `COLOUR_FLAG_256 | idx` for 256-colour palette.
8/// - `COLOUR_FLAG_RGB | (r << 16) | (g << 8) | b` for RGB.
9pub type Colour = i32;
10
11/// Default colour sentinel.
12pub const COLOUR_DEFAULT: Colour = 8;
13
14/// No-colour sentinel used by tmux `colour_tostring`.
15pub const COLOUR_NONE: Colour = -1;
16
17/// Terminal colour sentinel.
18pub const COLOUR_TERMINAL: Colour = 9;
19
20/// Flag for 256-colour palette indices.
21pub const COLOUR_FLAG_256: Colour = 0x0100_0000;
22
23/// Flag for true-colour RGB values.
24pub const COLOUR_FLAG_RGB: Colour = 0x0200_0000;
25
26/// Compose an RGB colour from r, g, b components.
27#[must_use]
28pub fn colour_join_rgb(r: u8, g: u8, b: u8) -> Colour {
29 COLOUR_FLAG_RGB | (i32::from(r) << 16) | (i32::from(g) << 8) | i32::from(b)
30}