2
# Bash completion for grub
4
# Copyright (C) 2010 Free Software Foundation, Inc.
6
# GRUB is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
11
# GRUB is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
18
# bash completion for grub
23
for (( c=1; c <= ${#COMP_WORDS[@]}; c++ )); do
34
boot_dir=${boot_dir-/@bootdirname@}
35
echo "${boot_dir%/}/@grubdirname@"
39
# This function generates completion reply with compgen
40
# - arg: accepts 1, 2, 3, or 4 arguments
41
# $1 wordlist separate by space, tab or newline
42
# $2 (optional) prefix to add
43
# $3 (optional) current word to complete
44
# $4 (optional) suffix to add
46
local cur="${COMP_WORDS[COMP_CWORD]}"
55
local IFS=' '$'\t'$'\n'
56
COMPREPLY=($(compgen -P "${2-}" -W "${1-}" -S "${4-}" -- "$cur"))
61
# Function that return long options from the help of the command
62
# - arg: $1 (optional) command to get the long options from
63
__grub_get_options_from_help () {
69
prog="${COMP_WORDS[0]}"
72
local i IFS=" "$'\t'$'\n'
73
for i in $(LC_ALL=C $prog --help)
81
# Function that return long options from the usage of the command
82
# - arg: $1 (optional) command to get the long options from
83
__grub_get_options_from_usage () {
89
prog="${COMP_WORDS[0]}"
92
local i IFS=" "$'\t'$'\n'
93
for i in $(LC_ALL=C $prog --usage)
96
\[--*\]) i=${i#[} # Remove leading [
97
echo ${i%%?(=*)]} # Remove optional value and trailing ]
103
__grub_get_last_option () {
105
for (( i=$COMP_CWORD-1; i > 0; i-- )); do
106
if [[ "${COMP_WORDS[i]}" == -* ]]; then
107
echo "${COMP_WORDS[i]}"
113
__grub_list_menuentries () {
114
local cur="${COMP_WORDS[COMP_CWORD]}"
115
local config_file=$(__grub_dir)/grub.cfg
117
if [ -f "$config_file" ];then
119
COMPREPLY=( $(compgen \
120
-W "$( awk -F "[\"']" '/menuentry/ { print $2 }' $config_file )" \
121
-- "$cur" )) #'# Help emacs syntax highlighting
125
__grub_list_modules () {
126
local grub_dir=$(__grub_dir)
128
COMPREPLY=( $( compgen -f -X '!*/*.mod' -- "${grub_dir}/$cur" | {
129
while read -r tmp; do
132
printf '%s\n' ${tmp%.mod}
140
# grub-set-default & grub-reboot
143
local cur prev split=false
147
prev=${COMP_WORDS[COMP_CWORD-1]}
149
_split_longopt && split=true
160
if [[ "$cur" == -* ]]; then
161
__grubcomp "$(__grub_get_options_from_help)"
163
# Default complete with a menuentry
164
__grub_list_menuentries
168
__grub_set_default_program=$( echo grub-set-default | sed "@program_transform_name@" )
169
have ${__grub_set_default_program} && \
170
complete -F _grub_set_entry -o filenames ${__grub_set_default_program}
171
unset __grub_set_default_program
173
__grub_reboot_program=$( echo grub-reboot | sed "@program_transform_name@" )
174
have ${__grub_reboot_program} && \
175
complete -F _grub_set_entry -o filenames ${__grub_reboot_program}
176
unset __grub_reboot_program
187
prev=${COMP_WORDS[COMP_CWORD-1]}
190
create|list|set|unset)
196
__grubcomp "$(__grub_get_options_from_help)
197
create list set unset"
200
__grub_editenv_program=$( echo grub-editenv | sed "@program_transform_name@" )
201
have ${__grub_editenv_program} && \
202
complete -F _grub_editenv -o filenames ${__grub_editenv_program}
203
unset __grub_editenv_program
215
if [[ "$cur" == -* ]]; then
216
__grubcomp "$(__grub_get_options_from_help)"
221
__grub_mkconfig_program=$( echo grub-mkconfig | sed "@program_transform_name@" )
222
have ${__grub_mkconfig_program} && \
223
complete -F _grub_mkconfig -o filenames ${__grub_mkconfig_program}
224
unset __grub_mkconfig_program
231
local cur prev split=false
235
prev=${COMP_WORDS[COMP_CWORD-1]}
237
_split_longopt && split=true
248
if [[ "$cur" == -* ]]; then
249
__grubcomp "$(__grub_get_options_from_help)"
251
# Default complete with a filename
255
__grub_setup_program=$( echo grub-setup | sed "@program_transform_name@" )
256
have ${__grub_setup_program} && \
257
complete -F _grub_setup -o filenames ${__grub_setup_program}
258
unset __grub_setup_program
265
local cur prev last split=false
269
prev=${COMP_WORDS[COMP_CWORD-1]}
270
last=$(__grub_get_last_option)
272
_split_longopt && split=true
280
__grubcomp "biosdisk ata"
287
if [[ "$cur" == -* ]]; then
288
__grubcomp "$(__grub_get_options_from_help)"
297
# Default complete with a filename
301
__grub_install_program=$( echo grub-install | sed "@program_transform_name@" )
302
have ${__grub_install_program} && \
303
complete -F _grub_install -o filenames ${__grub_install_program}
304
unset __grub_install_program
316
if [[ "$cur" == -* ]]; then
317
__grubcomp "$(__grub_get_options_from_help)"
319
# Default complete with a filename
323
__grub_mkfont_program=$( echo grub-mkfont | sed "@program_transform_name@" )
324
have ${__grub_mkfont_program} && \
325
complete -F _grub_mkfont -o filenames ${__grub_mkfont_program}
326
unset __grub_mkfont_program
337
prev=${COMP_WORDS[COMP_CWORD-1]}
338
last=$(__grub_get_last_option)
340
if [[ "$cur" == -* ]]; then
341
__grubcomp "$(__grub_get_options_from_help)"
350
# Default complete with a filename
354
__grub_mkrescue_program=$( echo grub-mkrescue | sed "@program_transform_name@" )
355
have ${__grub_mkrescue_program} && \
356
complete -F _grub_mkrescue -o filenames ${__grub_mkrescue_program}
357
unset __grub_mkrescue_program
364
local cur prev split=false
368
prev=${COMP_WORDS[COMP_CWORD-1]}
370
_split_longopt && split=true
373
-d|--directory|-p|--prefix)
378
# Get available format from help
379
local prog=${COMP_WORDS[0]}
380
__grubcomp "$(LC_ALL=C $prog --help | \
381
awk -F ":" '/available formats/ { print $2 }' | \
389
if [[ "$cur" == -* ]]; then
390
__grubcomp "$(__grub_get_options_from_help)"
392
# Default complete with a filename
396
__grub_mkimage_program=$( echo grub-mkimage | sed "@program_transform_name@" )
397
have ${__grub_mkimage_program} && \
398
complete -F _grub_mkimage -o filenames ${__grub_mkimage_program}
399
unset __grub_mkimage_program
403
# grub-mkpasswd-pbkdf2
405
_grub_mkpasswd-pbkdf2 () {
411
if [[ "$cur" == -* ]]; then
412
__grubcomp "$(__grub_get_options_from_help)"
414
# Default complete with a filename
418
__grub_mkpasswd_pbkdf2_program=$( echo grub-mkpasswd-pbkdf2 | sed "@program_transform_name@" )
419
have ${__grub_mkpasswd_pbkdf2_program} && \
420
complete -F _grub_mkpasswd-pbkdf2 -o filenames ${__grub_mkpasswd_pbkdf2_program}
421
unset __grub_mkpasswd_pbkdf2_program
428
local cur prev split=false
432
prev=${COMP_WORDS[COMP_CWORD-1]}
434
_split_longopt && split=true
438
# Get target type from help
439
local prog=${COMP_WORDS[0]}
440
__grubcomp "$(LC_ALL=C $prog --help | \
441
awk -F "[()]" '/--target=/ { print $2 }' | \
449
if [[ "$cur" == -* ]]; then
450
__grubcomp "$(__grub_get_options_from_help)"
452
# Default complete with a filename
456
__grub_probe_program=$( echo grub-probe | sed "@program_transform_name@" )
457
have ${__grub_probe_program} && \
458
complete -F _grub_probe -o filenames ${__grub_probe_program}
459
unset __grub_probe_program
465
_grub_script-check () {
471
if [[ "$cur" == -* ]]; then
472
__grubcomp "$(__grub_get_options_from_help)"
474
# Default complete with a filename
478
__grub_script_check_program=$( echo grub-script-check | sed "@program_transform_name@" )
479
have ${__grub_script_check_program} && \
480
complete -F _grub_script-check -o filenames ${__grub_script_check_program}
486
# sh-indent-comment: t
487
# indent-tabs-mode: nil
489
# ex: ts=4 sw=4 et filetype=sh