423 lines
9.0 KiB
Bash
423 lines
9.0 KiB
Bash
#
|
|
# Bash completion for VasEBoot
|
|
#
|
|
# Copyright (C) 2010 Free Software Foundation, Inc.
|
|
#
|
|
# VAS_EBOOT 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.
|
|
#
|
|
# VAS_EBOOT 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 VAS_EBOOT. If not, see <http://www.gnu.org/licenses/>.
|
|
# bash completion for VasEBoot
|
|
|
|
__VasEBoot_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%/}/@VasEBootdirname@"
|
|
}
|
|
|
|
|
|
# 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
|
|
__VasEBootcomp () {
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
if [ $# -gt 2 ]; then
|
|
cur="$3"
|
|
fi
|
|
case "$cur" in
|
|
--*=)
|
|
COMPREPLY=()
|
|
;;
|
|
*)
|
|
local line IFS=' '$'\t'$'\n'
|
|
COMPREPLY=()
|
|
while read -r line; do
|
|
COMPREPLY+=("${line}")
|
|
done < <(compgen -P "${2-}" -W "${1-}" -S "${4-}" -- "$cur")
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Function that return long options from the help of the command
|
|
# - arg: $1 (optional) command to get the long options from
|
|
# shellcheck disable=SC2120
|
|
__VasEBoot_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 $(LC_ALL=C $prog --help)
|
|
do
|
|
case $i in
|
|
--*) echo "${i%=*}";;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Function that return long options from the usage of the command
|
|
# - arg: $1 (optional) command to get the long options from
|
|
__VasEBoot_get_options_from_usage () {
|
|
local prog
|
|
|
|
if [ $# -ge 1 ]; then
|
|
prog="$1"
|
|
else
|
|
prog="${COMP_WORDS[0]}"
|
|
fi
|
|
|
|
local i IFS=" "$'\t'$'\n'
|
|
for i in $(LC_ALL=C $prog --usage)
|
|
do
|
|
case $i in
|
|
\[--*\]) i=${i#[} # Remove leading [
|
|
echo ${i%%?(=*)]} # Remove optional value and trailing ]
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
__VasEBoot_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
|
|
}
|
|
|
|
__VasEBoot_list_menuentries () {
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
local config_file
|
|
config_file=$(__VasEBoot_dir)/VasEBoot.cfg
|
|
|
|
if [ -f "$config_file" ];then
|
|
local line IFS=$'\n'
|
|
COMPREPLY=()
|
|
while read -r line; do
|
|
COMPREPLY+=("${line}")
|
|
done < <(compgen \
|
|
-W "$( awk -F "[\"']" '/menuentry/ { print $2 }' $config_file )" \
|
|
-- "$cur" ) #'# Help emacs syntax highlighting
|
|
fi
|
|
}
|
|
|
|
__VasEBoot_list_modules () {
|
|
local VasEBoot_dir
|
|
VasEBoot_dir=$(__VasEBoot_dir)
|
|
local line tmp IFS=$'\n'
|
|
COMPREPLY=()
|
|
while read -r line; do
|
|
COMPREPLY+=("${line}")
|
|
done < <(compgen -f -X '!*/*.mod' -- "${VasEBoot_dir}/$cur" | {
|
|
while read -r tmp; do
|
|
[ -n "$tmp" ] && {
|
|
tmp=${tmp##*/}
|
|
printf '%s\n' ${tmp%.mod}
|
|
}
|
|
done
|
|
})
|
|
}
|
|
|
|
#
|
|
# VasEBoot-set-default & VasEBoot-reboot
|
|
#
|
|
__VasEBoot_set_entry () {
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
COMPREPLY=()
|
|
|
|
case "$prev" in
|
|
--boot-directory)
|
|
_filedir -d
|
|
return
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
# Default complete with a menuentry
|
|
__VasEBoot_list_menuentries
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-editenv
|
|
#
|
|
__VasEBoot_editenv () {
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
COMPREPLY=()
|
|
|
|
case "$prev" in
|
|
create|list|set|unset)
|
|
COMPREPLY=( "" )
|
|
return
|
|
;;
|
|
esac
|
|
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)
|
|
create list set unset"
|
|
}
|
|
|
|
#
|
|
# VasEBoot-mkconfig
|
|
#
|
|
__VasEBoot_mkconfig () {
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
COMPREPLY=()
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-setup
|
|
#
|
|
__VasEBoot_setup () {
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
COMPREPLY=()
|
|
|
|
case "$prev" in
|
|
-d|--directory)
|
|
_filedir -d
|
|
return
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-install
|
|
#
|
|
__VasEBoot_install () {
|
|
local cur prev words cword split last
|
|
_init_completion -s || return
|
|
|
|
COMPREPLY=()
|
|
last=$(__VasEBoot_get_last_option)
|
|
|
|
case "$prev" in
|
|
--boot-directory)
|
|
_filedir -d
|
|
return
|
|
;;
|
|
--disk-module)
|
|
__VasEBootcomp "biosdisk ata"
|
|
return
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
case "$last" in
|
|
--modules)
|
|
__VasEBoot_list_modules
|
|
return
|
|
;;
|
|
esac
|
|
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-mkfont
|
|
#
|
|
__VasEBoot_mkfont () {
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
COMPREPLY=()
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-mkrescue
|
|
#
|
|
__VasEBoot_mkrescue () {
|
|
local cur prev words cword last
|
|
_init_completion || return
|
|
|
|
COMPREPLY=()
|
|
last=$(__VasEBoot_get_last_option)
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
case "$last" in
|
|
--modules)
|
|
__VasEBoot_list_modules
|
|
return
|
|
;;
|
|
esac
|
|
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-mkimage
|
|
#
|
|
__VasEBoot_mkimage () {
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
COMPREPLY=()
|
|
|
|
case "$prev" in
|
|
-d|--directory|-p|--prefix)
|
|
_filedir -d
|
|
return
|
|
;;
|
|
-O|--format)
|
|
# Get available format from help
|
|
local prog=${COMP_WORDS[0]}
|
|
__VasEBootcomp "$(LC_ALL=C $prog --help | \
|
|
awk -F ":" '/available formats/ { print $2 }' | \
|
|
sed 's/, / /g')"
|
|
return
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-mkpasswd-pbkdf2
|
|
#
|
|
__VasEBoot_mkpasswd_pbkdf2 () {
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
COMPREPLY=()
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-probe
|
|
#
|
|
__VasEBoot_probe () {
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
COMPREPLY=()
|
|
|
|
case "$prev" in
|
|
-t|--target)
|
|
# Get target type from help
|
|
local prog=${COMP_WORDS[0]}
|
|
__VasEBootcomp "$(LC_ALL=C $prog --help | \
|
|
awk -F "[()]" '/--target=/ { print $2 }' | \
|
|
sed 's/|/ /g')"
|
|
return
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
#
|
|
# VasEBoot-script-check
|
|
#
|
|
__VasEBoot_script_check () {
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
COMPREPLY=()
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
__VasEBootcomp "$(__VasEBoot_get_options_from_help)"
|
|
else
|
|
# Default complete with a filename
|
|
_filedir
|
|
fi
|
|
}
|
|
|
|
# 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
|