1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Serialize, Deserialize)]
pub enum Command {
AcceptSuggestion,
Continue,
DeleteNextWord,
DeleteUntilNewLine(bool),
Multiple(Vec<Command>),
SetThinCursor,
SetWideCursor,
HandleCharacter(char),
HandleEnter(bool),
HandleAltEnter,
HandleTab,
HandleBackTab,
HandleRight,
HandleLeft,
HandleBackSpace,
HandleDelete,
HandleCtrlC,
HandleCtrlD,
HandleCtrlE,
HandleCtrlL,
HandleCtrlR,
HandleCtrlZ,
HandleUp,
HandleDown,
HandleCtrlRight,
HandleCtrlLeft,
HandleHome,
HandleEnd,
RemoveRacerSugesstion,
Exit,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GlobalVariables {
current_working_dir: PathBuf,
previous_working_dir: PathBuf,
last_loaded_code_path: Option<PathBuf>,
last_output: Option<String>,
pub operation_number: usize,
pub prompt_position: (usize, usize),
pub prompt_len: usize,
pub pid: u32,
pub is_racer_suggestion_active: bool,
}
impl Default for GlobalVariables {
fn default() -> Self {
Self::new()
}
}
impl GlobalVariables {
pub fn new() -> Self {
let cwd = std::env::current_dir().expect("Error getting current working directory");
Self {
current_working_dir: cwd.clone(),
previous_working_dir: cwd,
last_loaded_code_path: None,
last_output: None,
operation_number: 1,
prompt_position: (0, 0),
prompt_len: 0,
pid: std::process::id(),
is_racer_suggestion_active: false,
}
}
pub fn update_cwd(&mut self, cwd: PathBuf) {
self.previous_working_dir = self.current_working_dir.clone();
self.current_working_dir = cwd;
}
pub fn get_cwd(&self) -> PathBuf {
self.current_working_dir.clone()
}
pub fn get_pwd(&self) -> PathBuf {
self.previous_working_dir.clone()
}
pub fn set_last_loaded_coded_path(&mut self, path: PathBuf) {
self.last_loaded_code_path = Some(path);
}
pub fn get_last_loaded_coded_path(&self) -> Option<PathBuf> {
self.last_loaded_code_path.clone()
}
pub fn get_last_output(&self) -> Option<&String> {
self.last_output.as_ref()
}
pub fn set_last_output(&mut self, out: String) {
self.last_output = Some(out);
}
}