skimmer/
context.rs

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}