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