rl_lang/interpreter/stdlib/terminal/
move_rel.rs1use 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}