--- shell-completion/bash/coredumpctl | 6 +++++- 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.in | 6 +++++- shell-completion/bash/systemd-analyze | 6 +++++- shell-completion/bash/systemd-run | 14 +++++++++++++- shell-completion/bash/timedatectl | 6 +++++- shell-completion/bash/udevadm | 6 +++++- 11 files changed, 70 insertions(+), 11 deletions(-) Index: systemd-221/shell-completion/bash/coredumpctl =================================================================== --- systemd-221.orig/shell-completion/bash/coredumpctl +++ systemd-221/shell-completion/bash/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 coredumpctl +complete -o default -o bashdefault -F _coredumpctl coredumpctl Index: systemd-221/shell-completion/bash/hostnamectl =================================================================== --- systemd-221.orig/shell-completion/bash/hostnamectl +++ systemd-221/shell-completion/bash/hostnamectl @@ -30,6 +30,10 @@ _hostnamectl() { local OPTS='-h --help --version --transient --static --pretty --no-ask-password -H --host --machine' + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 + fi + if [[ $cur = -* ]]; then COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) return 0 @@ -61,4 +65,4 @@ _hostnamectl() { return 0 } -complete -F _hostnamectl hostnamectl +complete -o default -o bashdefault -F _hostnamectl hostnamectl Index: systemd-221/shell-completion/bash/journalctl =================================================================== --- systemd-221.orig/shell-completion/bash/journalctl +++ systemd-221/shell-completion/bash/journalctl @@ -55,6 +55,10 @@ _journalctl() { --root --machine' ) + 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) @@ -120,4 +124,4 @@ _journalctl() { fi } -complete -F _journalctl journalctl +complete -o default -o bashdefault -F _journalctl journalctl Index: systemd-221/shell-completion/bash/kernel-install =================================================================== --- systemd-221.orig/shell-completion/bash/kernel-install +++ systemd-221/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 . +__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 Index: systemd-221/shell-completion/bash/localectl =================================================================== --- systemd-221.orig/shell-completion/bash/localectl +++ systemd-221/shell-completion/bash/localectl @@ -36,6 +36,10 @@ _localectl() { local OPTS='-h --help --version --no-convert --no-pager --no-ask-password -H --host --machine' + 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 Index: systemd-221/shell-completion/bash/loginctl =================================================================== --- systemd-221.orig/shell-completion/bash/loginctl +++ systemd-221/shell-completion/bash/loginctl @@ -38,6 +38,10 @@ _loginctl () { [ARG]='--host -H --kill-who --property -p --signal -s --machine' ) + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 + fi + if __contains_word "$prev" ${OPTS[ARG]}; then case $prev in --signal|-s) @@ -107,4 +111,4 @@ _loginctl () { return 0 } -complete -F _loginctl loginctl +complete -o default -o bashdefault -F _loginctl loginctl Index: systemd-221/shell-completion/bash/systemctl.in =================================================================== --- systemd-221.orig/shell-completion/bash/systemctl.in +++ systemd-221/shell-completion/bash/systemctl.in @@ -96,6 +96,10 @@ _systemctl () { [ARG]='--host -H --kill-who --property -p --signal -s --type -t --state --job-mode --root' ) + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 + fi + if __contains_word "--user" ${COMP_WORDS[*]}; then mode=--user else @@ -268,4 +272,4 @@ _systemctl () { return 0 } -complete -F _systemctl systemctl +complete -o default -o bashdefault -F _systemctl systemctl Index: systemd-221/shell-completion/bash/systemd-analyze =================================================================== --- systemd-221.orig/shell-completion/bash/systemd-analyze +++ systemd-221/shell-completion/bash/systemd-analyze @@ -47,6 +47,10 @@ _systemd_analyze() { [VERIFY]='verify' ) + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 + fi + _init_completion || return for ((i=0; i < COMP_CWORD; i++)); do @@ -114,4 +118,4 @@ _systemd_analyze() { return 0 } -complete -F _systemd_analyze systemd-analyze +complete -o default -o bashdefault -F _systemd_analyze systemd-analyze Index: systemd-221/shell-completion/bash/systemd-run =================================================================== --- systemd-221.orig/shell-completion/bash/systemd-run +++ systemd-221/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 . +__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 Index: systemd-221/shell-completion/bash/timedatectl =================================================================== --- systemd-221.orig/shell-completion/bash/timedatectl +++ systemd-221/shell-completion/bash/timedatectl @@ -30,6 +30,10 @@ _timedatectl() { local OPTS='-h --help --version --adjust-system-clock --no-pager --no-ask-password -H --host --machine' + 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 Index: systemd-221/shell-completion/bash/udevadm =================================================================== --- systemd-221.orig/shell-completion/bash/udevadm +++ systemd-221/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