bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
1091
by Martin Pool
 - new shell-complete command to help zsh completion  | 
1  | 
import sys  | 
2  | 
||
3  | 
||
4  | 
def shellcomplete(context=None, outfile = None):  | 
|
5  | 
if outfile == None:  | 
|
6  | 
outfile = sys.stdout  | 
|
7  | 
if context == None:  | 
|
8  | 
shellcomplete_commands(outfile = outfile)  | 
|
9  | 
else:  | 
|
10  | 
shellcomplete_on_command(context, outfile = outfile)  | 
|
11  | 
||
12  | 
def shellcomplete_on_command(cmdname, outfile = None):  | 
|
13  | 
cmdname = str(cmdname)  | 
|
14  | 
||
15  | 
if outfile == None:  | 
|
16  | 
outfile = sys.stdout  | 
|
17  | 
||
18  | 
from inspect import getdoc  | 
|
19  | 
import commands  | 
|
| 
1185.1.9
by Robert Collins
 Clint Adams patch for shell completion hints  | 
20  | 
cmdobj = commands.get_cmd_object(cmdname)  | 
| 
1091
by Martin Pool
 - new shell-complete command to help zsh completion  | 
21  | 
|
| 
1185.1.9
by Robert Collins
 Clint Adams patch for shell completion hints  | 
22  | 
doc = getdoc(cmdobj)  | 
| 
1091
by Martin Pool
 - new shell-complete command to help zsh completion  | 
23  | 
if doc == None:  | 
24  | 
raise NotImplementedError("sorry, no detailed shellcomplete yet for %r" % cmdname)  | 
|
25  | 
||
| 
1185.1.9
by Robert Collins
 Clint Adams patch for shell completion hints  | 
26  | 
shellcomplete_on_option(cmdobj.takes_options, outfile = None)  | 
27  | 
for aname in cmdobj.takes_args:  | 
|
28  | 
outfile.write(aname + '\n')  | 
|
| 
1091
by Martin Pool
 - new shell-complete command to help zsh completion  | 
29  | 
|
30  | 
||
| 
1185.16.45
by Martin Pool
 - refactor handling of short option names  | 
31  | 
def shellcomplete_on_option(options, outfile=None):  | 
32  | 
from bzrlib.option import Option  | 
|
| 
1091
by Martin Pool
 - new shell-complete command to help zsh completion  | 
33  | 
if not options:  | 
34  | 
        return
 | 
|
35  | 
if outfile == None:  | 
|
36  | 
outfile = sys.stdout  | 
|
37  | 
for on in options:  | 
|
| 
1185.16.45
by Martin Pool
 - refactor handling of short option names  | 
38  | 
for shortname, longname in Option.SHORT_OPTIONS.items():  | 
| 
1091
by Martin Pool
 - new shell-complete command to help zsh completion  | 
39  | 
if longname == on:  | 
40  | 
l = '"(--' + on + ' -' + shortname + ')"{--' + on + ',-' + shortname + '}'  | 
|
41  | 
                break
 | 
|
42  | 
else:  | 
|
43  | 
l = '--' + on  | 
|
44  | 
outfile.write(l + '\n')  | 
|
45  | 
||
46  | 
||
47  | 
def shellcomplete_commands(outfile = None):  | 
|
48  | 
"""List all commands"""  | 
|
49  | 
import inspect  | 
|
50  | 
import commands  | 
|
51  | 
from inspect import getdoc  | 
|
52  | 
||
53  | 
if outfile == None:  | 
|
54  | 
outfile = sys.stdout  | 
|
55  | 
||
56  | 
cmds = []  | 
|
57  | 
for cmdname, cmdclass in commands.get_all_cmds():  | 
|
58  | 
cmds.append((cmdname, cmdclass))  | 
|
59  | 
for alias in cmdclass.aliases:  | 
|
60  | 
cmds.append((alias, cmdclass))  | 
|
61  | 
cmds.sort()  | 
|
62  | 
for cmdname, cmdclass in cmds:  | 
|
63  | 
if cmdclass.hidden:  | 
|
64  | 
            continue
 | 
|
65  | 
doc = getdoc(cmdclass)  | 
|
66  | 
if doc == None:  | 
|
67  | 
outfile.write(cmdname + '\n')  | 
|
68  | 
else:  | 
|
69  | 
doclines = doc.splitlines()  | 
|
70  | 
firstline = doclines[0].lower()  | 
|
71  | 
outfile.write(cmdname + ':' + firstline[0:-1] + '\n')  |