shell: Add bash completion file

Only completes the panel names for now.
This commit is contained in:
Bastien Nocera 2012-12-20 22:48:49 +01:00
parent d0dda2fa0d
commit 4ce6d0a7ab
3 changed files with 57 additions and 0 deletions

View file

@ -78,6 +78,12 @@ sys_in_files = gnome-control-center.desktop.in
sys_DATA = $(sys_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
completiondir = $(datadir)/bash-completion/completions
completion_in_files = gnome_control_center_completion.bash.in
completion_DATA = $(completion_in_files:.bash.in=.bash)
gnome_control_center_completion.bash: gnome_control_center_completion.bash.in list-panel.sh
$(AM_V_GEN) cat $< | sed "s,@PANELS@,`$(srcdir)/list-panel.sh $(top_srcdir)`," > $@
EXTRA_DIST = \
$(ui_DATA) \
gnome-control-center.desktop.in.in

View file

@ -0,0 +1,43 @@
#!/bin/bash
#
# gnome-control-center tab completion for bash.
_gnome_control_center()
{
local cur prev command_list i v
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
-o|--overview)
command_list=""
;;
*)
if [ $prev = "gnome-control-center" ] ; then
command_list="--overview --verbose --version"
command_list="$command_list @PANELS@"
elif [ $prev = "--verbose" ]; then
command_list="@PANELS@"
fi
# FIXME
# Add the argvs for some of the panels that
# support it, such as network
for i in --overview --version @PANELS@; do
if [ $i = $prev ]; then
command_list=""
fi
done
;;
esac
for i in $command_list; do
if [ -z "${i/$cur*}" ]; then
COMPREPLY=( ${COMPREPLY[@]} $i )
fi
done
}
# load the completion
complete -F _gnome_control_center gnome-control-center

8
shell/list-panel.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/sh
LIST=""
for i in $1/panels/*/gnome-*panel.desktop.in.in ; do
basename=`basename $i`
LIST="$LIST `echo $basename | sed 's/gnome-//' | sed 's/-panel.desktop.in.in/ /'`"
done
echo -n $LIST