* [PATCH] Bash completion script for util commands
@ 2010-09-01 12:40 Yves Blusseau
2010-09-02 21:44 ` Vladimir 'φ-coder/phcoder' Serbinenko
0 siblings, 1 reply; 4+ messages in thread
From: Yves Blusseau @ 2010-09-01 12:40 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1: Type: text/plain, Size: 732 bytes --]
* 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.
---
ChangeLog.completion.bash | 6
Makefile.am | 2
configure.ac | 1
util/bash-completion.d/Makefile.am | 15 +
util/bash-completion.d/grub-completion.bash.in | 450 ++++++++++++++++++++++++
5 files changed, 473 insertions(+), 1 deletions(-)
create mode 100644 ChangeLog.completion.bash
create mode 100644 util/bash-completion.d/Makefile.am
create mode 100644 util/bash-completion.d/grub-completion.bash.in
[-- Attachment #2: bash-completion.patch --]
[-- Type: text/plain, Size: 12775 bytes --]
diff --git a/ChangeLog.completion.bash b/ChangeLog.completion.bash
new file mode 100644
index 0000000..e57374a
--- /dev/null
+++ b/ChangeLog.completion.bash
@@ -0,0 +1,6 @@
+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.
diff --git a/Makefile.am b/Makefile.am
index 1cf2297..c05d352 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
AUTOMAKE_OPTIONS = subdir-objects
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.extra-dist
diff --git a/configure.ac b/configure.ac
index b167408..fa96af7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -933,6 +933,7 @@ AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([grub-core/Makefile])
AC_CONFIG_FILES([po/Makefile])
AC_CONFIG_FILES([docs/Makefile])
+AC_CONFIG_FILES([util/bash-completion.d/Makefile])
AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
AC_OUTPUT
diff --git a/util/bash-completion.d/Makefile.am b/util/bash-completion.d/Makefile.am
new file mode 100644
index 0000000..774e1a3
--- /dev/null
+++ b/util/bash-completion.d/Makefile.am
@@ -0,0 +1,15 @@
+
+bash_completion_source = grub-completion.bash.in
+bash_completion_script = $(grubname)
+
+EXTRA_DIST = $(bash_completion_source)
+
+CLEANFILES = $(bash_completion_script)
+
+DISTCLEANFILES = *~
+
+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=$@:$<
diff --git a/util/bash-completion.d/grub-completion.bash.in b/util/bash-completion.d/grub-completion.bash.in
new file mode 100644
index 0000000..4d9a96f
--- /dev/null
+++ b/util/bash-completion.d/grub-completion.bash.in
@@ -0,0 +1,450 @@
+#
+# 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
+
+__@grubname@_dir() {
+ local i c=1 root_dir boot_dir
+
+ for (( c=1; c <= ${#COMP_WORDS[@]}; c++ )); do
+ i="${COMP_WORDS[c]}"
+ case "$i" in
+ --root-directory)
+ c=$((++c))
+ i="${COMP_WORDS[c]}"
+ root_dir="${i##*=}";
+ break
+ ;;
+ esac
+ done
+ root_dir=${root_dir-/}
+ if [[ -d "$root_dir/boot" ]]; then
+ boot_dir="$root_dir/boot"
+ else
+ boot_dir="$root_dir"
+ fi
+ echo "${boot_dir%/}/grub"
+}
+
+
+# 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
+__@grubname@comp () {
+ 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 command to get the long options from
+__@grubname@_get_options_from_help () {
+ local i IFS=" "$'\t'$'\n'
+ for i in $($1 --help)
+ do
+ case $i in
+ --*) echo "${i%=*}";;
+ esac
+ done
+}
+
+__@grubname@_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
+}
+
+__@grubname@_list_menuentries () {
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ local config_file=$(__@grubname@_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
+}
+
+__@grubname@_list_modules () {
+ local grub_dir=$(__@grubname@_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
+ }
+ ))
+}
+
+#
+# @grubname@-set-default & @grubname@-reboot
+#
+_@grubname@_set_entry () {
+ local cur prev split=false
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ _split_longopt && split=true
+
+ case "$prev" in
+ --root-directory)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return 0
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "--help --version --root-directory"
+ else
+ # Default complete with a menuentry
+ __@grubname@_list_menuentries
+ fi
+}
+
+have @grubname@-set-default && \
+ complete -F _@grubname@_set_entry -o filenames @grubname@-set-default
+have @grubname@-reboot && \
+ complete -F _@grubname@_set_entry -o filenames @grubname@-reboot
+
+#
+# @grubname@-editenv
+#
+_@grubname@_editenv () {
+ local cur prev
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ create|list|set|unset)
+ COMPREPLY=( "" )
+ return
+ ;;
+ esac
+
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-editenv')
+ create list set unset"
+}
+have @grubname@-editenv && \
+ complete -F _@grubname@_editenv -o filenames @grubname@-editenv
+
+#
+# @grubname@-mkconfig
+#
+_@grubname@_mkconfig () {
+ local cur prev
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-mkconfig')"
+ else
+ _filedir
+ fi
+}
+have @grubname@-mkconfig && \
+ complete -F _@grubname@_mkconfig -o filenames @grubname@-mkconfig
+
+#
+# @grubname@-setup
+#
+_@grubname@_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
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-setup')"
+ else
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-setup && \
+ complete -F _@grubname@_setup -o filenames @grubname@-setup
+
+#
+# @grubname@-install
+#
+_@grubname@_install () {
+ local cur prev last split=false
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ last=$(__@grubname@_get_last_option)
+
+ _split_longopt && split=true
+
+ case "$prev" in
+ --root-directory)
+ _filedir -d
+ return
+ ;;
+ --disk-module)
+ __@grubname@comp "biosdisk ata"
+ return
+ ;;
+ esac
+
+ $split && return 0
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-install')"
+ else
+ case "$last" in
+ --modules)
+ __@grubname@_list_modules
+ return
+ ;;
+ esac
+
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-install && \
+ complete -F _@grubname@_install -o filenames @grubname@-install
+
+#
+# @grubname@-mkfont
+#
+_@grubname@_mkfont () {
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-mkfont')"
+ else
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-mkfont && \
+ complete -F _@grubname@_mkfont -o filenames @grubname@-mkfont
+
+#
+# @grubname@-mkrescue
+#
+_@grubname@_mkrescue () {
+ local cur prev last
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ last=$(__@grubname@_get_last_option)
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-mkrescue')"
+ else
+ case "$last" in
+ --modules)
+ __@grubname@_list_modules
+ return
+ ;;
+ esac
+
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-mkrescue && \
+ complete -F _@grubname@_mkrescue -o filenames @grubname@-mkrescue
+
+#
+# @grubname@-mkelfimage
+#
+_@grubname@_mkelfimage () {
+ 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
+ ;;
+ esac
+
+ $split && return 0
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-mkelfimage')"
+ else
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-mkelfimage && \
+ complete -F _@grubname@_mkelfimage -o filenames @grubname@-mkelfimage
+
+#
+# @grubname@-mkimage
+#
+_@grubname@_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
+ ;;
+ esac
+
+ $split && return 0
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-mkimage')"
+ else
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-mkimage && \
+ complete -F _@grubname@_mkimage -o filenames @grubname@-mkimage
+
+#
+# @grubname@-mkpasswd-pbkdf2
+#
+_@grubname@_mkpasswd-pbkdf2 () {
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-mkpasswd-pbkdf2')"
+ else
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-mkpasswd-pbkdf2 && \
+ complete -F _@grubname@_mkpasswd-pbkdf2 -o filenames @grubname@-mkpasswd-pbkdf2
+
+#
+# @grubname@-probe
+#
+_@grubname@_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
+ __@grubname@comp "$(@grubname@-probe --help | \
+ awk -F "[()]" '/--target=/ { print $2 }' | \
+ sed 's/|/ /g')"
+ return
+ ;;
+ esac
+
+ $split && return 0
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-probe')"
+ else
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-probe && \
+ complete -F _@grubname@_probe -o filenames @grubname@-probe
+
+#
+# @grubname@-script-check
+#
+_@grubname@_script-check () {
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ __@grubname@comp "$(__@grubname@_get_options_from_help '@grubname@-script-check')"
+ else
+ # Default complete with a filename
+ _filedir
+ fi
+}
+have @grubname@-script-check && \
+ complete -F _@grubname@_script-check -o filenames @grubname@-script-check
+
+# 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
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] Bash completion script for util commands
2010-09-01 12:40 [PATCH] Bash completion script for util commands Yves Blusseau
@ 2010-09-02 21:44 ` Vladimir 'φ-coder/phcoder' Serbinenko
0 siblings, 0 replies; 4+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2010-09-02 21:44 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1: Type: text/plain, Size: 1533 bytes --]
On 09/01/2010 02:40 PM, Yves Blusseau wrote:
> * 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.
> ---
> ChangeLog.completion.bash | 6
> Makefile.am | 2
> configure.ac | 1
> util/bash-completion.d/Makefile.am | 15 +
> util/bash-completion.d/grub-completion.bash.in | 450 ++++++++++++++++++++++++
> 5 files changed, 473 insertions(+), 1 deletions(-)
> create mode 100644 ChangeLog.completion.bash
> create mode 100644 util/bash-completion.d/Makefile.am
> create mode 100644 util/bash-completion.d/grub-completion.bash.in
>
> bash-completion.patch
>
>
> +DISTCLEANFILES = *~
>
We don't add *~ in other Makefile.am. If this should be changed it
should be on the level of whole GRUB
> +__@grubname@_dir() {
>
Functionnames aren't transformed
> + root_dir=${root_dir-/}
>
but dirnames are
> + if [[ -d "$root_dir/boot" ]]; then
> + boot_dir="$root_dir/boot"
>
likewise
> + else
> + boot_dir="$root_dir"
>
> + fi
> + echo "${boot_dir%/}/grub"
>
likewise
These errors repeat themselves many times and make the patch more
difficult to read. Once they are fixed I'll have another look for more
comments.
--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 294 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] Bash completion script for util commands
@ 2010-09-06 14:33 Yves Blusseau
0 siblings, 0 replies; 4+ messages in thread
From: Yves Blusseau @ 2010-09-06 14:33 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1: Type: text/plain, Size: 732 bytes --]
* 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.
---
ChangeLog.completion.bash | 6
Makefile.am | 2
configure.ac | 1
util/bash-completion.d/Makefile.am | 13 +
util/bash-completion.d/grub-completion.bash.in | 469 ++++++++++++++++++++++++
5 files changed, 490 insertions(+), 1 deletions(-)
create mode 100644 ChangeLog.completion.bash
create mode 100644 util/bash-completion.d/Makefile.am
create mode 100644 util/bash-completion.d/grub-completion.bash.in
[-- Attachment #2: bash-completion.patch --]
[-- Type: text/plain, Size: 13375 bytes --]
diff --git a/ChangeLog.completion.bash b/ChangeLog.completion.bash
new file mode 100644
index 0000000..e57374a
--- /dev/null
+++ b/ChangeLog.completion.bash
@@ -0,0 +1,6 @@
+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.
diff --git a/Makefile.am b/Makefile.am
index 1cf2297..c05d352 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
AUTOMAKE_OPTIONS = subdir-objects
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.extra-dist
diff --git a/configure.ac b/configure.ac
index 49761af..9494969 100644
--- a/configure.ac
+++ b/configure.ac
@@ -943,6 +943,7 @@ AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([grub-core/Makefile])
AC_CONFIG_FILES([po/Makefile])
AC_CONFIG_FILES([docs/Makefile])
+AC_CONFIG_FILES([util/bash-completion.d/Makefile])
AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
AC_OUTPUT
diff --git a/util/bash-completion.d/Makefile.am b/util/bash-completion.d/Makefile.am
new file mode 100644
index 0000000..5817198
--- /dev/null
+++ b/util/bash-completion.d/Makefile.am
@@ -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=$@:$<
diff --git a/util/bash-completion.d/grub-completion.bash.in b/util/bash-completion.d/grub-completion.bash.in
new file mode 100644
index 0000000..fddc424
--- /dev/null
+++ b/util/bash-completion.d/grub-completion.bash.in
@@ -0,0 +1,469 @@
+#
+# 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_dirname=$(echo @grubdirname@ | sed "@program_transform_name@")
+
+__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%/}/${__grub_dirname}"
+}
+
+
+# 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
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] Bash completion script for util commands
@ 2010-09-08 13:51 Yves Blusseau
0 siblings, 0 replies; 4+ messages in thread
From: Yves Blusseau @ 2010-09-08 13:51 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1: Type: text/plain, Size: 518 bytes --]
* 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.
---
util/bash-completion.d/Makefile.am | 13 +
util/bash-completion.d/grub-completion.bash.in | 467 ++++++++++++++++++++++++
2 files changed, 480 insertions(+), 0 deletions(-)
create mode 100644 util/bash-completion.d/Makefile.am
create mode 100644 util/bash-completion.d/grub-completion.bash.in
[-- Attachment #2: bash-completion.patch --]
[-- Type: text/plain, Size: 13298 bytes --]
diff --git a/ChangeLog.completion.bash b/ChangeLog.completion.bash
new file mode 100644
index 0000000..e57374a
--- /dev/null
+++ b/ChangeLog.completion.bash
@@ -0,0 +1,6 @@
+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.
diff --git a/Makefile.am b/Makefile.am
index 1cf2297..c05d352 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
AUTOMAKE_OPTIONS = subdir-objects
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.extra-dist
diff --git a/configure.ac b/configure.ac
index 4c637ac..94eec24 100644
--- a/configure.ac
+++ b/configure.ac
@@ -944,6 +944,7 @@ AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([grub-core/Makefile])
AC_CONFIG_FILES([po/Makefile])
AC_CONFIG_FILES([docs/Makefile])
+AC_CONFIG_FILES([util/bash-completion.d/Makefile])
AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
AC_OUTPUT
diff --git a/util/bash-completion.d/Makefile.am b/util/bash-completion.d/Makefile.am
new file mode 100644
index 0000000..5817198
--- /dev/null
+++ b/util/bash-completion.d/Makefile.am
@@ -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=$@:$<
diff --git a/util/bash-completion.d/grub-completion.bash.in b/util/bash-completion.d/grub-completion.bash.in
new file mode 100644
index 0000000..abba0df
--- /dev/null
+++ b/util/bash-completion.d/grub-completion.bash.in
@@ -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
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-09-08 14:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-01 12:40 [PATCH] Bash completion script for util commands Yves Blusseau
2010-09-02 21:44 ` Vladimir 'φ-coder/phcoder' Serbinenko
-- strict thread matches above, loose matches on Subject: below --
2010-09-06 14:33 Yves Blusseau
2010-09-08 13:51 Yves Blusseau
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.