aboutsummaryrefslogtreecommitdiffstats
path: root/src/completion.rs
diff options
context:
space:
mode:
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
+}