[systemd-devel] [PATCH 11/11] Make redirections work with the bash command completions

Dr. Werner Fink werner at suse.de
Mon Jun 16 05:59:34 PDT 2014


On Fri, Jun 13, 2014 at 07:09:50PM +0300, Ran Benita wrote:
> From a cursory look, the bash-completion package deals with this issue
> in a more systematic way. See _init_completion() in
> /usr/share/bash-completion/bash_completion. Maybe it's worthwhile to
> (conditionally?) use that if possible.

Hmmm ... I'd like not to loose the possibility to use completions for
e.g. systemctl without having bash-completion installed.  This because
there *are* users out here which do *not* use nor install bash-completion
package (or deinstall bash-completion).  And I do not speak for my person
as I use bash-completion but as a package maintainer.  IMHO my patch is
correct and allow to redirect the output of e.g.  systemctl status.

Werner

> On Fri, Jun 13, 2014 at 04:41:10PM +0200, Werner Fink wrote:
> > ---
> >  shell-completion/bash/hostnamectl         |    6 +++++-
> >  shell-completion/bash/journalctl          |    6 +++++-
> >  shell-completion/bash/kernel-install      |   13 ++++++++++++-
> >  shell-completion/bash/localectl           |    6 +++++-
> >  shell-completion/bash/loginctl            |    6 +++++-
> >  shell-completion/bash/systemctl           |    6 +++++-
> >  shell-completion/bash/systemd-analyze     |    6 +++++-
> >  shell-completion/bash/systemd-coredumpctl |    6 +++++-
> >  shell-completion/bash/systemd-run         |   14 +++++++++++++-
> >  shell-completion/bash/timedatectl         |    6 +++++-
> >  shell-completion/bash/udevadm             |    6 +++++-
> >  11 files changed, 70 insertions(+), 11 deletions(-)
> > 
> > diff --git shell-completion/bash/hostnamectl shell-completion/bash/hostnamectl
> > index 9c75da9..2e947f6 100644
> > --- shell-completion/bash/hostnamectl
> > +++ shell-completion/bash/hostnamectl
> > @@ -30,6 +30,10 @@ _hostnamectl() {
> >          local OPTS='-h --help --version --transient --static --pretty
> >                      --no-ask-password -H --host'
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          if [[ $cur = -* ]]; then
> >                  COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
> >                  return 0
> > @@ -58,4 +62,4 @@ _hostnamectl() {
> >          return 0
> >  }
> >  
> > -complete -F _hostnamectl hostnamectl
> > +complete -o default -o bashdefault -F _hostnamectl hostnamectl
> > diff --git shell-completion/bash/journalctl shell-completion/bash/journalctl
> > index e4b2f4a..50f83e0 100644
> > --- shell-completion/bash/journalctl
> > +++ shell-completion/bash/journalctl
> > @@ -49,6 +49,10 @@ _journalctl() {
> >                                --verify-key'
> >          )
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
> >                  case $prev in
> >                          --boot|--this-boot|-b)
> > @@ -111,4 +115,4 @@ _journalctl() {
> >          fi
> >  }
> >  
> > -complete -F _journalctl journalctl
> > +complete -o default -o bashdefault -F _journalctl journalctl
> > diff --git shell-completion/bash/kernel-install shell-completion/bash/kernel-install
> > index 7cd2494..33cf27c 100644
> > --- shell-completion/bash/kernel-install
> > +++ shell-completion/bash/kernel-install
> > @@ -18,11 +18,22 @@
> >  # You should have received a copy of the GNU Lesser General Public License
> >  # along with systemd; If not, see <http://www.gnu.org/licenses/>.
> >  
> > +__contains_word () {
> > +        local w word=$1; shift
> > +        for w in "$@"; do
> > +                [[ $w = "$word" ]] && return
> > +        done
> > +}
> > +
> >  _kernel_install() {
> >          local comps
> >          local MACHINE_ID
> >          local cur=${COMP_WORDS[COMP_CWORD]}
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          case $COMP_CWORD in
> >              1)
> >                  comps="add remove"
> > @@ -47,4 +58,4 @@ _kernel_install() {
> >          return 0
> >  }
> >  
> > -complete -F _kernel_install kernel-install
> > +complete -o default -o bashdefault -F _kernel_install kernel-install
> > diff --git shell-completion/bash/localectl shell-completion/bash/localectl
> > index c9e22af..3150f87 100644
> > --- shell-completion/bash/localectl
> > +++ shell-completion/bash/localectl
> > @@ -36,6 +36,10 @@ _localectl() {
> >          local OPTS='-h --help --version --no-convert --no-pager --no-ask-password
> >                      -H --host'
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          if __contains_word "$prev" $OPTS; then
> >                  case $prev in
> >                          --host|-H)
> > @@ -89,4 +93,4 @@ _localectl() {
> >          return 0
> >  }
> >  
> > -complete -F _localectl localectl
> > +complete -o default -o bashdefault -F _localectl localectl
> > diff --git shell-completion/bash/loginctl shell-completion/bash/loginctl
> > index e7adb93..9b137b4 100644
> > --- shell-completion/bash/loginctl
> > +++ shell-completion/bash/loginctl
> > @@ -37,6 +37,10 @@ _loginctl () {
> >                        [ARG]='--host -H --kill-who --property -p --signal -s'
> >          )
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          if __contains_word "$prev" ${OPTS[ARG]}; then
> >                  case $prev in
> >                          --signal|-s)
> > @@ -106,4 +110,4 @@ _loginctl () {
> >          return 0
> >  }
> >  
> > -complete -F _loginctl loginctl
> > +complete -o default -o bashdefault -F _loginctl loginctl
> > diff --git shell-completion/bash/systemctl shell-completion/bash/systemctl
> > index e1c8420..fa54e70 100644
> > --- shell-completion/bash/systemctl
> > +++ shell-completion/bash/systemctl
> > @@ -77,6 +77,10 @@ _systemctl () {
> >                        [ARG]='--host -H --kill-who --property -p --signal -s --type -t --state --root'
> >          )
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          if __contains_word "--user" ${COMP_WORDS[*]}; then
> >              mode=--user
> >          else
> > @@ -223,4 +227,4 @@ _systemctl () {
> >          return 0
> >  }
> >  
> > -complete -F _systemctl systemctl
> > +complete -o default -o bashdefault -F _systemctl systemctl
> > diff --git shell-completion/bash/systemd-analyze shell-completion/bash/systemd-analyze
> > index 5575beb..2d195aa 100644
> > --- shell-completion/bash/systemd-analyze
> > +++ shell-completion/bash/systemd-analyze
> > @@ -46,6 +46,10 @@ _systemd_analyze() {
> >                  [LOG_LEVEL]='set-log-level'
> >          )
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          _init_completion || return
> >  
> >          for ((i=0; i < COMP_CWORD; i++)); do
> > @@ -105,4 +109,4 @@ _systemd_analyze() {
> >          return 0
> >  }
> >  
> > -complete -F _systemd_analyze systemd-analyze
> > +complete -o default -o bashdefault -F _systemd_analyze systemd-analyze
> > diff --git shell-completion/bash/systemd-coredumpctl shell-completion/bash/systemd-coredumpctl
> > index 805e848..8f29651 100644
> > --- shell-completion/bash/systemd-coredumpctl
> > +++ shell-completion/bash/systemd-coredumpctl
> > @@ -44,6 +44,10 @@ _coredumpctl() {
> >              [DUMP]='dump gdb'
> >          )
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          if __contains_word "$prev" '--output -o'; then
> >                  comps=$( compgen -A file -- "$cur" )
> >                  compopt -o filenames
> > @@ -82,4 +86,4 @@ _coredumpctl() {
> >          return 0
> >  }
> >  
> > -complete -F _coredumpctl systemd-coredumpctl
> > +complete -o default -o bashdefault -F _coredumpctl systemd-coredumpctl
> > diff --git shell-completion/bash/systemd-run shell-completion/bash/systemd-run
> > index 712655c..e547e95 100644
> > --- shell-completion/bash/systemd-run
> > +++ shell-completion/bash/systemd-run
> > @@ -17,6 +17,13 @@
> >  # You should have received a copy of the GNU Lesser General Public License
> >  # along with systemd; If not, see <http://www.gnu.org/licenses/>.
> >  
> > +__contains_word () {
> > +        local w word=$1; shift
> > +        for w in "$@"; do
> > +                [[ $w = "$word" ]] && return
> > +        done
> > +}
> > +
> >  __systemctl() {
> >          local mode=$1; shift 1
> >          systemctl $mode --full --no-legend "$@"
> > @@ -38,6 +45,11 @@ _systemd_run() {
> >  
> >      local mode=--system
> >      local i
> > +
> > +    if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +    fi
> > +
> >      for (( i=1; i <= COMP_CWORD; i++ )); do
> >          if [[ ${COMP_WORDS[i]} != -* ]]; then
> >              local root_command=${COMP_WORDS[i]}
> > @@ -98,4 +110,4 @@ _systemd_run() {
> >      return 0
> >  }
> >  
> > -complete -F _systemd_run systemd-run
> > +complete -o default -o bashdefault -F _systemd_run systemd-run
> > diff --git shell-completion/bash/timedatectl shell-completion/bash/timedatectl
> > index 1a0acc6..d0ca51d 100644
> > --- shell-completion/bash/timedatectl
> > +++ shell-completion/bash/timedatectl
> > @@ -30,6 +30,10 @@ _timedatectl() {
> >          local OPTS='-h --help --version --adjust-system-clock --no-pager
> >                      --no-ask-password -H --host'
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          if __contains_word "$prev" $OPTS; then
> >                  case $prev in
> >                          --host|-H)
> > @@ -73,4 +77,4 @@ _timedatectl() {
> >          return 0
> >  }
> >  
> > -complete -F _timedatectl timedatectl
> > +complete -o default -o bashdefault -F _timedatectl timedatectl
> > diff --git shell-completion/bash/udevadm shell-completion/bash/udevadm
> > index b828b8d..e7cf29f 100644
> > --- shell-completion/bash/udevadm
> > +++ shell-completion/bash/udevadm
> > @@ -36,6 +36,10 @@ _udevadm() {
> >  
> >          local verbs=(info trigger settle control monitor hwdb test-builtin test)
> >  
> > +        if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
> > +                return 0
> > +        fi
> > +
> >          for ((i=0; i < COMP_CWORD; i++)); do
> >                  if __contains_word "${COMP_WORDS[i]}" "${verbs[@]}" &&
> >                   ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
> > @@ -94,4 +98,4 @@ _udevadm() {
> >          return 0
> >  }
> >  
> > -complete -F _udevadm udevadm
> > +complete -o default -o bashdefault -F _udevadm udevadm
> > -- 
> > 1.7.9.2
> > 
> > _______________________________________________
> > systemd-devel mailing list
> > systemd-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/systemd-devel

-- 
 Dr. Werner Fink -- Software Engineer Consultant
 SuSE LINUX Products GmbH,  Maxfeldstrasse 5,  Nuernberg,  Germany
 GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer,  HRB 21284 (AG Nuernberg)
 phone: +49-911-740-53-0,  fax: +49-911-3206727,  www.opensuse.org
------------------------------------------------------------------
  "Having a smoking section in a restaurant is like having
          a peeing section in a swimming pool." -- Edward Burr
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20140616/0b55fcf1/attachment.sig>


More information about the systemd-devel mailing list