Skip to main content

rl_lang/interpreter/stdlib/terminal/
scroll.rs

1use crate::interpreter::stdlib::common::{try_fn, verr, vnl, vok, vs};
2use crate::interpreter::stdlib::terminal::common::extract_u16;
3use crate::interpreter::{evaluator::Evaluator, values::Value};
4use crossterm::{
5    execute,
6    terminal::{ScrollDown, ScrollUp},
7};
8use std::io::stdout;
9
10pub fn std_term_scroll_up(_: &mut Evaluator, arg: Value) -> Value {
11    let n = match extract_u16(arg, "n") {
12        Ok(v) => v,
13        Err(e) => return verr!(vs!(e)),
14    };
15
16    try_fn!("term_scroll_up", execute!(stdout(), ScrollUp(n)));
17    vok!(vnl!())
18}
19
20pub fn std_term_scroll_down(_: &mut Evaluator, arg: Value) -> Value {
21    let n = match extract_u16(arg, "n") {
22        Ok(v) => v,
23        Err(e) => return verr!(vs!(e)),
24    };
25
26    try_fn!("term_scroll_down", execute!(stdout(), ScrollDown(n)));
27    vok!(vnl!())
28}