mirror of
https://github.com/uutils/uutils-args.git
synced 2026-06-10 16:13:08 -07:00
handle special-case program name '['
This commit is contained in:
committed by
Daniel Hofstetter
parent
1b5405cb0d
commit
e752a3f783
+24
-4
@@ -10,10 +10,14 @@ use crate::{Command, Flag};
|
||||
/// Also, pretend that files are fine in any position. ValueHints are ignored entirely.
|
||||
pub fn render(c: &Command) -> String {
|
||||
let mut out = String::new();
|
||||
let name = &c.name;
|
||||
// Be careful around the program '['!
|
||||
let name_identifier = if c.name == "[" { &"bracket" } else { &c.name };
|
||||
// Register _comp_uu_FOO as a bash function that computes completions:
|
||||
out.push_str(&format!("complete -F _comp_uu_{name} {name};"));
|
||||
out.push_str(&format!("_comp_uu_{name}()"));
|
||||
out.push_str(&format!(
|
||||
"complete -F _comp_uu_{name_identifier} '{}';",
|
||||
&c.name
|
||||
));
|
||||
out.push_str(&format!("_comp_uu_{name_identifier}()"));
|
||||
// Unless the current argument starts with "-", pre-populate the completions list with all files and dirs:
|
||||
out.push_str("{ local cur;_init_completion||return;COMPREPLY=();if [[ \"$cur\" != \"-*\" ]]; then _filedir;fi;COMPREPLY+=($(compgen -W \"");
|
||||
for arg in &c.args {
|
||||
@@ -59,6 +63,22 @@ mod test {
|
||||
],
|
||||
..Command::default()
|
||||
};
|
||||
assert_eq!(render(&c), "complete -F _comp_uu_foo foo;_comp_uu_foo(){ local cur;_init_completion||return;COMPREPLY=();if [[ \"$cur\" != \"-*\" ]]; then _filedir;fi;COMPREPLY+=($(compgen -W \"-a --all -x \" -- \"$cur\"));}\n")
|
||||
assert_eq!(render(&c), "complete -F _comp_uu_foo 'foo';_comp_uu_foo(){ local cur;_init_completion||return;COMPREPLY=();if [[ \"$cur\" != \"-*\" ]]; then _filedir;fi;COMPREPLY+=($(compgen -W \"-a --all -x \" -- \"$cur\"));}\n")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn bracket() {
|
||||
let c = Command {
|
||||
name: "[",
|
||||
args: vec![Arg {
|
||||
short: vec![Flag {
|
||||
flag: "x",
|
||||
value: Value::No,
|
||||
}],
|
||||
..Arg::default()
|
||||
}],
|
||||
..Command::default()
|
||||
};
|
||||
assert_eq!(render(&c), "complete -F _comp_uu_bracket '[';_comp_uu_bracket(){ local cur;_init_completion||return;COMPREPLY=();if [[ \"$cur\" != \"-*\" ]]; then _filedir;fi;COMPREPLY+=($(compgen -W \"-x \" -- \"$cur\"));}\n")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user