diff options
| -rw-r--r-- | src/buffer.rs | 16 | 
1 files changed, 13 insertions, 3 deletions
diff --git a/src/buffer.rs b/src/buffer.rs index bd5ab60..08c8653 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -165,13 +165,21 @@ fn comp(          *bpos -= *len;      } +    let ori_path: String = buffer[*bpos..].into_iter().collect::<String>(); +    let mut width = UnicodeWidthStr::width(ori_path.as_str()); +      // Remove the last autocomplete value from the buffer      while *len > 0 {          buffer.pop(); -        print!("\u{8} \u{8}");          *len -= 1;      } +    // Remove the last autocomplete value from the shell +    while width > 0 { +        print!("\u{8} \u{8}"); +        width -= 1; +    } +      // Reverse the buffer, which will make our while loop further down much easier      let mut rev = buffer.iter().rev(); @@ -285,7 +293,7 @@ fn comp(      // Get the path (or only part of the path if we matched with word)      let path = paths[*pos].path(); -    let mut path = if paths[*pos].path().is_dir() { +    let path = if paths[*pos].path().is_dir() {          (path.file_name().unwrap().to_string_lossy()[word.len()..].to_string() + "/").to_string()      } else {          path.file_name().unwrap().to_string_lossy()[word.len()..].to_string() @@ -324,7 +332,7 @@ fn comp(      }      // Update the length of the last comp -    *len = UnicodeWidthStr::width(path.as_str()); +    *len += path.chars().collect::<Vec<_>>().len();      // Update the buffer position      *bpos += *len; @@ -523,6 +531,7 @@ pub fn getline(                  let trunc_width = UnicodeWidthStr::width(trunc.as_str());                  buffer.insert(*pos.lock().unwrap(), c);                  *pos.lock().unwrap() += 1; +                // *pos.lock().unwrap() += UnicodeWidthChar::width(c).unwrap_or(1);                  if *pos.lock().unwrap() == buffer.len() {                      print!("{}", c);                  } else { @@ -586,6 +595,7 @@ pub fn getline(      }      println!(); +    buffer.lock().unwrap().push('\n');      let mut bytes = 0;      buffer  | 
