diff --git a/create_wajig_completions.py b/create_wajig_completions.py new file mode 100755 index 000000000..15dfd1ab8 --- /dev/null +++ b/create_wajig_completions.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python +# -*- python -*- + +# Program to generate fish completion function for wajig. +# It runs 'wajig command' and analyzes the output to build a +# completion file which it writes to stdout. +# To use the result, direct stdout to +# ~/.fish.d/completions/wajig.fish. + +# Author Reuben Thomas, from Don Rozenberg's bash_completion.py and +# fish's apt-get.fish. + +import os +import re +import pprint +pp = pprint.PrettyPrinter() + +def escape_quotes(s): + return re.sub('\'', '\\\'', s) + +# Run wajig command +f = os.popen('wajig commands', 'r') + +lines = f.readlines() + +option_patt = r'^-([a-z]*)\|--([a-z]*) +([^ ].*)' +option_patt_r = re.compile(option_patt) + +command_patt = r'^([a-z-]*) +([^ ].*)' +command_patt_r = re.compile(command_patt) + +os_str = [] +os_str.append('') +ol_str = [] +ol_str.append('') +oh_str = [] +oh_str.append('') +o_i = 0 + +c_str = [] +c_str.append('') +ch_str = [] +ch_str.append('') +c_i = 0 + +for l in lines: + l = l.strip() + if l == '' or l.find(':') > -1 or l.find('Run') == 0: + continue + if l.find('-') == 0: + mo = option_patt_r.search(l) + if mo == None: + continue + os_str[o_i] = mo.group(1) + os_str.append('') + ol_str[o_i] = mo.group(2) + ol_str.append('') + oh_str[o_i] = escape_quotes(mo.group(3)) + oh_str.append('') + o_i += 1 + else: + mo = command_patt_r.search(l) + if mo == None: + continue + c_str[c_i] = mo.group(1) + c_str.append('') + ch_str[c_i] = escape_quotes(mo.group(2)) + ch_str.append('') + c_i += 1 + +# For debugging, print the commands and options. +#print +#pp.pprint(c_str) + +#print +#pp.pprint(os_str) +#print +#pp.pprint(ol_str) + +part1 = '''function __fish_wajig_no_subcommand -d (N_ 'Test if wajig has yet to be given the subcommand') + for i in (commandline -opc) + if contains -- $i''' + +part2 = ''' + return 1 + end + end + return 0 +end + +function __fish_wajig_use_package -d (N_ 'Test if wajig command should have packages as potential completion') + for i in (commandline -opc) + if contains -- $i contains bug build build-depend changelog dependents describe detail hold install installr installrs installs list list-files news package purge purge-depend readme recursive recommended reconfigure reinstall remove remove-depend repackage show showinstall showremove showupgrade size sizes source suggested unhold upgrade versions whatis + return 0 + end + end + return 1 +end + +complete -c wajig -n '__fish_wajig_use_package' -a '(__fish_print_packages)' -d (N_ 'Package')''' + +wajig = part1 + +#add the commands. +for i in range(0, len(c_str) - 1): + wajig = "%s %s" % (wajig, c_str[i]) + +#add part2 +wajig = "%s%s" % (wajig, part2) + +#add the options. +wajig = "%s%s" % (wajig, os_str[0].lstrip()) +for i in range(1, len(os_str) - 1): + wajig = "%s\ncomplete -c apt-get -s %s -l %s -d (N_ '%s')" % (wajig, os_str[i], ol_str[i], oh_str[i]) + +#add the commands. +for i in range(0, len(c_str) - 1): + wajig = "%s\ncomplete -f -n '__fish_wajig_no_subcommand' -c wajig -a '%s' -d(N_ '%s')" % (wajig, c_str[i], ch_str[i]) + +#print it all +print wajig