diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-06-13 14:09:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-13 14:09:14 +0200 |
commit | 23949111c031ab8d4431f24ecfdf898f0d3fe8d9 (patch) | |
tree | 89d1ce3a1f43d626ba42d63d2d41bbf7c380eeae /shell-completion | |
parent | Merge pull request #9172 from yuwata/timesync-ntp-parser (diff) | |
parent | zsh-completion: systemctl: list template units only as needed (diff) | |
download | systemd-23949111c031ab8d4431f24ecfdf898f0d3fe8d9.tar.xz systemd-23949111c031ab8d4431f24ecfdf898f0d3fe8d9.zip |
Merge pull request #8863 from evelikov/shell-completion-fixes
Shell completion fixes/perf improvements
Diffstat (limited to 'shell-completion')
-rw-r--r-- | shell-completion/bash/systemctl.in | 66 | ||||
-rw-r--r-- | shell-completion/zsh/_systemctl.in | 42 |
2 files changed, 60 insertions, 48 deletions
diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in index 8bf83c8aea..1c26ca24c4 100644 --- a/shell-completion/bash/systemctl.in +++ b/shell-completion/bash/systemctl.in @@ -7,7 +7,7 @@ __systemctl() { local mode=$1; shift 1 - systemctl $mode --full --no-legend "$@" 2>/dev/null + systemctl $mode --full --no-legend --no-pager "$@" 2>/dev/null } __systemd_properties() { @@ -61,41 +61,41 @@ __filter_units_by_properties () { done } -__get_all_units () { { __systemctl $1 list-unit-files; __systemctl $1 list-units --all; } \ +__get_all_units () { { __systemctl $1 list-unit-files "$2*"; __systemctl $1 list-units --all "$2*"; } \ | { while read -r a b; do echo " $a"; done; }; } -__get_non_template_units() { { __systemctl $1 list-unit-files; __systemctl $1 list-units --all; } \ +__get_non_template_units() { { __systemctl $1 list-unit-files "$2*"; __systemctl $1 list-units --all "$2*"; } \ | { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }; } -__get_template_names () { __systemctl $1 list-unit-files \ +__get_template_names () { __systemctl $1 list-unit-files "$2*" \ | { while read -r a b; do [[ $a =~ @\. ]] && echo " ${a%%@.*}@"; done; }; } -__get_active_units () { __systemctl $1 list-units \ +__get_active_units () { __systemctl $1 list-units "$2*" \ | { while read -r a b; do echo " $a"; done; }; } __get_startable_units () { # find startable inactive units __filter_units_by_properties $1 ActiveState,CanStart inactive,yes $( - { __systemctl $1 list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient | \ + { __systemctl $1 list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient "$2*" | \ { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; } - __systemctl $1 list-units --state inactive,failed | \ + __systemctl $1 list-units --state inactive,failed "$2*" | \ { while read -r a b c; do [[ $b == "loaded" ]] && echo " $a"; done; } } | sort -u ) } __get_restartable_units () { # filter out masked and not-found __filter_units_by_property $1 CanStart yes $( - __systemctl $1 list-unit-files --state enabled,disabled,static | \ + __systemctl $1 list-unit-files --state enabled,disabled,static "$2*" | \ { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; } - __systemctl $1 list-units | \ + __systemctl $1 list-units "$2*" | \ { while read -r a b; do echo " $a"; done; } ) } -__get_failed_units () { __systemctl $1 list-units \ +__get_failed_units () { __systemctl $1 list-units "$2*" \ | { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; } -__get_enabled_units () { __systemctl $1 list-unit-files \ +__get_enabled_units () { __systemctl $1 list-unit-files "$2*" \ | { while read -r a b c ; do [[ $b == "enabled" ]] && echo " $a"; done; }; } -__get_disabled_units () { __systemctl $1 list-unit-files \ +__get_disabled_units () { __systemctl $1 list-unit-files "$2*" \ | { while read -r a b c ; do [[ $b == "disabled" ]] && echo " $a"; done; }; } -__get_masked_units () { __systemctl $1 list-unit-files \ +__get_masked_units () { __systemctl $1 list-unit-files "$2*" \ | { while read -r a b c ; do [[ $b == "masked" ]] && echo " $a"; done; }; } -__get_all_unit_files () { { __systemctl $1 list-unit-files; } | { while read -r a b; do echo " $a"; done; }; } +__get_all_unit_files () { { __systemctl $1 list-unit-files "$2*"; } | { while read -r a b; do echo " $a"; done; }; } __get_machines() { local a b @@ -212,68 +212,66 @@ _systemctl () { comps="${VERBS[*]}" elif __contains_word "$verb" ${VERBS[ALL_UNITS]}; then - comps=$( __get_all_units $mode ) + comps=$( __get_all_units $mode "$cur" ) compopt -o filenames elif __contains_word "$verb" ${VERBS[NONTEMPLATE_UNITS]}; then - comps=$( __get_non_template_units $mode ) + comps=$( __get_non_template_units $mode "$cur" ) compopt -o filenames elif __contains_word "$verb" ${VERBS[ENABLED_UNITS]}; then - comps=$( __get_enabled_units $mode ) + comps=$( __get_enabled_units $mode "$cur" ) compopt -o filenames elif __contains_word "$verb" ${VERBS[DISABLED_UNITS]}; then - comps=$( __get_disabled_units $mode; - __get_template_names $mode) + comps=$( __get_disabled_units $mode "$cur"; + __get_template_names $mode "$cur") compopt -o filenames elif __contains_word "$verb" ${VERBS[REENABLABLE_UNITS]}; then - comps=$( __get_disabled_units $mode; - __get_enabled_units $mode; - __get_template_names $mode) + comps=$( __get_disabled_units $mode "$cur"; + __get_enabled_units $mode "$cur"; + __get_template_names $mode "$cur") compopt -o filenames elif __contains_word "$verb" ${VERBS[STARTABLE_UNITS]}; then - comps=$( __get_startable_units $mode; - __get_template_names $mode) + comps=$( __get_startable_units $mode "$cur" ) compopt -o filenames elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then - comps=$( __get_restartable_units $mode; - __get_template_names $mode) + comps=$( __get_restartable_units $mode "$cur" ) compopt -o filenames elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then comps=$( __filter_units_by_property $mode CanStop yes \ - $( __get_active_units $mode ) ) + $( __get_active_units $mode "$cur" ) ) compopt -o filenames elif __contains_word "$verb" ${VERBS[RELOADABLE_UNITS]}; then comps=$( __filter_units_by_property $mode CanReload yes \ - $( __get_active_units $mode ) ) + $( __get_active_units $mode "$cur" ) ) compopt -o filenames elif __contains_word "$verb" ${VERBS[ISOLATABLE_UNITS]}; then comps=$( __filter_units_by_property $mode AllowIsolate yes \ - $( __get_all_units $mode ) ) + $( __get_all_units $mode "$cur" ) ) compopt -o filenames elif __contains_word "$verb" ${VERBS[FAILED_UNITS]}; then - comps=$( __get_failed_units $mode ) + comps=$( __get_failed_units $mode "$cur" ) compopt -o filenames elif __contains_word "$verb" ${VERBS[MASKED_UNITS]}; then - comps=$( __get_masked_units $mode ) + comps=$( __get_masked_units $mode "$cur" ) compopt -o filenames elif __contains_word "$verb" ${VERBS[TARGET_AND_UNITS]}; then if __contains_word "$prev" ${VERBS[TARGET_AND_UNITS]} \ || __contains_word "$prev" ${OPTS[STANDALONE]}; then - comps=$( __systemctl $mode list-unit-files --type target --all \ + comps=$( __systemctl $mode list-unit-files --type target --all "$cur*" \ | { while read -r a b; do echo " $a"; done; } ) else - comps=$( __get_all_unit_files $mode ) + comps=$( __get_all_unit_files $mode "$cur" ) fi compopt -o filenames @@ -293,7 +291,7 @@ _systemctl () { compopt -o filenames elif __contains_word "$verb" ${VERBS[TARGETS]}; then - comps=$( __systemctl $mode list-unit-files --type target --full --all \ + comps=$( __systemctl $mode list-unit-files --type target --full --all "$cur*" \ | { while read -r a b; do echo " $a"; done; } ) fi diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in index 000b58560b..9f576ed77d 100644 --- a/shell-completion/zsh/_systemctl.in +++ b/shell-completion/zsh/_systemctl.in @@ -106,7 +106,7 @@ _systemctl_all_units() if ( [[ ${+_sys_all_units} -eq 0 ]] || _cache_invalid SYS_ALL_UNITS$_sys_service_mgr ) || ! _retrieve_cache SYS_ALL_UNITS$_sys_service_mgr; then - _sys_all_units=( ${${(f)"$(__systemctl list-units --all)"}%% *} ) + _sys_all_units=( ${${(f)"$(__systemctl list-units --all "$PREFIX*" )"}%% *} ) _store_cache SYS_ALL_UNITS$_sys_service_mgr _sys_all_units fi } @@ -119,7 +119,7 @@ _systemctl_really_all_units() if ( [[ ${+_sys_really_all_units} -eq 0 ]] || _cache_invalid SYS_REALLY_ALL_UNITS$_sys_service_mgr ) || ! _retrieve_cache SYS_REALLY_ALL_UNITS$_sys_service_mgr; then - all_unit_files=( ${${(f)"$(__systemctl list-unit-files)"}%% *} ) + all_unit_files=( ${${(f)"$(__systemctl list-unit-files "$PREFIX*" )"}%% *} ) _systemctl_all_units really_all_units=($_sys_all_units $all_unit_files) _sys_really_all_units=(${(u)really_all_units}) @@ -135,33 +135,38 @@ _filter_units_by_property() { echo -E - "${(@g:o:)${(k@)props[(Re)$property=$value]}#Id=}" } -_systemctl_get_template_names() { echo -E - ${^${(M)${(f)"$(__systemctl list-unit-files "*$PREFIX*$SUFFIX*" )"}##*@.[^[:space:]]##}%%@.*}\@ } +_systemctl_get_non_template_names() { echo -E - ${^${(R)${(f)"$( + __systemctl $mode list-unit-files "$PREFIX*" + __systemctl $mode list-units --all "$PREFIX*" + )"}:#*@.*}%%[[:space:]]*} } +_systemctl_get_template_names() { echo -E - ${^${(M)${(f)"$(__systemctl list-unit-files "$PREFIX*" )"}##*@.[^[:space:]]##}%%@.*}\@ } -_systemctl_active_units() {_sys_active_units=( ${${(f)"$(__systemctl list-units "*$PREFIX*$SUFFIX*" )"}%% *} )} + +_systemctl_active_units() {_sys_active_units=( ${${(f)"$(__systemctl list-units "$PREFIX*" )"}%% *} )} _systemctl_startable_units(){ _sys_startable_units=( $( _filter_units_by_property ActiveState inactive $( _filter_units_by_property CanStart yes ${${${(f)"$( - __systemctl $mode list-unit-files --state enabled,disabled,static "*$PREFIX*$SUFFIX*" - __systemctl $mode list-units --state inactive,failed "*$PREFIX*$SUFFIX*" + __systemctl $mode list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient "$PREFIX*" + __systemctl $mode list-units --state inactive,failed "$PREFIX*" )"}:#*@.*}%%[[:space:]]*} )) ) } _systemctl_restartable_units(){ _sys_restartable_units=( $( _filter_units_by_property CanStart yes ${${${(f)"$( - __systemctl $mode list-unit-files --state enabled,disabled,static "*$PREFIX*$SUFFIX*" - __systemctl $mode list-units "*$PREFIX*$SUFFIX*" + __systemctl $mode list-unit-files --state enabled,disabled,static "$PREFIX*" + __systemctl $mode list-units "$PREFIX*" )"}:#*@.*}%%[[:space:]]*} ) ) } -_systemctl_failed_units() {_sys_failed_units=( ${${(f)"$(__systemctl list-units --state=failed "*$PREFIX*$SUFFIX*" )"}%% *} ) } -_systemctl_unit_state() { typeset -gA _sys_unit_state; _sys_unit_state=( $(__systemctl list-unit-files "*$PREFIX*$SUFFIX*" ) ) } +_systemctl_failed_units() {_sys_failed_units=( ${${(f)"$(__systemctl list-units --state=failed "$PREFIX*" )"}%% *} ) } +_systemctl_unit_state() { typeset -gA _sys_unit_state; _sys_unit_state=( $(__systemctl list-unit-files "$PREFIX*" ) ) } local fun # Completion functions for ALL_UNITS -for fun in is-active is-failed is-enabled status show cat mask preset help list-dependencies edit revert add-wants add-requires ; do +for fun in cat mask ; do (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() { _systemctl_really_all_units @@ -170,6 +175,15 @@ for fun in is-active is-failed is-enabled status show cat mask preset help list- } done +# Completion functions for NONTEMPLATE_UNITS +for fun in is-active is-failed is-enabled status show preset help list-dependencies edit revert add-wants add-requires ; do + (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() + { + _wanted systemd-units expl unit \ + compadd "$@" - $(_systemctl_get_non_template_names) + } +done + # Completion functions for ENABLED_UNITS (( $+functions[_systemctl_disable] )) || _systemctl_disable() { @@ -206,7 +220,7 @@ done { local _sys_startable_units; _systemctl_startable_units _wanted systemd-units expl 'startable unit' \ - compadd "$@" - ${_sys_startable_units[*]} $(_systemctl_get_template_names) + compadd "$@" - ${_sys_startable_units[*]} } # Completion functions for STOPPABLE_UNITS @@ -246,7 +260,7 @@ for fun in restart reload-or-restart ; do { local _sys_restartable_units; _systemctl_restartable_units _wanted systemd-units expl 'restartable unit' \ - compadd "$@" - ${_sys_restartable_units[*]} $(_systemctl_get_template_names) + compadd "$@" - ${_sys_restartable_units[*]} } done @@ -270,7 +284,7 @@ done (( $+functions[_systemctl_set-default] )) || _systemctl_set-default() { _wanted systemd-targets expl target \ - compadd "$@" - ${${(f)"$(__systemctl list-unit-files --type target --all)"}%% *} || + compadd "$@" - ${${(f)"$(__systemctl list-unit-files --type target --all "$PREFIX*" )"}%% *} || _message "no targets found" } |