scripts/bash_completion.pl
author František Kučera <franta-hg@frantovo.cz>
Fri, 27 Dec 2013 18:16:45 +0100
branchv_0
changeset 82 adea6d8d3708
parent 81 847c83288d01
child 83 9563232ea0b7
permissions -rwxr-xr-x
bash completion: use dynamic completion derived from configuration if available
     1 #!/usr/bin/perl
     2 
     3 # Parses Java source code from STDIN and generates script for BASH completion
     4 # Input (in this order):
     5 #	info/globalcode/sql/dk/Constants.java
     6 #	info/globalcode/sql/dk/formatting/*
     7 #	info/globalcode/sql/dk/CLIParser.java
     8 
     9 # TODO: support database/formatter names with spaces
    10 
    11 use strict;
    12 use warnings;
    13 
    14 my $configDir = "~";
    15 
    16 while (<>) {
    17 	if (/"(.*?)".*? \/\/\s*bash-completion:dir/) {
    18 		$configDir .= "/$1";
    19 		last;
    20 	}
    21 }
    22 
    23 my $databasesFile  = "$configDir/bash-completion/databases";
    24 my $formattersFile = "$configDir/bash-completion/formatters";
    25 
    26 print 'have sql-dk &&
    27 _sql_dk()
    28 {
    29 	local cur prev
    30 
    31 	COMPREPLY=()
    32 	cur=${COMP_WORDS[COMP_CWORD]}
    33 	prev=${COMP_WORDS[COMP_CWORD-1]}
    34 
    35 	case "$prev" in
    36 	--db)
    37 		if [ -f '.$databasesFile.' ]; then
    38 			COMPREPLY=( $( compgen -W " $( cat '.$databasesFile.' ) " -- $cur ) )
    39 			return 0
    40 		fi
    41 		;;
    42 	--formatter)
    43 		if [ -f '.$formattersFile.' ]; then
    44 			COMPREPLY=( $( compgen -W " $( cat '.$formattersFile.' ) " -- $cur ) )
    45 		else
    46 			COMPREPLY=( $( compgen -W "
    47 ';
    48 
    49 while (<>) {
    50 	if (/"(.*?)".*? \/\/\s*bash-completion:formatter/) {
    51 		print "				$1\n";
    52 	}
    53 	last if (/\/\/\s*bash-completion:options/);
    54 }
    55 
    56 
    57 print '				" -- $cur ) );
    58 		fi
    59 		return 0
    60 		;;
    61 	esac;
    62 
    63 	COMPREPLY=( $( compgen -W "
    64 ';
    65 
    66 while (<>) {
    67 	if (/"(.*?)".*? \/\/\s*bash-completion:option/) {
    68 		print "			$1\n";
    69 	}
    70 }
    71 
    72 print '		" -- $cur ) )
    73 	return 0
    74 
    75 }
    76 
    77 complete -F _sql_dk sql-dk
    78 ';