Skip to content

Commit 7f5cfa7

Browse files
committed
fix: fixes bash completions for commands that have an underscore in the name
Closes #581
1 parent 891a2a0 commit 7f5cfa7

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

src/completions/bash.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ complete -F _{name} -o bashdefault -o default {name}
7777
for sc in &scs {
7878
subcmds = format!("{}
7979
{name})
80-
cmd+=\"_{name}\"
80+
cmd+=\"__{name}\"
8181
;;",
8282
subcmds,
83-
name = sc.replace("-", "_"));
83+
name = sc.replace("-", "__"));
8484
}
8585

8686
subcmds
@@ -111,9 +111,9 @@ complete -F _{name} -o bashdefault -o default {name}
111111
return 0
112112
;;",
113113
subcmd_dets,
114-
subcmd = sc.replace("-", "_"),
114+
subcmd = sc.replace("-", "__"),
115115
sc_opts = self.all_options_for_path(&*sc),
116-
level = sc.split("_").map(|_| 1).fold(0, |acc, n| acc + n),
116+
level = sc.split("__").map(|_| 1).fold(0, |acc, n| acc + n),
117117
opts_details = self.option_details_for_path(&*sc));
118118
}
119119

@@ -123,7 +123,7 @@ complete -F _{name} -o bashdefault -o default {name}
123123
fn option_details_for_path(&self, path: &str) -> String {
124124
debugln!("BashGen::option_details_for_path: path={}", path);
125125
let mut p = self.p;
126-
for sc in path.split('_').skip(1) {
126+
for sc in path.split("__").skip(1) {
127127
debugln!("BashGen::option_details_for_path:iter: sc={}", sc);
128128
p = &p.subcommands
129129
.iter()
@@ -212,7 +212,7 @@ complete -F _{name} -o bashdefault -o default {name}
212212
fn all_options_for_path(&self, path: &str) -> String {
213213
debugln!("BashGen::all_options_for_path: path={}", path);
214214
let mut p = self.p;
215-
for sc in path.split('_').skip(1) {
215+
for sc in path.split("__").skip(1) {
216216
debugln!("BashGen::all_options_for_path:iter: sc={}", sc);
217217
p = &p.subcommands
218218
.iter()

src/completions/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ pub fn get_all_subcommand_paths(p: &Parser, first: bool) -> Vec<String> {
125125
if !p.has_subcommands() {
126126
if !first {
127127
let name = &*p.meta.name;
128-
let path = p.meta.bin_name.as_ref().unwrap().clone().replace(" ", "_");
128+
let path = p.meta.bin_name.as_ref().unwrap().clone().replace(" ", "__");
129129
let mut ret = vec![path.clone()];
130130
if let Some(ref aliases) = p.meta.aliases {
131131
for &(n, _) in aliases {
@@ -138,7 +138,7 @@ pub fn get_all_subcommand_paths(p: &Parser, first: bool) -> Vec<String> {
138138
}
139139
for sc in &p.subcommands {
140140
let name = &*sc.p.meta.name;
141-
let path = sc.p.meta.bin_name.as_ref().unwrap().clone().replace(" ", "_");
141+
let path = sc.p.meta.bin_name.as_ref().unwrap().clone().replace(" ", "__");
142142
subcmds.push(path.clone());
143143
if let Some(ref aliases) = sc.p.meta.aliases {
144144
for &(n, _) in aliases {

0 commit comments

Comments
 (0)