zsh-completion: fix for #4318 (#4394)

Escape unit names for the eval call in _call_program

The value of the Id property is transformed back into a unit name
usable by systemctl.
system-systemd\x5cx2dcryptsetup.slice -> system-systemd\x2dcryptsetup.slice

Also filter units by property via parameter expansion, not a for loop
This commit is contained in:
llua 2016-10-17 08:35:26 -04:00 committed by Lennart Poettering
parent cdc31c592a
commit 6c9414a700

View file

@ -123,15 +123,11 @@ _systemctl_really_all_units()
} }
_filter_units_by_property() { _filter_units_by_property() {
local property=$1 value=$2 ; shift ; shift local property=$1 value=$2; shift 2
local -a units ; units=($*) local -a units; units=("${(q-)@}")
local props local -A props
for props in ${(ps:\n\n:)"$(_call_program units "$service $_sys_service_mgr show --no-pager --property="Id,$property" -- ${units} 2>/dev/null")"}; do props=(${(f)"$(_call_program units "$service $_sys_service_mgr show --no-pager --property=\"Id,$property\" -- ${units} 2>/dev/null")"})
props=(${(f)props}) echo -E - "${(@g:o:)${(k@)props[(Re)$property=$value]}#Id=}"
if [[ "${props[2]}" = "$property=$value" ]]; then
echo -E - " ${props[1]#Id=}"
fi
done
} }
_systemctl_get_template_names() { echo -E - ${^${(M)${(f)"$(__systemctl list-unit-files)"}##*@.[^[:space:]]##}%%@.*}\@ } _systemctl_get_template_names() { echo -E - ${^${(M)${(f)"$(__systemctl list-unit-files)"}##*@.[^[:space:]]##}%%@.*}\@ }