From 917f3e4d25784cbd1490fc4f27e6246d98987987 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 13 Mar 2013 12:46:16 +0100 Subject: [PATCH] add dracut-bash-completion.sh --- Makefile | 3 +++ dracut-bash-completion.sh | 68 +++++++++++++++++++++++++++++++++++++++++++++++ dracut.spec | 1 + 3 files changed, 72 insertions(+) create mode 100644 dracut-bash-completion.sh diff --git a/Makefile b/Makefile index a11689c..644d17d 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ bindir ?= ${prefix}/bin mandir ?= ${prefix}/share/man CFLAGS ?= -O2 -g -Wall CFLAGS += -std=gnu99 +bashcompletiondir ?= ${datadir}/bash-completion/completions man1pages = lsinitrd.1 @@ -119,6 +120,8 @@ endif mkdir -p $(DESTDIR)${prefix}/lib/kernel/install.d install -m 0755 50-dracut.install $(DESTDIR)${prefix}/lib/kernel/install.d/50-dracut.install install -m 0755 51-dracut-rescue.install $(DESTDIR)${prefix}/lib/kernel/install.d/51-dracut-rescue.install + mkdir -p $(DESTDIR)${bashcompletiondir} + install -m 0644 dracut-bash-completion.sh $(DESTDIR)${bashcompletiondir}/dracut dracut-version.sh: @echo "DRACUT_VERSION=$(VERSION)-$(GITVERSION)" > dracut-version.sh diff --git a/dracut-bash-completion.sh b/dracut-bash-completion.sh new file mode 100644 index 0000000..da067c5 --- /dev/null +++ b/dracut-bash-completion.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +# +# Copyright 2013 Red Hat, Inc. All rights reserved. +# +# This program 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 2 of the License, or +# (at your option) any later version. +# +# This program 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 this program. If not, see . +# + +__contains_word () { + local word=$1; shift + for w in $*; do [[ $w = $word ]] && return 0; done + return 1 +} + +_dracut() { + local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} + local -A OPTS=( + [STANDALONE]='-f -v -q -l -H -h -M -N + --ro-mnt --force --kernel-only --no-kernel --strip --nostrip + --hardlink --nohardlink --noprefix --mdadmconf --nomdadmconf + --lvmconf --nolvmconf --debug --profile --verbose --quiet + --local --hostonly --no-hostonly --fstab --help --bzip2 --lzma + --xz --no-compress --gzip --list-modules --show-modules --keep + --printsize --regenerate-all' + + [ARG]='-a -m -o -d -I -k -c -L --kver --add --force-add --add-drivers + --omit-drivers --modules --omit --drivers --filesystems --install + --fwdir --libdirs --fscks --add-fstab --mount --device --nofscks + --kmoddir --conf --confdir --tmpdir --stdlog --compress --prefix + --kernel-cmdline --sshkey' + ) + + if __contains_word "$prev" ${OPTS[ARG]}; then + case $prev in + --kmoddir|-k|--fwdir|-c|--conf|--confdir|--tmpdir|--sshkey|--add-fstab|--add-device|-I|--install) + comps=$(compgen -d -- "$cur") + compopt -o filenames + ;; + -a|-m|-o|--add|--modules|--omit) + comps=$(dracut --list-modules 2>/dev/null) + ;; + *) + return 0 + ;; + esac + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 + fi + + if [[ $cur = -* ]]; then + COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) + return 0 + fi +} + +complete -F _dracut dracut diff --git a/dracut.spec b/dracut.spec index 06149de..418baf4 100644 --- a/dracut.spec +++ b/dracut.spec @@ -277,6 +277,7 @@ rm -rf $RPM_BUILD_ROOT %{_bindir}/dracut # compat symlink /sbin/dracut +%{_datadir}/bash-completion/completions/dracut %if 0%{?fedora} > 12 || 0%{?rhel} >= 6 || 0%{?suse_version} > 9999 %{_bindir}/mkinitrd %{_bindir}/lsinitrd