From 9d5fd0428cf43de1627825e7e27b3b9867af33c5 Mon Sep 17 00:00:00 2001 From: Justine Pelletreau Date: Fri, 3 Feb 2023 16:05:38 +0100 Subject: [PATCH] Removed some backup file --- src/shell/autocomplete_old.rs | 205 ---------------------------------- 1 file changed, 205 deletions(-) delete mode 100644 src/shell/autocomplete_old.rs diff --git a/src/shell/autocomplete_old.rs b/src/shell/autocomplete_old.rs deleted file mode 100644 index b1da450..0000000 --- a/src/shell/autocomplete_old.rs +++ /dev/null @@ -1,205 +0,0 @@ -use which::which_re; -use regex::Regex; -use std::path::PathBuf; -use std::{env, fs}; - - -pub fn autocomplete(input: &String) -> (String, String) { - if !input.contains(' ') && !input.contains("./") { - return autocomplete_cmd(input); - } else { - match autocomplete_file(input) { - Ok(t) => return t, - Err(e) => { - println!("\n\r{}", e); - return (String::from(input), String::new()); - }, - }; - } -} - -///Look for a file using the string after the last space in the input, -///in the current folder. -fn autocomplete_file(input: &String) -> std::io::Result<(String, String)> { - - //Keep the last part of the cmd... - let mut input_searchee = match input - .split(' ') - .collect::>() - .last() - .copied() { - Some(c) => c, - None => { - return Ok((String::from(""), String::from(""))); - }, - }; - - //And also the beginning ! - let mut input_buff = input - .split(' ') - .collect::>(); - _ = input_buff.pop(); - let input_origin = format!("{} ", input_buff.join(" ")); - - //Store the results - let mut results = Vec::new(); - - //Where do we search ? - let mut folder_to_search = PathBuf::new(); - //Display folder in search result ? - let mut searching_not_current = false; - //Searching somewhere else... - //Here we need to correctly divide the string into the folder - //and the searched file itself. The next 10 lines or so of code - //suck, but sometimes Rust pisses in your boots. - if input_searchee.contains('/') { - //Correctly taking first and last part... - let splitted_searchstring = &input_searchee.split('/'); - let trimmed_searchee = &splitted_searchstring.clone().last().unwrap(); - let splitted_searchstring = &mut input_searchee.clone().split('/').collect::>(); - splitted_searchstring.pop(); - let mut tosearch = splitted_searchstring.join("/"); - tosearch.push_str("/"); - folder_to_search.push(tosearch); - *&mut input_searchee = &trimmed_searchee; - *&mut searching_not_current = true; - //Searching the current folder - } else { - folder_to_search = env::current_dir()?; - } - - //Search happens 'round here - let mut all_res = String::new(); - let mut nbr_found: u16 = 0; - let mut last_found = String::new(); - - for file in fs::read_dir(&folder_to_search)? { - let filepath = file.unwrap().path(); - let filename = filepath - .iter() - .last() - .unwrap() - .to_str() - .unwrap(); - let re = format!("^{}.*$", input_searchee); - let regex = Regex::new(&re).unwrap(); - if regex.is_match(filename) { - if !searching_not_current { - *&mut results.push(format!("{}", filename)); - } else { - *&mut results.push(format!("{}{}", &folder_to_search.display(), filename)); - } - *&mut nbr_found += 1; - let matchline = &format!("\r\n* {}", filename); - &mut all_res.push_str(&matchline); - - //if what we found is a folder, we add an / after - let fullpath = format!("{}/{}", &folder_to_search.display(), filename); - let md = fs::metadata(fullpath).unwrap(); - //Will be added to the end of the result - let mut ending = String::new(); - if md.is_dir() { - *&mut ending.push_str("/"); - } - - if searching_not_current { - *&mut last_found = format!("{}{}{}{}", - &input_origin, - &folder_to_search.display(), - filename, - ending); - } else { - *&mut last_found = format!("{}{}{}", - &input_origin, - filename, - ending); - } - } - } - //Found one or zero, use what has been found directly - if nbr_found < 2 { - - return Ok((last_found, String::new())); - //Otherwise, just display a list and use what all the results have in common - } else { - let longest = find_common_chars(results); - let ret_string = format!("{}{}", input_origin, &longest); - return Ok((ret_string, all_res)); - } -} - - -fn autocomplete_cmd(input: &String) -> (String, String) { - let found_bins = find_bin(input); - if found_bins.len() == 1 { - let aaa = found_bins.clone(); - let bbb = &aaa[0] - .iter() - .last() - .unwrap(); - let res_string = String::from(bbb.to_str().unwrap()); - let res_list = res_string.clone(); - return (res_string, res_list); - } else if found_bins.len() == 0 { - let list = String::from("Nothing adequate."); - let res = String::from(input); - return (res, list); - } else { - let mut all_res = String::new(); - for path in found_bins { - let buff = String::from(path - .iter() - .last() - .unwrap() - .to_str() - .unwrap()); - let res_line = format!("* {}\r\n", buff); - all_res.push_str(&res_line); - } - let first_res = String::from(input); - return(first_res, all_res) - - } -} - -///Takes a string and returns a Vector of PathBuf containing all matchings -///commands -fn find_bin(command: &String) -> Vec { - let re = format!("^{}.*", command); - let re = Regex::new(&re).unwrap(); - let binaries: Vec = which_re(re).unwrap().collect(); - return binaries; -} - -fn find_common_chars(mut strvec: Vec) -> String { - let first_word = strvec[0].clone(); - strvec.remove(0); - let mut answer = String::new(); - let mut counter: usize = 0; - let mut still_ok = true; - - for letter in first_word.chars() { - for word in &strvec { - if *&still_ok == true { - match word.chars().nth(counter) { - Some(l) => { - if l != letter { - *&mut still_ok = false; - } - }, - None => { - *&mut still_ok = false; - }, - }; - } - } - if still_ok == true { - *&mut answer.push(letter); - *&mut counter += 1; - } - } - //answer.pop(); - return answer; -} - -