aboutsummaryrefslogtreecommitdiffstats
path: root/src/completion.rs
diff options
context:
space:
mode:
authorJonas Maier <>2026-03-05 20:40:47 +0100
committerJonas Maier <>2026-03-05 20:40:47 +0100
commitf03a0863ba3da7cf34e938a7de1cf92675b09c41 (patch)
tree2c012fdf1da3da1b7c4531b2f9ee89278621e914 /src/completion.rs
parent908164677c24f6f4c7479180c8f7dcda06643d35 (diff)
downloadpish-f03a0863ba3da7cf34e938a7de1cf92675b09c41.tar.gz
basic path completion
Diffstat (limited to 'src/completion.rs')
-rw-r--r--src/completion.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/completion.rs b/src/completion.rs
new file mode 100644
index 0000000..63ac866
--- /dev/null
+++ b/src/completion.rs
@@ -0,0 +1,34 @@
+use crate::*;
+use std::fs;
+
+pub struct Suggestion {
+ pub display: BString,
+ full: BString,
+}
+
+pub fn _path_completion(mut prefix: BString) -> io::Result<Vec<Suggestion>> {
+ let mut partial_entry = BString::new();
+ while let Some(c) = prefix.last().cloned() {
+ if c == b'/' {
+ break;
+ }
+ partial_entry.push(c);
+ prefix.pop();
+ }
+ partial_entry.reverse();
+
+ let mut sugs = Vec::new();
+
+ for entry in fs::read_dir(OsStr::from_bytes(&prefix))? {
+ let entry = entry?;
+ let name = entry.file_name().as_bytes().to_vec();
+ if name.starts_with(&partial_entry) {
+ sugs.push(Suggestion {
+ display: name,
+ full: entry.path().as_os_str().as_bytes().to_vec(),
+ });
+ }
+ }
+
+ Ok(sugs)
+}