aboutsummaryrefslogtreecommitdiffstats
path: root/src/completion.rs
diff options
context:
space:
mode:
authorJonas Maier <>2026-03-10 16:37:07 +0100
committerJonas Maier <>2026-03-10 16:37:07 +0100
commit1bab9e3ed54476d0b4a47da84693a2e4e50effc6 (patch)
treecc0fb5a4dd85a28e23766972b1fccdce8a93d9c5 /src/completion.rs
parent5a20456be99899e6519ec0595817e0d436eab627 (diff)
downloadpish-1bab9e3ed54476d0b4a47da84693a2e4e50effc6.tar.gz
variable completion
Diffstat (limited to 'src/completion.rs')
-rw-r--r--src/completion.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/completion.rs b/src/completion.rs
index 237e956..61dce76 100644
--- a/src/completion.rs
+++ b/src/completion.rs
@@ -1,5 +1,5 @@
use crate::*;
-use std::fs;
+use std::{env, fs};
pub struct Suggestion {
pub display: BString,
@@ -55,3 +55,27 @@ pub fn path_completion(prefix: BString) -> Vec<Suggestion> {
}
}
}
+
+pub fn variable_completion(session: Arc<Mutex<Session>>, prefix: BString) -> Vec<Suggestion> {
+ let se = session.lock().unwrap();
+ let mut out = Vec::new();
+ for var in se.vars.keys() {
+ if var.starts_with(&prefix) {
+ out.push(Suggestion {
+ display: var.to_vec(),
+ delta: var[prefix.len()..].to_vec(),
+ });
+ }
+ }
+ drop(se);
+ for var in env::vars_os() {
+ let var = var.0.as_bytes();
+ if var.starts_with(&prefix) {
+ out.push(Suggestion {
+ display: var.to_vec(),
+ delta: var[prefix.len()..].to_vec(),
+ });
+ }
+ }
+ out
+}