Skip to main content

rl_lang/interpreter/stdlib/terminal/
move_rel.rs

1use crate::interpreter::{
2    evaluator::Evaluator,
3    stdlib::{
4        common::{try_fn, verr, vnl, vok, vs},
5        terminal::common::extract_u16,
6    },
7    values::Value,
8};
9use crossterm::{
10    cursor::{MoveDown, MoveLeft, MoveRight, MoveToNextLine, MoveToPreviousLine, MoveUp},
11    execute,
12};
13use std::io::stdout;
14
15pub fn std_term_move_up(_: &mut Evaluator, arg: Value) -> Value {
16    let n = match extract_u16(arg, "n") {
17        Ok(v) => v,
18        Err(e) => return verr!(vs!(e)),
19    };
20    try_fn!("term_move_up", execute!(stdout(), MoveUp(n)));
21
22    vok!(vnl!())
23}
24
25pub fn std_term_move_down(_: &mut Evaluator, arg: Value) -> Value {
26    let n = match extract_u16(arg, "n") {
27        Ok(v) => v,
28        Err(e) => return verr!(vs!(e)),
29    };
30    try_fn!("term_move_down", execute!(stdout(), MoveDown(n)));
31
32    vok!(vnl!())
33}
34
35pub fn std_term_move_left(_: &mut Evaluator, arg: Value) -> Value {
36    let n = match extract_u16(arg, "n") {
37        Ok(v) => v,
38        Err(e) => return verr!(vs!(e)),
39    };
40    try_fn!("term_move_left", execute!(stdout(), MoveLeft(n)));
41
42    vok!(vnl!())
43}
44
45pub fn std_term_move_right(_: &mut Evaluator, arg: Value) -> Value {
46    let n = match extract_u16(arg, "n") {
47        Ok(v) => v,
48        Err(e) => return verr!(vs!(e)),
49    };
50    try_fn!("term_move_right", execute!(stdout(), MoveRight(n)));
51
52    vok!(vnl!())
53}
54
55pub fn std_term_next_line(_: &mut Evaluator, arg: Value) -> Value {
56    let n = match extract_u16(arg, "n") {
57        Ok(v) => v,
58        Err(e) => return verr!(vs!(e)),
59    };
60    try_fn!("term_next_line", execute!(stdout(), MoveToNextLine(n)));
61
62    vok!(vnl!())
63}
64
65pub fn std_term_prev_line(_: &mut Evaluator, arg: Value) -> Value {
66    let n = match extract_u16(arg, "n") {
67        Ok(v) => v,
68        Err(e) => return verr!(vs!(e)),
69    };
70
71    try_fn!("term_prev_line", execute!(stdout(), MoveToPreviousLine(n)));
72
73    vok!(vnl!())
74}