[FYI] generated completions
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:23
Hi, I just played around with command line completion in bash, mainly to distract me from the work I have to do. This is a shell script which generates a completion script from the documentation. It is very dumb at the moment, but at least a start. I am not likely to continue with this in the near future, so everyone who's interested: go wild.
--- generate-completions.sh ---#!/bin/sh
cat << EOF
function gitcomplete ()
{
case "\$COMP_LINE" in
EOF
cmds=""
for file in Documentation/git-*.txt; do
cmd=$(expr $file : "Documentation/git-\(.*\).txt")
cmds="$cmds $cmd"
echo " git\ $cmd\ *)"
echo ' case "$3" in'
# get all lines which begin with '-' or '<' and end with '::',
# because they likely contain a command line option
sed -n "s/^\([-<].*\)::/\1/p" < $file | { \
opts=""
while read line; do
# some lines have the form '-a|--all'
opt1=$(expr "$line" : '^\([^ |<]*\)')
opt2=$(expr "$line" : '|\([^ |<]*\)')
opts="$opts $opt1 $opt2"
# this is an example how to handle non-simple args:
# '-m <msg>' means: if the second-last arg is '-m',
# the current arg is the message.
test "$(expr "$line" : ".*<msg>")" != 0 &&
echo " '$opt1')" &&
echo ' COMPREPLY=(\"a \"z);;'
done
echo " *)"
echo " COMPREPLY=(\$(compgen -W \"$opts\" -- \$2));;"
}
echo " esac;;"
done
cat << EOF
git\ *\ *)
COMPREPLY=();;
git\ *)
COMPREPLY=(\$(compgen -W '$cmds' -- \$2));;
esac
}
complete -o default -F gitcomplete git
EOF--- cut ---