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
|
use crate::paths;
use crate::fail::{HError, HResult, ErrorLog};
#[derive(Debug, Clone)]
pub struct Config {
pub animation: bool,
pub show_hidden: bool,
pub select_cmd: String,
pub cd_cmd: String,
pub icons: bool
}
impl Config {
pub fn new() -> Config {
Config {
animation: true,
show_hidden: false,
select_cmd: "find -type f | fzf -m".to_string(),
cd_cmd: "find -type d | fzf".to_string(),
icons: false
}
}
pub fn load() -> HResult<Config> {
let config_path = paths::config_path()?;
if !config_path.exists() {
return Ok(Config::new());
}
let config_string = std::fs::read_to_string(config_path)?;
let config = config_string.lines().fold(Config::new(), |mut config, line| {
match Config::prep_line(line) {
Ok(("animation", "on")) => { config.animation = true; },
Ok(("animation", "off")) => { config.animation = false; },
Ok(("show_hidden", "on")) => { config.show_hidden = true; },
Ok(("show_hidden", "off")) => { config.show_hidden = false; },
Ok(("icons", "on")) => config.icons = true,
Ok(("icons", "off")) => config.icons = false,
Ok(("select_cmd", cmd)) => {
let cmd = cmd.to_string();
config.select_cmd = cmd;
}
Ok(("cd_cmd", cmd)) => {
let cmd = cmd.to_string();
config.cd_cmd = cmd;
}
_ => { HError::config_error::<Config>(line.to_string()).log(); }
}
config
});
Ok(config)
}
fn prep_line<'a>(line: &'a str) -> HResult<(&'a str, &'a str)> {
let setting = line.split("=").collect::<Vec<&str>>();
if setting.len() == 2 {
Ok((setting[0], setting[1]))
} else {
HError::config_error(line.to_string())
}
}
pub fn animate(&self) -> bool {
self.animation
}
pub fn show_hidden(&self) -> bool {
self.show_hidden
}
}
|