From 7dbca9be866afd65d7ab5368250429e4291aaf88 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Tue, 16 Apr 2013 10:43:39 +0200 Subject: [PATCH] lsinitrd: add bash completion --- Makefile | 1 + dracut.spec | 1 + lsinitrd-bash-completion.sh | 63 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 lsinitrd-bash-completion.sh diff --git a/Makefile b/Makefile index d3798c6..e0baef2 100644 --- a/Makefile +++ b/Makefile @@ -137,6 +137,7 @@ endif 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 + install -m 0644 lsinitrd-bash-completion.sh $(DESTDIR)${bashcompletiondir}/lsinitrd dracut-version.sh: @echo "DRACUT_VERSION=$(VERSION)$(GITVERSION)" > dracut-version.sh diff --git a/dracut.spec b/dracut.spec index cb605c6..197e9a0 100644 --- a/dracut.spec +++ b/dracut.spec @@ -282,6 +282,7 @@ rm -rf $RPM_BUILD_ROOT # compat symlink /sbin/dracut %{_datadir}/bash-completion/completions/dracut +%{_datadir}/bash-completion/completions/lsinitrd %if 0%{?fedora} > 12 || 0%{?rhel} >= 6 || 0%{?suse_version} > 9999 %{_bindir}/mkinitrd %{_bindir}/lsinitrd diff --git a/lsinitrd-bash-completion.sh b/lsinitrd-bash-completion.sh new file mode 100644 index 0000000..78ab165 --- /dev/null +++ b/lsinitrd-bash-completion.sh @@ -0,0 +1,63 @@ +#!/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 +} + +_lsinitrd() { + local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} + local -A OPTS=( + [STANDALONE]='-s --size -h --help' + + [ARG]='-f --file -k --kver' + ) + + if __contains_word "$prev" ${OPTS[ARG]}; then + case $prev in + --file|-f) + comps=$(compgen -f -- "$cur") + compopt -o filenames + ;; + --kver|-k) + comps=$(cd /lib/modules; echo [0-9]*) + ;; + *) + return 0 + ;; + esac + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 + fi + + if [[ $cur = -* ]]; then + COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) + return 0 + fi + + comps=$(compgen -f -- "$cur") + compopt -o filenames + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 +} + +complete -F _lsinitrd lsinitrd