diff options
Diffstat (limited to 'shell-completion')
-rw-r--r-- | shell-completion/systemd-bash-completion.sh | 605 | ||||
-rw-r--r-- | shell-completion/systemd-zsh-completion.zsh | 1023 |
2 files changed, 0 insertions, 1628 deletions
diff --git a/shell-completion/systemd-bash-completion.sh b/shell-completion/systemd-bash-completion.sh deleted file mode 100644 index 4c8161ff2b..0000000000 --- a/shell-completion/systemd-bash-completion.sh +++ /dev/null @@ -1,605 +0,0 @@ -# This file is part of systemd. -# -# Copyright 2010 Ran Benita -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# systemd 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 Lesser General Public License -# along with systemd; If not, see <http://www.gnu.org/licenses/>. - -__systemctl() { - systemctl --full --no-legend "$@" -} - -__contains_word () { - local word=$1; shift - for w in $*; do [[ $w = $word ]] && return 0; done - return 1 -} - -__filter_units_by_property () { - local property=$1 value=$2 ; shift 2 - local units=("$@") - local props - IFS=$'\n' read -rd '' -a props < \ - <(__systemctl show --property "$property" -- "${units[@]}") - for ((i=0; $i < ${#units[*]}; i++)); do - if [[ "${props[i]}" = "$property=$value" ]]; then - printf "%s\n" "${units[i]}" - fi - done -} - -__get_all_units () { __systemctl list-units --all \ - | { while read -r a b; do printf "%s\n" "$a"; done; }; } -__get_active_units () { __systemctl list-units \ - | { while read -r a b; do printf "%s\n" "$a"; done; }; } -__get_inactive_units () { __systemctl list-units --all \ - | { while read -r a b c d; do [[ $c == "inactive" ]] && printf "%s\n" "$a"; done; }; } -__get_failed_units () { __systemctl list-units \ - | { while read -r a b c d; do [[ $c == "failed" ]] && printf "%s\n" "$a"; done; }; } -__get_enabled_units () { __systemctl list-unit-files \ - | { while read -r a b c ; do [[ $b == "enabled" ]] && printf "%s\n" "$a"; done; }; } -__get_disabled_units () { __systemctl list-unit-files \ - | { while read -r a b c ; do [[ $b == "disabled" ]] && printf "%s\n" "$a"; done; }; } -__get_masked_units () { __systemctl list-unit-files \ - | { while read -r a b c ; do [[ $b == "masked" ]] && printf "%s\n" "$a"; done; }; } - -_systemctl () { - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local i verb comps - - local -A OPTS=( - [STANDALONE]='--all -a --defaults --fail --ignore-dependencies --failed --force -f --full --global - --help -h --no-ask-password --no-block --no-legend --no-pager --no-reload --no-wall - --order --require --quiet -q --privileged -P --system --user --version --runtime' - [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --root' - ) - - if __contains_word "$prev" ${OPTS[ARG]}; then - case $prev in - --signal|-s) - comps=$(compgen -A signal) - ;; - --type|-t) - comps='automount device mount path service snapshot socket swap target timer' - ;; - --kill-who) - comps='all control main' - ;; - --kill-mode) - comps='control-group process' - ;; - --root) - comps=$(compgen -A directory -- "$cur" ) - compopt -o filenames - ;; - --host|-H) - comps=$(compgen -A hostname) - ;; - --property|-p) - comps='' - ;; - esac - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 - fi - - - if [[ "$cur" = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - fi - - local -A VERBS=( - [ALL_UNITS]='is-active is-enabled status show mask preset' - [ENABLED_UNITS]='disable reenable' - [DISABLED_UNITS]='enable' - [FAILED_UNITS]='reset-failed' - [STARTABLE_UNITS]='start' - [STOPPABLE_UNITS]='stop condstop kill try-restart condrestart' - [ISOLATABLE_UNITS]='isolate' - [RELOADABLE_UNITS]='reload condreload reload-or-try-restart force-reload' - [RESTARTABLE_UNITS]='restart reload-or-restart' - [MASKED_UNITS]='unmask' - [JOBS]='cancel' - [SNAPSHOTS]='delete' - [ENVS]='set-environment unset-environment' - [STANDALONE]='daemon-reexec daemon-reload default dot dump - emergency exit halt kexec list-jobs list-units - list-unit-files poweroff reboot rescue show-environment' - [NAME]='snapshot load' - [FILE]='link' - ) - - for ((i=0; $i <= $COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && - ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb ]]; then - comps="${VERBS[*]}" - - elif __contains_word "$verb" ${VERBS[ALL_UNITS]}; then - comps=$( __get_all_units ) - - elif __contains_word "$verb" ${VERBS[ENABLED_UNITS]}; then - comps=$( __get_enabled_units ) - - elif __contains_word "$verb" ${VERBS[DISABLED_UNITS]}; then - comps=$( __get_disabled_units ) - - elif __contains_word "$verb" ${VERBS[STARTABLE_UNITS]}; then - comps=$( __filter_units_by_property CanStart yes \ - $( __get_inactive_units \ - | while read -r line; do \ - [[ "$line" =~ \.(device|snapshot)$ ]] || printf "%s\n" "$line"; \ - done )) - - elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then - comps=$( __filter_units_by_property CanStart yes \ - $( __get_all_units \ - | while read -r line; do \ - [[ "$line" =~ \.(device|snapshot|socket|timer)$ ]] || printf "%s\n" "$line"; \ - done )) - - elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then - comps=$( __filter_units_by_property CanStop yes \ - $( __get_active_units ) ) - - elif __contains_word "$verb" ${VERBS[RELOADABLE_UNITS]}; then - comps=$( __filter_units_by_property CanReload yes \ - $( __get_active_units ) ) - - elif __contains_word "$verb" ${VERBS[ISOLATABLE_UNITS]}; then - comps=$( __filter_units_by_property AllowIsolate yes \ - $( __get_all_units ) ) - - elif __contains_word "$verb" ${VERBS[FAILED_UNITS]}; then - comps=$( __get_failed_units ) - - elif __contains_word "$verb" ${VERBS[MASKED_UNITS]}; then - comps=$( __get_masked_units ) - - elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[NAME]}; then - comps='' - - elif __contains_word "$verb" ${VERBS[JOBS]}; then - comps=$( __systemctl list-jobs | { while read -r a b; do printf "%s\n" "$a"; done; } ) - - elif __contains_word "$verb" ${VERBS[SNAPSHOTS]}; then - comps=$( __systemctl list-units --type snapshot --full --all \ - | { while read -r a b; do printf "%s\n" "$a"; done; } ) - - elif __contains_word "$verb" ${VERBS[ENVS]}; then - comps=$( __systemctl show-environment \ - | while read -r line; do printf "%s\n" "${line%%=*}=";done ) - compopt -o nospace - - elif __contains_word "$verb" ${VERBS[FILE]}; then - comps=$( compgen -A file -- "$cur" ) - compopt -o filenames - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 -} -complete -F _systemctl systemctl - -__get_all_sessions () { loginctl list-sessions | { while read -r a b; do printf "%s\n" "$a"; done; } ; } -__get_all_users () { loginctl list-users | { while read -r a b; do printf "%s\n" "$b"; done; } ; } -__get_all_seats () { loginctl list-seats | { while read -r a b; do printf "%s\n" "$a"; done; } ; } - -_loginctl () { - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local i verb comps - - local -A OPTS=( - [STANDALONE]='--all -a --help -h --no-pager --privileged -P --version' - [ARG]='--host -H --kill-who --property -p --signal -s' - ) - - if __contains_word "$prev" ${OPTS[ARG]}; then - case $prev in - --signal|-s) - comps=$(compgen -A signal) - ;; - --kill-who) - comps='all leader' - ;; - --host|-H) - comps=$(compgen -A hostname) - ;; - --property|-p) - comps='' - ;; - esac - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 - fi - - - if [[ "$cur" = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - fi - - local -A VERBS=( - [SESSIONS]='session-status show-session activate lock-session unlock-session terminate-session kill-session' - [USERS]='user-status show-user enable-linger disable-linger terminate-user kill-user' - [SEATS]='seat-status show-seat terminate-seat' - [STANDALONE]='list-sessions list-users list-seats flush-devices' - [ATTACH]='attach' - ) - - for ((i=0; $i <= $COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && - ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb ]]; then - comps="${VERBS[*]}" - - elif __contains_word "$verb" ${VERBS[SESSIONS]}; then - comps=$( __get_all_sessions ) - - elif __contains_word "$verb" ${VERBS[USERS]}; then - comps=$( __get_all_users ) - - elif __contains_word "$verb" ${VERBS[SEATS]}; then - comps=$( __get_all_seats ) - - elif __contains_word "$verb" ${VERBS[STANDALONE]}; then - comps='' - - elif __contains_word "$verb" ${VERBS[ATTACH]}; then - if [[ $prev = $verb ]]; then - comps=$( __get_all_seats ) - else - comps=$(compgen -A file -- "$cur" ) - compopt -o filenames - fi - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 -} -complete -F _loginctl loginctl - -__journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC} - ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID} COREDUMP_EXE - _{P,U,G}ID _COMM _EXE _CMDLINE - _AUDIT_{SESSION,LOGINUID} - _SYSTEMD_{CGROUP,SESSION,UNIT,OWNER_UID} - _SELINUX_CONTEXT _SOURCE_REALTIME_TIMESTAMP - _{BOOT,MACHINE}_ID _HOSTNAME _TRANSPORT - _KERNEL_{DEVICE,SUBSYSTEM} - _UDEV_{SYSNAME,DEVNODE,DEVLINK} - __CURSOR __{REALTIME,MONOTONIC}_TIMESTAMP) - -_journalctl() { - local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local -A OPTS=( - [STANDALONE]='-a --all -b --this-boot --disk-usage -f --follow --header - -h --help -l --local --new-id128 -m --merge --no-pager - --no-tail -q --quiet --setup-keys --this-boot --verify - --version' - [ARG]='-D --directory -F --field -o --output -u --unit' - [ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until - --verify-key' - ) - - if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then - case $prev in - --directory|-D) - comps=$(compgen -d -- "$cur") - compopt -o filenames - ;; - --output|-o) - comps='short short-monotonic verbose export json cat' - ;; - --field|-F) - comps=${__journal_fields[*]} - ;; - --unit|-u) - comps=$(journalctl -F '_SYSTEMD_UNIT') - ;; - *) - return 0 - ;; - esac - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 - fi - - if [[ $cur = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - elif [[ $cur = *=* ]]; then - mapfile -t field_vals < <(journalctl -F "${prev%=}" 2>/dev/null) - COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur#=}") ) - elif [[ $prev = '=' ]]; then - mapfile -t field_vals < <(journalctl -F "${COMP_WORDS[COMP_CWORD-2]}" 2>/dev/null) - COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "$cur") ) - else - compopt -o nospace - COMPREPLY=( $(compgen -W '${__journal_fields[*]}' -S= -- "$cur") ) - fi -} -complete -F _journalctl journalctl - -_coredumpctl() { - local i verb comps - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local OPTS='-h --help --version --no-pager --no-legend -o --output -F --field' - - local -A VERBS=( - [LIST]='list' - [DUMP]='dump gdb' - ) - - if __contains_word "$prev" '--output -o'; then - comps=$( compgen -A file -- "$cur" ) - compopt -o filenames - elif __contains_word "$prev" '--FIELD -F'; then - comps=$( compgen -W '${__journal_fields[*]}' -- "$cur" ) - elif [[ $cur = -* ]]; then - comps=${OPTS} - elif __contains_word "$prev" ${VERBS[*]} && - ! __contains_word ${COMP_WORDS[COMP_CWORD-2]} '--output -o -F --field'; then - compopt -o nospace - COMPREPLY=( $(compgen -W '${__journal_fields[*]}' -S= -- "$cur") ) - return 0 - elif [[ $cur = *=* ]]; then - mapfile -t field_vals < <(systemd-coredumpctl -F "${prev%=}" 2>/dev/null) - COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur#=}") ) - return 0 - elif [[ $prev = '=' ]]; then - mapfile -t field_vals < <(systemd-coredumpctl -F "${COMP_WORDS[COMP_CWORD-2]}" 2>/dev/null) - comps=${field_vals[*]} - else - for ((i=0; i <= COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb ]]; then - comps=${VERBS[*]} - elif __contains_word "$verb" ${VERBS[LIST]} ${VERBS[DUMP]}; then - comps='' - fi - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 -} -complete -F _coredumpctl systemd-coredumpctl - -_timedatectl() { - local i verb comps - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local OPTS='-h --help --version --adjust-system-clock --no-pager - --no-ask-password -H --host' - - if __contains_word "$prev" $OPTS; then - case $prev in - --host|-H) - comps='' - ;; - esac - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 - fi - - if [[ $cur = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - fi - - local -A VERBS=( - [BOOLEAN]='set-local-rtc set-ntp' - [STANDALONE]='status set-time list-timezones' - [TIMEZONES]='set-timezone' - [TIME]='set-time' - ) - - for ((i=0; i <= COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb ]]; then - comps=${VERBS[*]} - elif __contains_word "$verb" ${VERBS[BOOLEAN]}; then - comps='true false' - elif __contains_word "$verb" ${VERBS[TIMEZONES]}; then - comps=$(command timedatectl list-timezones) - elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[TIME]}; then - comps='' - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 -} -complete -F _timedatectl timedatectl - -_localectl() { - local i verb comps - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local OPTS='-h --help --version --no-convert --no-pager --no-ask-password - -H --host' - - if __contains_word "$prev" $OPTS; then - case $prev in - --host|-H) - comps='' - ;; - esac - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 - fi - - if [[ $cur = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - fi - - local -A VERBS=( - [STANDALONE]='status list-locales list-keymaps' - [LOCALES]='set-locale' - [KEYMAPS]='set-keymap' - [X11]='set-x11-keymap' - ) - - for ((i=0; i <= COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb ]]; then - comps=${VERBS[*]} - elif __contains_word "$verb" ${VERBS[LOCALES]}; then - comps=$(command localectl list-locales) - elif __contains_word "$verb" ${VERBS[KEYMAPS]}; then - comps=$(command localectl list-keymaps) - elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[X11]}; then - comps='' - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 -} -complete -F _localectl localectl - -_hostnamectl() { - local i verb comps - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local OPTS='-h --help --version --transient --static --pretty - --no-ask-password -H --host' - - if [[ $cur = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - fi - - local -A VERBS=( - [STANDALONE]='status' - [ICONS]='set-icon-name' - [NAME]='set-hostname' - ) - - for ((i=0; i <= COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb ]]; then - comps=${VERBS[*]} - elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then - comps='' - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 -} -complete -F _hostnamectl hostnamectl - -__get_all_sysdevs() { - local -a devs=(/sys/bus/*/devices/*/ /sys/class/*/*/) - printf '%s\n' "${devs[@]%/}" -} - -_udevadm() { - local i verb comps - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local OPTS='-h --help --version --debug' - - local -A VERBS=( - [INFO]='info' - [TRIGGER]='trigger' - [SETTLE]='settle' - [CONTROL]='control' - [MONITOR]='monitor' - [HWDB]='hwdb' - [TESTBUILTIN]='test-builtin' - [TEST]='test' - ) - - for ((i=0; $i <= $COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && - ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb && $cur = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - fi - - if [[ -z $verb ]]; then - comps=${VERBS[*]} - - elif __contains_word "$verb" ${VERBS[INFO]}; then - if [[ $cur = -* ]]; then - comps='--help --query= --path= --name= --root --attribute-walk --export-db --cleanup-db' - else - comps=$( __get_all_sysdevs ) - fi - - elif __contains_word "$verb" ${VERBS[TRIGGER]}; then - comps='--help --verbose --dry-run --type= --action= --subsystem-match= - --subsystem-nomatch= --attr-match= --attr-nomatch= --property-match= - --tag-match= --sysname-match= --parent-match=' - - elif __contains_word "$verb" ${VERBS[SETTLE]}; then - comps='--help --timeout= --seq-start= --seq-end= --exit-if-exists= --quiet' - - elif __contains_word "$verb" ${VERBS[CONTROL]}; then - comps='--help --exit --log-priority= --stop-exec-queue --start-exec-queue - --reload --property= --children-max= --timeout=' - - elif __contains_word "$verb" ${VERBS[MONITOR]}; then - comps='--help --kernel --udev --property --subsystem-match= --tag-match=' - - elif __contains_word "$verb" ${VERBS[HWDB]}; then - comps='--help --update --test=' - - elif __contains_word "$verb" ${VERBS[TEST]}; then - if [[ $cur = -* ]]; then - comps='--help --action=' - else - comps=$( __get_all_sysdevs ) - fi - - elif __contains_word "$verb" ${VERBS[TESTBUILTIN]}; then - comps='blkid btrfs firmware hwdb input_id kmod path_id usb_id uaccess' - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) - return 0 -} -complete -F _udevadm udevadm diff --git a/shell-completion/systemd-zsh-completion.zsh b/shell-completion/systemd-zsh-completion.zsh deleted file mode 100644 index 59755e62d9..0000000000 --- a/shell-completion/systemd-zsh-completion.zsh +++ /dev/null @@ -1,1023 +0,0 @@ -#compdef systemctl loginctl journalctl hostnamectl localectl timedatectl systemd-coredumpctl udevadm systemd-analyze systemd-cat systemd-ask-password systemd-cgls systemd-cgtop systemd-delta systemd-detect-virt systemd-inhibit systemd-machine-id-setup systemd-notify systemd-nspawn systemd-tmpfiles systemd-tty-ask-password-agent - -_ctls() -{ - local curcontext="$curcontext" state lstate line - case "$service" in - systemctl) - # -s for aggregated options like -aP - _arguments -s \ - {-h,--help}'[Show help]' \ - '--version[Show package version]' \ - {-t,--type=}'[List only units of a particular type]:unit type:(automount device mount path service snapshot socket swap target timer)' \ - \*{-p,--property=}'[Show only properties by specific name]:unit property' \ - {-a,--all}'[Show all units/properties, including dead/empty ones]' \ - '--failed[Show only failed units]' \ - "--full[Don't ellipsize unit names on output]" \ - '--fail[When queueing a new job, fail if conflicting jobs are pending]' \ - '--ignore-dependencies[When queueing a new job, ignore all its dependencies]' \ - '--kill-who=[Who to send signal to]:killwho:(main control all)' \ - {-s,--signal=}'[Which signal to send]:signal:_signals' \ - {-H,--host=}'[Show information for remote host]:userathost:_hosts_or_user_at_host' \ - {-P,--privileged}'[Acquire privileges before execution]' \ - {-q,--quiet}'[Suppress output]' \ - '--no-block[Do not wait until operation finished]' \ - "--no-wall[Don't send wall message before halt/power-off/reboot]" \ - "--no-reload[When enabling/disabling unit files, don't reload daemon configuration]" \ - '--no-legend[Do not print a legend, i.e. the column headers and the footer with hints]' \ - '--no-pager[Do not pipe output into a pager]' \ - '--no-ask-password[Do not ask for system passwords]' \ - '--order[When generating graph for dot, show only order]' \ - '--require[When generating graph for dot, show only requirement]' \ - '--system[Connect to system manager]' \ - '--user[Connect to user service manager]' \ - '--global[Enable/disable unit files globally]' \ - {-f,--force}'[When enabling unit files, override existing symlinks. When shutting down, execute action immediately]' \ - '--root=[Enable unit files in the specified root directory]:directory:_directories' \ - '--runtime[Enable unit files only temporarily until next reboot]' \ - {-n,--lines=}'[Journal entries to show]:number of entries' \ - {-o,--output=}'[Change journal output mode]:modes:_outputmodes' \ - '*::systemctl command:_systemctl_command' - ;; - loginctl) - _arguments -s \ - {-h,--help}'[Show help]' \ - '--version[Show package version]' \ - \*{-p,--property=}'[Show only properties by this name]:unit property' \ - {-a,--all}'[Show all properties, including empty ones]' \ - '--kill-who=[Who to send signal to]:killwho:(main control all)' \ - {-s,--signal=}'[Which signal to send]:signal:_signals' \ - '--no-ask-password[Do not ask for system passwords]' \ - {-H,--host=}'[Show information for remote host]:userathost:_hosts_or_user_at_host' \ - {-P,--privileged}'[Acquire privileges before execution]' \ - '--no-pager[Do not pipe output into a pager]' \ - '*::loginctl command:_loginctl_command' - ;; - - hostnamectl) - _arguments -s \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '--transient[Only set transient hostname]' \ - '--static[Only set static hostname]' \ - '--pretty[Only set pretty hostname]' \ - '--no-ask-password[Do not prompt for password]' \ - {-H,--host=}'[Operate on remote host]:userathost:_hosts_or_user_at_host' \ - '*::hostnamectl commands:_hostnamectl_command' - ;; - journalctl) - _arguments -s \ - '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \ - '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \ - {-c,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \ - {-b,--this-boot}'[Show data only from current boot]' \ - {-u,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \ - {-p,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \ - {-f,--follow}'[Follow journal]' \ - {-n,--lines=}'[Number of journal entries to show]:integer' \ - '--no-tail[Show all lines, even in follow mode]' \ - {-o,--output=}'[Change journal output mode]:output modes:_outputmodes' \ - {-a,--all}'[Show all fields, including long and unprintable]' \ - {-q,--quiet}"[Don't show privilege warning]" \ - '--no-pager[Do not pipe output into a pager]' \ - {-m,--merge}'[Show entries from all available journals]' \ - {-D,--directory=}'[Show journal files from directory]:directories:_directories' \ - '--interval=[Time interval for changing the FSS sealing key]:time interval' \ - '--verify-key=[Specify FSS verification key]:FSS key' \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '--new-id128[Generate a new 128 Bit ID]' \ - '--header[Show journal header information]' \ - '--disk-usage[Show total disk usage]' \ - {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \ - '--setup-keys[Generate new FSS key pair]' \ - '--verify[Verify journal file consistency]' - ;; - localectl) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - "--no-convert[Don't convert keyboard mappings]" \ - '--no-pager[Do not pipe output into a pager]' \ - '--no-ask-password[Do not prompt for password]' \ - {-H,--host=}'[Operate on remote host]:userathost:_hosts_or_user_at_host' \ - '*::localectl commands:_localectl_command' - ;; - systemd-coredumpctl) - _arguments \ - {-o,--output=}'[Write output to FILE]:output file:_files' \ - '--no-pager[Do not pipe output into a pager]' \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '*::systemd-coredumpctl commands:_systemd-coredumpctl_command' - - ;; - timedatectl) - _arguments -s \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '--adjust-system-clock[Adjust system clock when changing local RTC mode]' \ - '--no-pager[Do not pipe output into a pager]' \ - '--no-ask-password[Do not prompt for password]' \ - {-H,--host=}'[Operate on remote host]:userathost:_hosts_or_user_at_host' \ - '*::timedatectl commands:_timedatectl_command' - ;; - udevadm) - _arguments \ - '--debug[Print debug messages to stderr]' \ - '--version[Print version number]' \ - '--help[Print help text]' \ - '*::udevadm commands:_udevadm_command' - ;; - systemd-analyze) - _arguments \ - {-h,--help}'[Show help text.]' \ - '--user[Shows performance data of user sessions instead of the system manager.]' \ - '*::systemd-analyze commands:_systemd_analyze_command' - ;; - systemd-ask-password) - _arguments \ - {-h,--help}'[Show this help]' \ - '--icon=[Icon name]' \ - '--timeout=[Timeout in sec]' \ - '--no-tty[Ask question via agent even on TTY]' \ - '--accept-cached[Accept cached passwords]' \ - '--multiple[List multiple passwords if available]' - ;; - systemd-cat) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version.]' \ - {-t,--identifier=}'[Set syslog identifier.]' \ - {-p,--priority=}'[Set priority value.]:value:({0..7})' \ - '--level-prefix=[Control whether level prefix shall be parsed.]:boolean:(1 0)' \ - ':Message' - ;; - systemd-cgls) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '--no-pager[Do not pipe output into a pager]' \ - {-a,--all}'[Show all groups, including empty]' \ - '-k[Include kernel threads in output]' \ - ':cgroups:(cpuset cpu cpuacct memory devices freezer net_cls blkio)' - ;; - systemd-cgtop) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Print version and exit]' \ - '(-c -m -i -t)-p[Order by path]' \ - '(-c -p -m -i)-t[Order by number of tasks]' \ - '(-m -p -i -t)-c[Order by CPU load]' \ - '(-c -p -i -t)-m[Order by memory load]' \ - '(-c -m -p -t)-i[Order by IO load]' \ - {-d,--delay=}'[Specify delay]' \ - {-n,--iterations=}'[Run for N iterations before exiting]' \ - {-b,--batch}'[Run in batch mode, accepting no input]' \ - '--depth=[Maximum traversal depth]' - ;; - systemd-delta) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '--no-pager[Do not pipe output into a pager]' \ - '--diff=[Show a diff when overridden files differ]:boolean:(1 0)' \ - {-t,--type=}'[Only display a selected set of override types]:types:(masked equivalent redirected overridden unchanged)' \ - ':SUFFIX:(tmpfiles.d sysctl.d systemd/system)' - ;; - systemd-detect-virt) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - {-c,--container}'[Only detect whether we are run in a container]' \ - {-v,--vm}'[Only detect whether we are run in a VM]' \ - {-q,--quiet}"[Don't output anything, just set return value]" - ;; - systemd-inhibit) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '--what=[Operations to inhibit]:options:(shutdown sleep idle handle-power-key handle-suspend-key handle-hibernate-key handle-lid-switch)' \ - '--who=[A descriptive string who is inhibiting]' \ - '--why=[A descriptive string why is being inhibited]' \ - '--mode=[One of block or delay]' \ - '--list[List active inhibitors]' \ - '*:commands:_systemd_inhibit_command' - ;; - systemd-machine-id-setup) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' - ;; - systemd-notify) - _arguments \ - {-h,--help}'[Show this help]' \ - '--version[Show package version]' \ - '--ready[Inform the init system about service start-up completion.]' \ - '--pid=[Inform the init system about the main PID of the daemon]' \ - '--status=[Send a free-form status string for the daemon to the init systemd]' \ - '--booted[Returns 0 if the system was booted up with systemd]' \ - '--readahead=[Controls disk read-ahead operations]:arguments:(cancel done noreply)' - ;; - systemd-nspawn) - _arguments \ - {-h,--help}'[Show this help]' \ - {--directory=,-D}'[Directory to use as file system root for the namespace container. If omitted the current directory will be used.]:directories:_directories' \ - {--boot,-b}'[Automatically search for an init binary and invoke it instead of a shell or a user supplied program.]' \ - {--user=,-u}'[Run the command under specified user, create home directory and cd into it.]' \ - '--uuid=[Set the specified uuid for the container.]' \ - {--controllers=,-C}'[Makes the container appear in other hierarchies than the name=systemd:/ one. Takes a comma-separated list of controllers.]' \ - '--private-network[Turn off networking in the container. This makes all network interfaces unavailable in the container, with the exception of the loopback device.]' \ - '--read-only[Mount the root file system read only for the container.]' \ - '--capability=[List one or more additional capabilities to grant the container.]:capabilities:_systemd-nspawn' \ - "--link-journal=[Control whether the container's journal shall be made visible to the host system.]:options:(no, host, guest, auto)" \ - '-j[Equivalent to --link-journal=guest.]' - ;; - systemd-tmpfiles) - _arguments \ - '--create[Create, set ownership/permissions based on the config files.]' \ - '--clean[Clean up all files and directories with an age parameter configured.]' \ - '--remove[All files and directories marked with r, R in the configuration files are removed.]' \ - '--prefix=[Only apply rules that apply to paths with the specified prefix.]' \ - '--help[Prints a short help text and exits.]' \ - '*::files:_files' - ;; - systemd-tty-ask-password-agent) - _arguments \ - {-h,--help}'[Prints a short help text and exits.]' \ - '--version[Prints a short version string and exits.]' \ - '--list[Lists all currently pending system password requests.]' \ - '--query[Process all currently pending system password requests by querying the user on the calling TTY.]' \ - '--watch[Continuously process password requests.]' \ - '--wall[Forward password requests to wall(1).]' \ - '--plymouth[Ask question with plymouth(8).]' \ - '--console[Ask question on /dev/console.]' - ;; - *) _message 'eh?' ;; - esac -} - -_systemd-nspawn(){ - local -a _caps - _caps=( CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH - CAP_FOWNER CAP_FSETID CAP_IPC_OWNER CAP_KILL CAP_LEASE CAP_LINUX_IMMUTABLE - CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SETGID CAP_SETFCAP CAP_SETPCAP - CAP_SETUID CAP_SYS_ADMIN CAP_SYS_CHROOT CAP_SYS_NICE CAP_SYS_PTRACE CAP_SYS_TTY_CONFIG - CAP_SYS_RESOURCE CAP_SYS_BOOT ) - _values -s , 'capabilities' "$_caps[@]" -} - -_systemd_inhibit_command(){ - if (( CURRENT == 1 )); then - compset -q - _normal - else - local n=${words[(b:2:i)[^-]*]} - if (( n <= CURRENT )); then - compset -n $n - _alternative \ - 'files:file:_files' \ - 'commands:command:_normal' && return 0 - fi - _default - fi - -} - -_systemd_analyze_command(){ - local -a _systemd_analyze_cmds - _systemd_analyze_cmds=( - 'time:Print the time taken to start' - 'blame:prints a list of all running units, ordered by the time they took to initialize' - 'plot:prints an SVG graphic detailing which system services have been started at what time' - ) - - if (( CURRENT == 1 )); then - _describe "options" _systemd_analyze_cmds - else - _message "no more options" - fi -} - -_hosts_or_user_at_host() -{ - _alternative \ - 'users-hosts:: _user_at_host' \ - 'hosts:: _hosts' -} - -_outputmodes() { - local -a _output_opts - _output_opts=(short short-monotonic verbose export json json-pretty json-see cat) - _describe -t output 'output mode' _output_opts || compadd "$@" -} - - -(( $+functions[_systemctl_command] )) || _systemctl_command() -{ - local -a _systemctl_cmds - _systemctl_cmds=( - "list-units:List units" - "start:Start (activate) one or more units" - "stop:Stop (deactivate) one or more units" - "reload:Reload one or more units" - "restart:Start or restart one or more units" - "condrestart:Restart one or more units if active" - "try-restart:Restart one or more units if active" - "reload-or-restart:Reload one or more units is possible, otherwise start or restart" - "force-reload:Reload one or more units is possible, otherwise restart if active" - "reload-or-try-restart:Reload one or more units is possible, otherwise restart if active" - "isolate:Start one unit and stop all others" - "kill:Send signal to processes of a unit" - "is-active:Check whether units are active" - "status:Show runtime status of one or more units" - "show:Show properties of one or more units/jobs or the manager" - "reset-failed:Reset failed state for all, one, or more units" - "load:Load one or more units" - "list-unit-files:List installed unit files" - "enable:Enable one or more unit files" - "disable:Disable one or more unit files" - "reenable:Reenable one or more unit files" - "preset:Enable/disable one or more unit files based on preset configuration" - "mask:Mask one or more units" - "unmask:Unmask one or more units" - "link:Link one or more units files into the search path" - "is-enabled:Check whether unit files are enabled" - "list-jobs:List jobs" - "cancel:Cancel all, one, or more jobs" - "dump:Dump server status" - "dot:Dump dependency graph for dot(1)" - "snapshot:Create a snapshot" - "delete:Remove one or more snapshots" - "show-environment:Dump environment" - "set-environment:Set one or more environment variables" - "unset-environment:Unset one or more environment variables" - "daemon-reload:Reload systemd manager configuration" - "daemon-reexec:Reexecute systemd manager" - "default:Enter system default mode" - "rescue:Enter system rescue mode" - "emergency:Enter system emergency mode" - "halt:Shut down and halt the system" - "suspend:Suspend the system" - "poweroff:Shut down and power-off the system" - "reboot:Shut down and reboot the system" - "kexec:Shut down and reboot the system with kexec" - "exit:Ask for user instance termination" - ) - - if (( CURRENT == 1 )); then - _describe -t commands 'systemctl command' _systemctl_cmds || compadd "$@" - else - local curcontext="$curcontext" - - cmd="${${_systemctl_cmds[(r)$words[1]:*]%%:*}}" - # Deal with any aliases - case $cmd in - condrestart) cmd="try-restart";; - force-reload) cmd="reload-or-try-restart";; - esac - - if (( $#cmd )); then - curcontext="${curcontext%:*:*}:systemctl-${cmd}:" - - local update_policy - zstyle -s ":completion:${curcontext}:" cache-policy update_policy - if [[ -z "$update_policy" ]]; then - zstyle ":completion:${curcontext}:" cache-policy _systemctl_caching_policy - fi - - _call_function ret _systemctl_$cmd || _message 'no more arguments' - else - _message "unknown systemctl command: $words[1]" - fi - return ret - fi -} - -__systemctl() -{ - systemctl --full --no-legend --no-pager "$@" -} - - -# Fills the unit list -_systemctl_all_units() -{ - if ( [[ ${+_sys_all_units} -eq 0 ]] || _cache_invalid SYS_ALL_UNITS ) && - ! _retrieve_cache SYS_ALL_UNITS; - then - _sys_all_units=( $(__systemctl list-units --all | { while read a b; do echo "$a"; done; }) ) - _store_cache SYS_ALL_UNITS _sys_all_units - fi -} - -# Fills the unit list including all file units -_systemctl_really_all_units() -{ - local -a all_unit_files; - local -a really_all_units; - if ( [[ ${+_sys_really_all_units} -eq 0 ]] || _cache_invalid SYS_REALLY_ALL_UNITS ) && - ! _retrieve_cache SYS_REALLY_ALL_UNITS; - then - all_unit_files=( $(__systemctl list-unit-files | { while read a b; do echo "$a"; done; }) ) - _systemctl_all_units - really_all_units=($_sys_all_units $all_unit_files) - _sys_really_all_units=(${(u)really_all_units}) - _store_cache SYS_REALLY_ALL_UNITS _sys_really_all_units - fi -} - -_filter_units_by_property() { - local property=$1 value=$2 ; shift ; shift - local -a units ; units=($*) - local prop unit - for ((i=1; $i <= ${#units[*]}; i++)); do - # FIXME: "Failed to issue method call: Unknown unit" errors are ignored for - # now (related to DBUS_ERROR_UNKNOWN_OBJECT). in the future, we need to - # revert to calling 'systemctl show' once for all units, which is way - # faster - unit=${units[i]} - prop=${(f)"$(_call_program units "$service show --no-pager --property="$property" ${unit} 2>/dev/null")"} - if [[ "${prop}" = "$property=$value" ]]; then - echo "${unit}" - fi - done -} - -_systemctl_active_units() {_sys_active_units=( $(__systemctl list-units | { while read a b; do echo "$a"; done; }) )} -_systemctl_inactive_units(){_sys_inactive_units=($(__systemctl list-units --all | { while read a b c d; do [[ $c == "inactive" ]] && echo "$a"; done; }) )} -_systemctl_failed_units() {_sys_failed_units=( $(__systemctl list-units --failed | { while read a b; do echo "$a"; done; }) )} -_systemctl_enabled_units() {_sys_enabled_units=( $(__systemctl list-unit-files | { while read a b; do [[ $b == "enabled" ]] && echo "$a"; done; }) )} -_systemctl_disabled_units(){_sys_disabled_units=($(__systemctl list-unit-files | { while read a b; do [[ $b == "disabled" ]] && echo "$a"; done; }) )} -_systemctl_masked_units() {_sys_masked_units=( $(__systemctl list-unit-files | { while read a b; do [[ $b == "masked" ]] && echo "$a"; done; }) )} - -# Completion functions for ALL_UNITS -for fun in is-active is-enabled status show mask preset ; do - (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() - { - _systemctl_really_all_units - compadd "$@" -a - _sys_really_all_units - } -done - -# Completion functions for ENABLED_UNITS -for fun in disable reenable ; do - (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() - { - _systemctl_enabled_units - compadd "$@" -a - _sys_enabled_units - } -done - -# Completion functions for DISABLED_UNITS -(( $+functions[_systemctl_enable] )) || _systemctl_enable() -{ - _systemctl_disabled_units - compadd "$@" -a - _sys_disabled_units -} - -# Completion functions for FAILED_UNITS -(( $+functions[_systemctl_reset-failed] )) || _systemctl_reset-failed() -{ - _systemctl_failed_units - compadd "$@" -a - _sys_failed_units || _message "no failed unit found" -} - -# Completion functions for STARTABLE_UNITS -(( $+functions[_systemctl_start] )) || _systemctl_start() -{ - _systemctl_inactive_units - compadd "$@" -a - _sys_inactive_units -} - -# Completion functions for STOPPABLE_UNITS -for fun in stop kill try-restart condrestart ; do - (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() - { - _systemctl_active_units - compadd "$@" - $( _filter_units_by_property CanStop yes \ - ${_sys_active_units[*]} ) - } -done - -# Completion functions for ISOLATABLE_UNITS -(( $+functions[_systemctl_isolate] )) || _systemctl_isolate() -{ - _systemctl_all_units - compadd "$@" - $( _filter_units_by_property AllowIsolate yes \ - ${_sys_all_units[*]} ) -} - -# Completion functions for RELOADABLE_UNITS -for fun in reload reload-or-try-restart force-reload ; do - (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() - { - _systemctl_active_units - compadd "$@" - $( _filter_units_by_property CanReload yes \ - ${_sys_active_units[*]} ) - } -done - -# Completion functions for RESTARTABLE_UNITS -for fun in restart reload-or-restart ; do - (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() - { - _systemctl_all_units - compadd "$@" - $( _filter_units_by_property CanStart yes \ - ${_sys_all_units[*]} | while read line; do \ - [[ "$line" =~ \.(device|snapshot|socket|timer)$ ]] || echo "$line"; \ - done ) - } -done - -# Completion functions for MASKED_UNITS -(( $+functions[_systemctl_unmask] )) || _systemctl_unmask() -{ - _systemctl_masked_units - compadd "$@" -a - _sys_masked_units || _message "no masked unit found" -} - -# Completion functions for JOBS -(( $+functions[_systemctl_cancel] )) || _systemctl_cancel() -{ - compadd "$@" - $(__systemctl list-jobs \ - | cut -d' ' -f1 2>/dev/null ) || _message "no job found" -} - -# Completion functions for SNAPSHOTS -(( $+functions[_systemctl_delete] )) || _systemctl_delete() -{ - compadd "$@" - $(__systemctl list-units --type snapshot --all \ - | cut -d' ' -f1 2>/dev/null ) || _message "no snampshot found" -} - -# Completion functions for ENVS -for fun in set-environment unset-environment ; do - (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() - { - local fun=$0 ; fun=${fun##_systemctl_} - local suf - if [[ "${fun}" = "set-environment" ]]; then - suf='-S=' - fi - - compadd "$@" ${suf} - $(systemctl show-environment \ - | while read line; do echo "${line%%\=}";done ) - } -done - -(( $+functions[_systemctl_link] )) || _systemctl_link() { _files } - -# no systemctl completion for: -# [STANDALONE]='daemon-reexec daemon-reload default dot dump -# emergency exit halt kexec list-jobs list-units -# list-unit-files poweroff reboot rescue show-environment' -# [NAME]='snapshot load' - -_systemctl_caching_policy() -{ - local _sysunits - local -a oldcache - - # rebuild if cache is more than a day old - oldcache=( "$1"(mh+1) ) - (( $#oldcache )) && return 0 - - _sysunits=($(__systemctl --all | cut -d' ' -f1)) - - if (( $#_sysunits )); then - for unit in $_sysunits; do - [[ "$unit" -nt "$1" ]] && return 0 - done - fi - - return 1 -} - -_list_fields() { - local -a journal_fields - journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC} - ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID} - _{P,U,G}ID _COMM _EXE _CMDLINE - _AUDIT_{SESSION,LOGINUID} - _SYSTEMD_{CGROUP,SESSION,UNIT,OWNER_UID} - _SELINUX_CONTEXT _SOURCE_REALTIME_TIMESTAMP - _{BOOT,MACHINE}_ID _HOSTNAME _TRANSPORT - _KERNEL_{DEVICE,SUBSYSTEM} - _UDEV_{SYSNAME,DEVNODE,DEVLINK} - __CURSOR __{REALTIME,MONOTONIC}_TIMESTAMP) - _describe 'possible fields' journal_fields -} - -_journal_fields() { - local -a _fields cmd - cmd=("journalctl" "-F ${@[-1]}" "2>/dev/null" ) - _fields=( ${(f)"$(_call_program fields $cmd[@])"} ) - typeset -U _fields - _describe 'possible values' _fields -} - - -_loginctl_all_sessions(){_sys_all_sessions=($(loginctl list-sessions | { while read a b; do echo "$a"; done; }) )} -_loginctl_all_users() {_sys_all_users=( $(loginctl list-users | { while read a b; do echo "$a"; done; }) )} -_loginctl_all_seats() {_sys_all_seats=( $(loginctl list-seats | { while read a b; do echo "$a"; done; }) )} - -# Completion functions for SESSIONS -for fun in session-status show-session activate lock-session unlock-session terminate-session kill-session ; do - (( $+functions[_loginctl_$fun] )) || _loginctl_$fun() - { - _loginctl_all_sessions - compadd "$@" -a - _sys_all_sessions - } -done - -# Completion functions for USERS -for fun in user-status show-user enable-linger disable-linger terminate-user kill-user ; do - (( $+functions[_loginctl_$fun] )) || _loginctl_$fun() - { - _loginctl_all_users - compadd "$@" -a - _sys_all_users - } -done - -# Completion functions for SEATS -(( $+functions[_loginctl_seats] )) || _loginctl_seats() -{ - _loginctl_all_seats - compadd "$@" -a - _sys_all_seats -} -for fun in seat-status show-seat terminate-seat ; do - (( $+functions[_loginctl_$fun] )) || _loginctl_$fun() - { _loginctl_seats } -done - -# Completion functions for ATTACH -(( $+functions[_loginctl_attach] )) || _loginctl_attach() -{ - _loginctl_all_seats - - _arguments -w -C -S -s \ - ':seat:_loginctl_seats' \ - '*:device:_files' -} - -# no loginctl completion for: -# [STANDALONE]='list-sessions list-users list-seats flush-devices' - -(( $+functions[_loginctl_command] )) || _loginctl_command() -{ - local -a _loginctl_cmds - _loginctl_cmds=( - "list-sessions:List sessions" - "session-status:Show session status" - "show-session:Show properties of one or more sessions" - "activate:Activate a session" - "lock-session:Screen lock one or more sessions" - "unlock-session:Screen unlock one or more sessions" - "terminate-session:Terminate one or more sessions" - "kill-session:Send signal to processes of a session" - "list-users:List users" - "user-status:Show user status" - "show-user:Show properties of one or more users" - "enable-linger:Enable linger state of one or more users" - "disable-linger:Disable linger state of one or more users" - "terminate-user:Terminate all sessions of one or more users" - "kill-user:Send signal to processes of a user" - "list-seats:List seats" - "seat-status:Show seat status" - "show-seat:Show properties of one or more seats" - "attach:Attach one or more devices to a seat" - "flush-devices:Flush all device associations" - "terminate-seat:Terminate all sessions on one or more seats" - ) - - if (( CURRENT == 1 )); then - _describe -t commands 'loginctl command' _loginctl_cmds || compadd "$@" - else - local curcontext="$curcontext" - - cmd="${${_loginctl_cmds[(r)$words[1]:*]%%:*}}" - - if (( $#cmd )); then - curcontext="${curcontext%:*:*}:loginctl-${cmd}:" - - _call_function ret _loginctl_$cmd || _message 'no more arguments' - else - _message "unknown loginctl command: $words[1]" - fi - return ret - fi -} - -_hostnamectl_command() { - local -a _hostnamectl_cmds - _hostnamectl_cmds=( - "status:Show current hostname settings" - "set-hostname:Set system hostname" - "set-icon-name:Set icon name for host" - ) - if (( CURRENT == 1 )); then - _describe -t commands 'hostnamectl commands' _hostnamectl_cmds || compadd "$@" - else - local curcontext="$curcontext" - cmd="${${_hostnamectl_cmds[(r)$words[1]:*]%%:*}}" - if (( $#cmd )); then - [[ $cmd == status ]] && msg="no options" || msg="options for $cmd" - _message "$msg" - else - _message "unknown hostnamectl command: $words[1]" - fi - fi -} - -_localectl_set-locale() { - local -a _confs _locales - local expl suf - _locales=( ${(f)"$(_call_program locales "$service" list-locales)"} ) - _confs=( ${${(f)"$(_call_program confs "locale 2>/dev/null")"}%\=*} ) - if [[ -prefix 1 *\= ]]; then - local conf=${PREFIX%%\=*} - compset -P1 '*=' - _wanted locales expl "locales configs" \ - _combination localeconfs confs=$conf locales "$@" - - else - compadd -S '=' $_confs - fi -} - -_localectl_set-keymap() { - local -a _keymaps - _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} ) - if (( CURRENT <= 3 )); then - _describe keymaps _keymaps - else - _message "no more options" - fi -} - -_localectl_set-x11-keymap() { - if (( $+commands[pkg-config] )); then - local -a _file _layout _model _variant _options - local _xorg_lst - _xorg_lst=${"$($commands[pkg-config] xkeyboard-config --variable=xkb_base)"} - _file=( ${(ps:\n\!:)"$(<$_xorg_lst/rules/xorg.lst)"} ) - _layout=( ${${${(M)${(f)_file[1]}:# *}# }%% *} ) - _model=( ${${${(M)${(f)_file[2]}:# *}# }%% *} ) - _variant=( ${${${(M)${(f)_file[3]}:# *}# }%% *} ) - _options=( ${${${(M)${(f)_file[4]}:# *}# }%% *} ) - #_layout=( ${(f)"$( echo $_file[1] | awk '/^ / {print $1}' )"} ) - #_model=( ${(f)"$(echo $_file[2] | awk '/^ / {print $1}')"} ) - #_variant=( ${(f)"$(echo $_file[3] | awk '/^ / {print $1}')"} ) - #_options=( ${(f)"$(echo ${_file[4]//:/\\:} | awk '/^ / {print $1}')"} ) - - case $CURRENT in - 2) _describe layouts _layout ;; - 3) _describe models _model;; - 4) _describe variants _variant;; - 5) _describe options _options;; - *) _message "no more options" - esac - fi -} - - -_localectl_command() { - local -a _localectl_cmds - _localectl_cmds=( - 'status:Show current locale settings' - 'set-locale:Set system locale' - 'list-locales:Show known locales' - 'set-keymap:Set virtual console keyboard mapping' - 'list-keymaps:Show known virtual console keyboard mappings' - 'set-x11-keymap:Set X11 keyboard mapping' - ) - if (( CURRENT == 1 )); then - _describe -t commands 'localectl command' _localectl_cmds - else - local curcontext="$curcontext" - cmd="${${_localectl_cmds[(r)$words[1]:*]%%:*}}" - if (( $+functions[_localectl_$cmd] )); then - _localectl_$cmd - else - _message "no more options" - fi - fi -} - -_timedatectl_set-timezone(){ - local -a _timezones - _timezones=( ${(f)"$(_call_program timezones "${service}" list-timezones)"} ) - compadd "$_timezones[@]" -} - -_timedatectl_set-time(){ - _message "YYYY-MM-DD HH:MM:SS" -} - -_timedatectl_set-local-rtc(){ - local -a _options - _options=( - '0:Maintain RTC in universal time' - '1:Maintain RTC in local time' - ) - _describe options _options -} - -_timedatectl_set-ntp(){ - local -a _options - _options=( - '0:Disable NTP based network time configuration' - '1:Enable NTP based network time configuration' - ) - _describe options _options -} - -_timedatectl_command(){ - local -a _timedatectl_cmds - _timedatectl_cmds=( - 'status:Show current time settings' - 'set-time:Set system time' - 'set-timezone:Set system timezone' - 'list-timezones:Show known timezones' - 'set-local-rtc:Control whether RTC is in local time' - 'set-ntp:Control whether NTP is enabled' - ) - if (( CURRENT == 1 )); then - _describe -t commands 'timedatectl command' _timedatectl_cmds - else - local curcontext="$curcontext" - cmd="${${_timedatectl_cmds[(r)$words[1]:*]%%:*}}" - if (( $#cmd )); then - if (( $+functions[_timedatectl_$cmd] )); then - _timedatectl_$cmd - else - _message "no more options" - fi - else - _message "unknown timedatectl command: $words[1]" - fi - fi -} -_systemd-coredumpctl_command(){ - local -a _systemd_coredumpctl_cmds - _systemd_coredumpctl_cmds=( - 'list:List available coredumps' - 'dump:Print coredump to std' - ) - if (( CURRENT == 1 )); then - _describe -t commands 'systemd-coredumpctl command' _systemd_coredumpctl_cmds - else - local curcontext="$curcontext" - local -a dumps - cmd="${${_systemd_coredumpctl_cmds[(r)$words[1]:*]%%:*}}" - if (( $#cmd )); then - dumps=( "${(f)$(_call_program dumps "systemd-coredumpctl list 2>/dev/null")}" ) - if [[ -n "$dumps" ]]; then - compadd "${dumps[@]}" - else - _message "no coredumps" - fi - else - _message "no more options" - fi - - fi - -} - -_udevadm_info(){ - _arguments \ - '--query=[Query the database for specified type of device data. It needs the --path or --name to identify the specified device.]:type:(name symlink path property all)' \ - '--path=[The devpath of the device to query.]:sys files:_files -P /sys/ -W /sys' \ - '--name=[The name of the device node or a symlink to query]:device files:_files -P /dev/ -W /dev' \ - '--root[Print absolute paths in name or symlink query.]' \ - '--attribute-walk[Print all sysfs properties of the specified device that can be used in udev rules to match the specified device]' \ - '--export[Print output as key/value pairs.]' \ - '--export-prefix=[Add a prefix to the key name of exported values.]:prefix' \ - '--device-id-of-file=[Print major/minor numbers of the underlying device, where the file lives on.]:files:_udevadm_mounts' \ - '--export-db[Export the content of the udev database.]' \ - '--cleanup-db[Cleanup the udev database.]' -} - -_udevadm_trigger(){ - _arguments \ - '--verbose[Print the list of devices which will be triggered.]' \ - '--dry-run[Do not actually trigger the event.]' \ - '--type=[Trigger a specific type of devices.]:types:(devices subsystems failed)' \ - '--action=[Type of event to be triggered.]:actions:(add change remove)' \ - '--subsystem-match=[Trigger events for devices which belong to a matching subsystem.]' \ - '--subsystem-nomatch=[Do not trigger events for devices which belong to a matching subsystem.]' \ - '--attr-match=attribute=[Trigger events for devices with a matching sysfs attribute.]' \ - '--attr-nomatch=attribute=[Do not trigger events for devices with a matching sysfs attribute.]' \ - '--property-match=[Trigger events for devices with a matching property value.]' \ - '--tag-match=property[Trigger events for devices with a matching tag.]' \ - '--sysname-match=[Trigger events for devices with a matching sys device name.]' \ - '--parent-match=[Trigger events for all children of a given device.]' -} - -_udevadm_settle(){ - _arguments \ - '--timeout=[Maximum number of seconds to wait for the event queue to become empty.]' \ - '--seq-start=[Wait only for events after the given sequence number.]' \ - '--seq-end=[Wait only for events before the given sequence number.]' \ - '--exit-if-exists=[Stop waiting if file exists.]:files:_files' \ - '--quiet[Do not print any output, like the remaining queue entries when reaching the timeout.]' \ - '--help[Print help text.]' -} - -_udevadm_control(){ - _arguments \ - '--exit[Signal and wait for systemd-udevd to exit.]' \ - '--log-priority=[Set the internal log level of systemd-udevd.]:priorities:(err info debug)' \ - '--stop-exec-queue[Signal systemd-udevd to stop executing new events. Incoming events will be queued.]' \ - '--start-exec-queue[Signal systemd-udevd to enable the execution of events.]' \ - '--reload[Signal systemd-udevd to reload the rules files and other databases like the kernel module index.]' \ - '--property=[Set a global property for all events.]' \ - '--children-max=[Set the maximum number of events.]' \ - '--timeout=[The maximum number of seconds to wait for a reply from systemd-udevd.]' \ - '--help[Print help text.]' -} - -_udevadm_monitor(){ - _arguments \ - '--kernel[Print the kernel uevents.]' \ - '--udev[Print the udev event after the rule processing.]' \ - '--property[Also print the properties of the event.]' \ - '--subsystem-match=[Filter events by subsystem[/devtype].]' \ - '--tag-match=[Filter events by property.]' \ - '--help[Print help text.]' -} - -_udevadm_test(){ - _arguments \ - '--action=[The action string.]:actions:(add change remove)' \ - '--subsystem=[The subsystem string.]' \ - '--help[Print help text.]' \ - '*::devpath:_files -P /sys/ -W /sys' -} - -_udevadm_test-builtin(){ - if (( CURRENT == 2 )); then - _arguments \ - '--help[Print help text]' \ - '*::builtins:(blkid btrfs firmware hwdb input_id kmod path_id usb_id uaccess)' - elif (( CURRENT == 3 )); then - _arguments \ - '--help[Print help text]' \ - '*::syspath:_files -P /sys -W /sys' - else - _arguments \ - '--help[Print help text]' - fi -} - -_udevadm_mounts(){ - local dev_tmp dpath_tmp mp_tmp mline - - tmp=( "${(@f)$(< /etc/mtab)}" ) - dev_tmp=( "${(@)${(@)tmp%% *}:#none}" ) - mp_tmp=( "${(@)${(@)tmp#* }%% *}" ) - - local MATCH - mp_tmp=("${(@q)mp_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}") - dpath_tmp=( "${(@Mq)dev_tmp:#/*}" ) - dev_tmp=( "${(@q)dev_tmp:#/*}" ) - - _alternative \ - 'device-paths: device path:compadd -a dpath_tmp' \ - 'directories:mount point:compadd -a mp_tmp' -} - - -_udevadm_command(){ - local -a _udevadm_cmds - _udevadm_cmds=( - 'info:query sysfs or the udev database' - 'trigger:request events from the kernel' - 'settle:wait for the event queue to finish' - 'control:control the udev daemon' - 'monitor:listen to kernel and udev events' - 'test:test an event run' - 'test-builtin:test a built-in command' - ) - - if ((CURRENT == 1)); then - _describe -t commands 'udevadm commands' _udevadm_cmds - else - local curcontext="$curcontext" - cmd="${${_udevadm_cmds[(r)$words[1]:*]%%:*}}" - if (($#cmd)); then - if (( $+functions[_udevadm_$cmd] )); then - _udevadm_$cmd - else - _message "no options for $cmd" - fi - else - _message "no more options" - fi - fi -} - -_ctls "$@" - -#vim: set ft=zsh sw=4 ts=4 et |