Bash completion script for util commands
* Makefile.am: Add util/bash-completion.d directory * configure.ac: Likewise. * util/bash-completion.d/Makefile.am: New file. * util/bash-completion.d/grub-completion.bash.in: Likewise.
This commit is contained in:
parent
d547dc281c
commit
b23ffd70eb
5 changed files with 491 additions and 1 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2010-09-13 Yves Blusseau <blusseau@zetam.org>
|
||||||
|
|
||||||
|
Bash completion script for util commands
|
||||||
|
|
||||||
|
* Makefile.am: Add util/bash-completion.d directory
|
||||||
|
* configure.ac: Likewise.
|
||||||
|
* util/bash-completion.d/Makefile.am: New file.
|
||||||
|
* util/bash-completion.d/grub-completion.bash.in: Likewise.
|
||||||
|
|
||||||
2010-09-12 Vladimir Serbinenko <phcoder@gmail.com>
|
2010-09-12 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* grub-core/normal/term.c (put_glyphs_terminal): Correct sign.
|
* grub-core/normal/term.c (put_glyphs_terminal): Correct sign.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
AUTOMAKE_OPTIONS = subdir-objects
|
AUTOMAKE_OPTIONS = subdir-objects
|
||||||
|
|
||||||
DEPDIR = .deps-util
|
DEPDIR = .deps-util
|
||||||
SUBDIRS = . grub-core po docs
|
SUBDIRS = . grub-core po docs util/bash-completion.d
|
||||||
|
|
||||||
include $(top_srcdir)/conf/Makefile.common
|
include $(top_srcdir)/conf/Makefile.common
|
||||||
include $(top_srcdir)/conf/Makefile.extra-dist
|
include $(top_srcdir)/conf/Makefile.extra-dist
|
||||||
|
|
|
@ -939,6 +939,7 @@ AC_CONFIG_FILES([Makefile])
|
||||||
AC_CONFIG_FILES([grub-core/Makefile])
|
AC_CONFIG_FILES([grub-core/Makefile])
|
||||||
AC_CONFIG_FILES([po/Makefile])
|
AC_CONFIG_FILES([po/Makefile])
|
||||||
AC_CONFIG_FILES([docs/Makefile])
|
AC_CONFIG_FILES([docs/Makefile])
|
||||||
|
AC_CONFIG_FILES([util/bash-completion.d/Makefile])
|
||||||
AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
|
AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
|
||||||
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
13
util/bash-completion.d/Makefile.am
Normal file
13
util/bash-completion.d/Makefile.am
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
bash_completion_source = grub-completion.bash.in
|
||||||
|
bash_completion_script = grub
|
||||||
|
|
||||||
|
EXTRA_DIST = $(bash_completion_source)
|
||||||
|
|
||||||
|
CLEANFILES = $(bash_completion_script)
|
||||||
|
|
||||||
|
bashcompletiondir = $(sysconfdir)/bash_completion.d
|
||||||
|
bashcompletion_DATA = $(bash_completion_script)
|
||||||
|
|
||||||
|
$(bash_completion_script): $(bash_completion_source) $(top_builddir)/config.status
|
||||||
|
$(top_builddir)/config.status --file=$@:$<
|
467
util/bash-completion.d/grub-completion.bash.in
Normal file
467
util/bash-completion.d/grub-completion.bash.in
Normal file
|
@ -0,0 +1,467 @@
|
||||||
|
#
|
||||||
|
# Bash completion for grub
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# GRUB is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# GRUB is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
# bash completion for grub
|
||||||
|
|
||||||
|
__grub_dir() {
|
||||||
|
local i c=1 boot_dir
|
||||||
|
|
||||||
|
for (( c=1; c <= ${#COMP_WORDS[@]}; c++ )); do
|
||||||
|
i="${COMP_WORDS[c]}"
|
||||||
|
case "$i" in
|
||||||
|
--boot-directory)
|
||||||
|
c=$((++c))
|
||||||
|
i="${COMP_WORDS[c]}"
|
||||||
|
boot_dir="${i##*=}";
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
boot_dir=${boot_dir-/@bootdirname@}
|
||||||
|
echo "${boot_dir%/}/@grubdirname@"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# This function generates completion reply with compgen
|
||||||
|
# - arg: accepts 1, 2, 3, or 4 arguments
|
||||||
|
# $1 wordlist separate by space, tab or newline
|
||||||
|
# $2 (optional) prefix to add
|
||||||
|
# $3 (optional) current word to complete
|
||||||
|
# $4 (optional) suffix to add
|
||||||
|
__grubcomp () {
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
if [ $# -gt 2 ]; then
|
||||||
|
cur="$3"
|
||||||
|
fi
|
||||||
|
case "$cur" in
|
||||||
|
--*=)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
local IFS=' '$'\t'$'\n'
|
||||||
|
COMPREPLY=($(compgen -P "${2-}" -W "${1-}" -S "${4-}" -- "$cur"))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function that return long options from the help
|
||||||
|
# - arg: $1 (optional) command to get the long options from
|
||||||
|
__grub_get_options_from_help () {
|
||||||
|
local prog
|
||||||
|
|
||||||
|
if [ $# -ge 1 ]; then
|
||||||
|
prog="$1"
|
||||||
|
else
|
||||||
|
prog="${COMP_WORDS[0]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local i IFS=" "$'\t'$'\n'
|
||||||
|
for i in $($prog --help)
|
||||||
|
do
|
||||||
|
case $i in
|
||||||
|
--*) echo "${i%=*}";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
__grub_get_last_option () {
|
||||||
|
local i
|
||||||
|
for (( i=$COMP_CWORD-1; i > 0; i-- )); do
|
||||||
|
if [[ "${COMP_WORDS[i]}" == -* ]]; then
|
||||||
|
echo "${COMP_WORDS[i]}"
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
__grub_list_menuentries () {
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
local config_file=$(__grub_dir)/grub.cfg
|
||||||
|
|
||||||
|
if [ -f "$config_file" ];then
|
||||||
|
local IFS=$'\n'
|
||||||
|
COMPREPLY=( $(compgen \
|
||||||
|
-W "$( awk -F "[\"']" '/menuentry/ { print $2 }' $config_file )" \
|
||||||
|
-- "$cur" )) #'# Help emacs syntax highlighting
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__grub_list_modules () {
|
||||||
|
local grub_dir=$(__grub_dir)
|
||||||
|
local IFS=$'\n'
|
||||||
|
COMPREPLY=( $( compgen -f -X '!*/*.mod' -- "${grub_dir}/$cur" | {
|
||||||
|
while read -r tmp; do
|
||||||
|
[ -n $tmp ] && {
|
||||||
|
tmp=${tmp##*/}
|
||||||
|
printf '%s\n' ${tmp%.mod}
|
||||||
|
}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-set-default & grub-reboot
|
||||||
|
#
|
||||||
|
_grub_set_entry () {
|
||||||
|
local cur prev split=false
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
_split_longopt && split=true
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
--boot-directory)
|
||||||
|
_filedir -d
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
$split && return 0
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
# Default complete with a menuentry
|
||||||
|
__grub_list_menuentries
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__grub_set_default_program=$( echo grub-set-default | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_set_default_program} && \
|
||||||
|
complete -F _grub_set_entry -o filenames ${__grub_set_default_program}
|
||||||
|
unset __grub_set_default_program
|
||||||
|
|
||||||
|
__grub_reboot_program=$( echo grub-reboot | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_reboot_program} && \
|
||||||
|
complete -F _grub_set_entry -o filenames ${__grub_reboot_program}
|
||||||
|
unset __grub_reboot_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-editenv
|
||||||
|
#
|
||||||
|
_grub_editenv () {
|
||||||
|
local cur prev
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
create|list|set|unset)
|
||||||
|
COMPREPLY=( "" )
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)
|
||||||
|
create list set unset"
|
||||||
|
}
|
||||||
|
|
||||||
|
__grub_editenv_program=$( echo grub-editenv | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_editenv_program} && \
|
||||||
|
complete -F _grub_editenv -o filenames ${__grub_editenv_program}
|
||||||
|
unset __grub_editenv_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-mkconfig
|
||||||
|
#
|
||||||
|
_grub_mkconfig () {
|
||||||
|
local cur prev
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_mkconfig_program=$( echo grub-mkconfig | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_mkconfig_program} && \
|
||||||
|
complete -F _grub_mkconfig -o filenames ${__grub_mkconfig_program}
|
||||||
|
unset __grub_mkconfig_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-setup
|
||||||
|
#
|
||||||
|
_grub_setup () {
|
||||||
|
local cur prev split=false
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
_split_longopt && split=true
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
-d|--directory)
|
||||||
|
_filedir -d
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
$split && return 0
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_setup_program=$( echo grub-setup | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_setup_program} && \
|
||||||
|
complete -F _grub_setup -o filenames ${__grub_setup_program}
|
||||||
|
unset __grub_setup_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-install
|
||||||
|
#
|
||||||
|
_grub_install () {
|
||||||
|
local cur prev last split=false
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
last=$(__grub_get_last_option)
|
||||||
|
|
||||||
|
_split_longopt && split=true
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
--boot-directory)
|
||||||
|
_filedir -d
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
--disk-module)
|
||||||
|
__grubcomp "biosdisk ata"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
$split && return 0
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
case "$last" in
|
||||||
|
--modules)
|
||||||
|
__grub_list_modules
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_install_program=$( echo grub-install | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_install_program} && \
|
||||||
|
complete -F _grub_install -o filenames ${__grub_install_program}
|
||||||
|
unset __grub_install_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-mkfont
|
||||||
|
#
|
||||||
|
_grub_mkfont () {
|
||||||
|
local cur
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_mkfont_program=$( echo grub-mkfont | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_mkfont_program} && \
|
||||||
|
complete -F _grub_mkfont -o filenames ${__grub_mkfont_program}
|
||||||
|
unset __grub_mkfont_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-mkrescue
|
||||||
|
#
|
||||||
|
_grub_mkrescue () {
|
||||||
|
local cur prev last
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
last=$(__grub_get_last_option)
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
case "$last" in
|
||||||
|
--modules)
|
||||||
|
__grub_list_modules
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_mkrescue_program=$( echo grub-mkrescue | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_mkrescue_program} && \
|
||||||
|
complete -F _grub_mkrescue -o filenames ${__grub_mkrescue_program}
|
||||||
|
unset __grub_mkrescue_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-mkimage
|
||||||
|
#
|
||||||
|
_grub_mkimage () {
|
||||||
|
local cur prev split=false
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
_split_longopt && split=true
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
-d|--directory|-p|--prefix)
|
||||||
|
_filedir -d
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
-O|--format)
|
||||||
|
# Get available format from help
|
||||||
|
local prog=${COMP_WORDS[0]}
|
||||||
|
__grubcomp "$($prog --help | \
|
||||||
|
awk -F ":" '/available formats/ { print $2 }' | \
|
||||||
|
sed 's/, / /g')"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
$split && return 0
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_mkimage_program=$( echo grub-mkimage | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_mkimage_program} && \
|
||||||
|
complete -F _grub_mkimage -o filenames ${__grub_mkimage_program}
|
||||||
|
unset __grub_mkimage_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-mkpasswd-pbkdf2
|
||||||
|
#
|
||||||
|
_grub_mkpasswd-pbkdf2 () {
|
||||||
|
local cur
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_mkpasswd_pbkdf2_program=$( echo grub-mkpasswd-pbkdf2 | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_mkpasswd_pbkdf2_program} && \
|
||||||
|
complete -F _grub_mkpasswd-pbkdf2 -o filenames ${__grub_mkpasswd_pbkdf2_program}
|
||||||
|
unset __grub_mkpasswd_pbkdf2_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-probe
|
||||||
|
#
|
||||||
|
_grub_probe () {
|
||||||
|
local cur prev split=false
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
_split_longopt && split=true
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
-t|--target)
|
||||||
|
# Get target type from help
|
||||||
|
local prog=${COMP_WORDS[0]}
|
||||||
|
__grubcomp "$($prog --help | \
|
||||||
|
awk -F "[()]" '/--target=/ { print $2 }' | \
|
||||||
|
sed 's/|/ /g')"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
$split && return 0
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_probe_program=$( echo grub-probe | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_probe_program} && \
|
||||||
|
complete -F _grub_probe -o filenames ${__grub_probe_program}
|
||||||
|
unset __grub_probe_program
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# grub-script-check
|
||||||
|
#
|
||||||
|
_grub_script-check () {
|
||||||
|
local cur
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
__grubcomp "$(__grub_get_options_from_help)"
|
||||||
|
else
|
||||||
|
# Default complete with a filename
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
__grub_script_check_program=$( echo grub-script-check | sed "@program_transform_name@" )
|
||||||
|
have ${__grub_script_check_program} && \
|
||||||
|
complete -F _grub_script-check -o filenames ${__grub_script_check_program}
|
||||||
|
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-basic-offset: 4
|
||||||
|
# sh-indent-comment: t
|
||||||
|
# indent-tabs-mode: nil
|
||||||
|
# End:
|
||||||
|
# ex: ts=4 sw=4 et filetype=sh
|
Loading…
Reference in a new issue