Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
cf6a9961d1 | |||
165f4a3a08 | |||
a56dc578de | |||
48322b25e5 | |||
fbf6be2779 | |||
0aabd711a3 | |||
1eefd44a89 | |||
1e052f1a79 | |||
7b0f4b1922 |
38
.drone.yml
38
.drone.yml
@ -3,8 +3,38 @@ type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
|
||||
- name: test
|
||||
image: rust:1.66.0-alpine3.17
|
||||
- name: build
|
||||
image: rust:latest
|
||||
commands:
|
||||
- cargo build --verbose
|
||||
- cargo build --release
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: release
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: rust:latest
|
||||
commands:
|
||||
- cargo build --release
|
||||
when:
|
||||
event:
|
||||
include:
|
||||
- tag
|
||||
|
||||
- name: create-release
|
||||
image: plugins/gitea-release:latest
|
||||
custom_dns: [ 9.9.9.9 ]
|
||||
settings:
|
||||
api_key:
|
||||
from_secret: gitea_api
|
||||
base_url: https://gitea.squi.fr
|
||||
note: This is an automated release of sqish.
|
||||
files:
|
||||
- ./target/release/sqish
|
||||
when:
|
||||
event:
|
||||
include:
|
||||
- tag
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
# Sqish
|
||||
[](http://drone.sq.lan/Rust/sqish)
|
||||
## 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.
|
||||
|
||||
|
18
src/lib.rs
18
src/lib.rs
@ -408,23 +408,23 @@ pub mod shell {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
fn find_next_space(current_pos: &usize, max_pos: &usize, command: &String) -> usize {
|
||||
let markers = vec![' ', '!', ',', ';', ':'];
|
||||
let mut steps: usize = 0;
|
||||
if *current_pos == *max_pos { return steps; }
|
||||
for letter in command.chars().skip(*current_pos) {
|
||||
//println!("L : {:?}, S : {:?} C: {:?} M {:?}", letter, steps, current_pos, max_pos);
|
||||
//Skip if we start on a space
|
||||
if steps == 0 && (letter == ' ' || letter == ',' || letter == ';') {
|
||||
continue;
|
||||
} else if letter != ' ' && *current_pos + steps < *max_pos {
|
||||
steps += 1;
|
||||
} else {
|
||||
for letter in command.chars().skip(*current_pos+1) {
|
||||
if markers.contains(&letter) {
|
||||
if *current_pos + steps < *max_pos { steps += 1; }
|
||||
return steps;
|
||||
} else {
|
||||
steps += 1;
|
||||
}
|
||||
}
|
||||
let max: usize = (0 + max_pos) - current_pos;
|
||||
return max;
|
||||
}
|
||||
|
||||
|
||||
fn handle_conf(stdout: &mut Stdout) -> SqishConf {
|
||||
let conf = match SqishConf::from_sqishrc() {
|
||||
@ -614,7 +614,7 @@ pub mod shell {
|
||||
|
||||
fn jmp_prev_word(elems: &mut TermElements) {
|
||||
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);
|
||||
if steps > 0 {
|
||||
print!("{}", cursor::Left(steps as u16));
|
||||
|
@ -97,14 +97,13 @@ impl Search {
|
||||
SearchType::CmdSearch => autocomplete_cmd(&self.searchee, &self),
|
||||
SearchType::FileSearch => match autocomplete_file(&self) {
|
||||
Ok(t) => t,
|
||||
Err(_) => (format!("{}{}", &self.command, &self.searchee), String::new()),
|
||||
Err(_) => (String::new(), String::new()),
|
||||
}
|
||||
};
|
||||
|
||||
if res.len() < 1 {
|
||||
*&mut res = format!("{}{}", &self.command, &self.searchee);
|
||||
}
|
||||
|
||||
return (res, res_lines);
|
||||
}
|
||||
|
||||
@ -205,7 +204,12 @@ fn autocomplete_file(search: &Search) -> std::io::Result<(String, String)> {
|
||||
//Remote search... is annoying
|
||||
if !search.local_search {
|
||||
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("./", "");
|
||||
|
Reference in New Issue
Block a user