Skip to content

Commit ec2196e

Browse files
committed
tabcompletion: sort commands on generated scripts
1 parent 7a9a31b commit ec2196e

File tree

4 files changed

+119
-80
lines changed

4 files changed

+119
-80
lines changed

bash_completion_doit

+18-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# bash completion for doit
2-
# auto-generate by `doit tabcomplention`
2+
# auto-generate by `doit tabcompletion`
33

44
# to activate it you need to 'source' the generate script
55
# $ source <generated-script>
@@ -14,7 +14,7 @@ _doit()
1414
# remove colon from word separator list because doit uses colon on task names
1515
_get_comp_words_by_ref -n : cur prev words cword
1616
# list of sub-commands
17-
sub_cmds="dumpdb run help strace auto list ignore clean tabcompletion forget reset-dep"
17+
sub_cmds="auto clean dumpdb forget help ignore info list reset-dep run strace tabcompletion"
1818

1919

2020
# options that take file/dir as values should complete file-system
@@ -77,48 +77,52 @@ _doit()
7777

7878
case ${words[1]} in
7979

80+
auto)
81+
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
82+
return 0
83+
;;
84+
clean)
85+
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
86+
return 0
87+
;;
8088
dumpdb)
8189
COMPREPLY=( $(compgen -f -- $cur) )
8290
return 0
8391
;;
84-
run)
92+
forget)
8593
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
8694
return 0
8795
;;
8896
help)
8997
COMPREPLY=( $(compgen -W "${tasks} ${sub_cmds}" -- $cur) )
9098
return 0
9199
;;
92-
strace)
100+
ignore)
93101
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
94102
return 0
95103
;;
96-
auto)
104+
info)
97105
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
98106
return 0
99107
;;
100108
list)
101109
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
102110
return 0
103111
;;
104-
ignore)
112+
reset-dep)
105113
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
106114
return 0
107115
;;
108-
clean)
116+
run)
109117
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
110118
return 0
111119
;;
112-
tabcompletion)
113-
COMPREPLY=( $(compgen -f -- $cur) )
114-
return 0
115-
;;
116-
forget)
120+
strace)
117121
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
118122
return 0
119123
;;
120-
reset-dep)
121-
COMPREPLY=( $(compgen -W "${tasks}" -- $cur) )
124+
tabcompletion)
125+
COMPREPLY=( $(compgen -f -- $cur) )
122126
return 0
123127
;;
124128
esac

doit/cmd_base.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,17 @@ class Command(object):
5858
execute_tasks = False
5959

6060
def __init__(self):
61-
self.name = self.name or self.__class__.__name__.lower()
61+
self.name = self.get_name()
6262
Command.CMD_LIST.append(self.name)
6363
self.options = self.set_options()
6464
# Use post-mortem PDB in case of error loading tasks.
6565
# Only available for `run` command.
6666
self.pdb = False
6767

68+
@classmethod
69+
def get_name(cls):
70+
return cls.name or cls.__name__.lower()
71+
6872
def set_options(self):
6973
"""@reutrn list of CmdOption
7074
"""

doit/cmd_completion.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def _generate_bash(self, opt_values, pos_args):
8484
pt_bin_name = sys.argv[0].split('/')[-1]
8585
tmpl_vars = {
8686
'pt_bin_name': pt_bin_name,
87-
'pt_cmds': ' '.join(self.doit_app.sub_cmds),
87+
'pt_cmds': ' '.join(sorted(self.doit_app.sub_cmds)),
8888
'pt_list_param': pt_list_param,
8989
}
9090

@@ -101,7 +101,9 @@ def _generate_bash(self, opt_values, pos_args):
101101

102102
# case statement to complete sub-commands
103103
cmds_args = []
104-
for cmd in self.doit_app.sub_cmds.values():
104+
cmd_list = sorted(self.doit_app.sub_cmds.values(),
105+
key = lambda c: c.get_name())
106+
for cmd in cmd_list:
105107
cmds_args.append(self._bash_cmd_args(cmd))
106108
comp_subcmds = ("\n case ${words[1]} in\n" +
107109
"".join(cmds_args) +
@@ -167,7 +169,9 @@ def _generate_zsh(self, opt_values, pos_args):
167169
# deal with doit commands
168170
cmds_desc = []
169171
cmds_args = []
170-
for cmd in self.doit_app.sub_cmds.values():
172+
cmd_list = sorted(self.doit_app.sub_cmds.values(),
173+
key = lambda c: c.get_name())
174+
for cmd in cmd_list:
171175
cmds_desc.append(" '{0}: {1}'".format(cmd.name, cmd.doc_purpose))
172176
cmds_args.append(self._zsh_cmd_args(cmd))
173177

0 commit comments

Comments
 (0)