1use std::{cell::RefCell, rc::Rc};
2
3use util::read_file_lines;
4
5use crate::prelude::*;
6
7pub struct SkimContext {
8 pub cmd_collector: Rc<RefCell<SkimItemReader>>,
9 pub query_history: Vec<String>,
10 pub cmd_history: Vec<String>,
11}
12
13impl SkimContext {
14 pub fn init_histories(&mut self, opts: &SkimOptions) {
15 if let Some(histfile) = &opts.history {
16 self.query_history.extend(read_file_lines(histfile).unwrap_or_default());
17 }
18
19 if let Some(cmd_histfile) = &opts.cmd_history {
20 self.cmd_history
21 .extend(read_file_lines(cmd_histfile).unwrap_or_default());
22 }
23 }
24}
25
26impl Default for SkimContext {
27 fn default() -> Self {
28 Self {
29 cmd_collector: Rc::new(RefCell::new(SkimItemReader::new(Default::default()))),
30 query_history: vec![],
31 cmd_history: vec![],
32 }
33 }
34}