3 Commits

Author SHA1 Message Date
cf6a9961d1 autocomplete fix ? 2023-11-16 16:46:28 +01:00
165f4a3a08 Autocomplete fix attempt 2023-11-16 15:32:42 +01:00
a56dc578de Update README.md
All checks were successful
continuous-integration/drone/push Build is passing
Added build badge
2023-07-14 12:25:54 +02:00
3 changed files with 17 additions and 12 deletions

View File

@ -1,4 +1,5 @@
# Sqish # Sqish
[![Build Status](http://drone.sq.lan/api/badges/Rust/sqish/status.svg)](http://drone.sq.lan/Rust/sqish)
## Sqish's goal ## Sqish's goal
Squi's Shell, aka Sqish. This is an attempt to create a simple but usable shell in Rust, because why not. The goal (for me) is also to get more familiar with Rust since I read the Rust book and want to try things out. And, at last, building and using your own tools is pretty cool. Squi's Shell, aka Sqish. This is an attempt to create a simple but usable shell in Rust, because why not. The goal (for me) is also to get more familiar with Rust since I read the Rust book and want to try things out. And, at last, building and using your own tools is pretty cool.

View File

@ -408,23 +408,23 @@ pub mod shell {
}; };
} }
fn find_next_space(current_pos: &usize, max_pos: &usize, command: &String) -> usize { fn find_next_space(current_pos: &usize, max_pos: &usize, command: &String) -> usize {
let markers = vec![' ', '!', ',', ';', ':'];
let mut steps: usize = 0; let mut steps: usize = 0;
if *current_pos == *max_pos { return steps; } if *current_pos == *max_pos { return steps; }
for letter in command.chars().skip(*current_pos) { for letter in command.chars().skip(*current_pos+1) {
//println!("L : {:?}, S : {:?} C: {:?} M {:?}", letter, steps, current_pos, max_pos); if markers.contains(&letter) {
//Skip if we start on a space if *current_pos + steps < *max_pos { steps += 1; }
if steps == 0 && (letter == ' ' || letter == ',' || letter == ';') {
continue;
} else if letter != ' ' && *current_pos + steps < *max_pos {
steps += 1;
} else {
return steps; return steps;
} else {
steps += 1;
} }
} }
let max: usize = (0 + max_pos) - current_pos; let max: usize = (0 + max_pos) - current_pos;
return max; return max;
} }
fn handle_conf(stdout: &mut Stdout) -> SqishConf { fn handle_conf(stdout: &mut Stdout) -> SqishConf {
let conf = match SqishConf::from_sqishrc() { let conf = match SqishConf::from_sqishrc() {
@ -614,7 +614,7 @@ pub mod shell {
fn jmp_prev_word(elems: &mut TermElements) { fn jmp_prev_word(elems: &mut TermElements) {
let command_rev = elems.command.chars().rev().collect::<String>(); let command_rev = elems.command.chars().rev().collect::<String>();
let curr_rev = elems.max_pos - elems.cur_pos + 1; let curr_rev = elems.max_pos - elems.cur_pos;
let steps = find_next_space(&curr_rev, &elems.max_pos, &command_rev); let steps = find_next_space(&curr_rev, &elems.max_pos, &command_rev);
if steps > 0 { if steps > 0 {
print!("{}", cursor::Left(steps as u16)); print!("{}", cursor::Left(steps as u16));

View File

@ -97,14 +97,13 @@ impl Search {
SearchType::CmdSearch => autocomplete_cmd(&self.searchee, &self), SearchType::CmdSearch => autocomplete_cmd(&self.searchee, &self),
SearchType::FileSearch => match autocomplete_file(&self) { SearchType::FileSearch => match autocomplete_file(&self) {
Ok(t) => t, Ok(t) => t,
Err(_) => (format!("{}{}", &self.command, &self.searchee), String::new()), Err(_) => (String::new(), String::new()),
} }
}; };
if res.len() < 1 { if res.len() < 1 {
*&mut res = format!("{}{}", &self.command, &self.searchee); *&mut res = format!("{}{}", &self.command, &self.searchee);
} }
return (res, res_lines); return (res, res_lines);
} }
@ -205,7 +204,12 @@ fn autocomplete_file(search: &Search) -> std::io::Result<(String, String)> {
//Remote search... is annoying //Remote search... is annoying
if !search.local_search { if !search.local_search {
last_found = last_found.replace("./", ""); last_found = last_found.replace("./", "");
return Ok((format!("{}{}{}", search.command, search.search_path.display(), last_found), String::new())); //println!("{:?}", format!("{}{}", search.command, last_found));
if nbr_found < 2 {
return Ok((format!("{}{}{}", search.command, search.search_path.display(), last_found), String::new()));
} else {
return Ok((format!("{}{}", search.command, last_found), all_res));
}
} }
last_found = last_found.replace("./", ""); last_found = last_found.replace("./", "");