Skip to main content

rl_lang/interpreter/stdlib/terminal/
set_fg.rs

1use crate::interpreter::stdlib::common::{try_fn, verr, vnl, vok, vs};
2use crate::interpreter::stdlib::terminal::common::extract_byte;
3use crate::interpreter::{evaluator::Evaluator, values::Value};
4use crossterm::{
5    execute,
6    style::{Color, SetForegroundColor},
7};
8use std::io::stdout;
9
10pub fn func(_: &mut Evaluator, r: Value, g: Value, b: Value) -> Value {
11    let r = match extract_byte(r, "r") {
12        Ok(v) => v,
13        Err(e) => return verr!(vs!(e)),
14    };
15    let b = match extract_byte(b, "b") {
16        Ok(v) => v,
17        Err(e) => return verr!(vs!(e)),
18    };
19    let g = match extract_byte(g, "r") {
20        Ok(v) => v,
21        Err(e) => return verr!(vs!(e)),
22    };
23
24    try_fn!(
25        "term_set_fg",
26        execute!(stdout(), SetForegroundColor(Color::Rgb { r, g, b }))
27    );
28    vok!(vnl!())
29}