driver: Be resilient to KSH_ARRAYS being set in the calling scope

The «emulate» call isn't sufficient, since these lines are parsed before
it takes effect.

Fixes #689 (née #622).

See also #688 for preventing these gymnastics from being needed in the
first place.

See also https://github.com/junegunn/fzf/pull/1924 for an inter-plugin
interaction that this probably fixes.
This commit is contained in:
Austin Traver 2020-03-13 01:16:40 -07:00 committed by Daniel Shahaf
parent b85e313bc9
commit b00be5f741

View file

@ -86,12 +86,12 @@ _zsh_highlight()
# Before we 'emulate -L', save the user's options # Before we 'emulate -L', save the user's options
local -A zsyh_user_options local -A zsyh_user_options
if zmodload -e zsh/parameter; then if zmodload -e zsh/parameter; then
zsyh_user_options=("${(@kv)options}") zsyh_user_options=("${(kv)options[@]}")
else else
local canonical_options onoff option raw_options local canonical_options onoff option raw_options
raw_options=(${(f)"$(emulate -R zsh; set -o)"}) raw_options=(${(f)"$(emulate -R zsh; set -o)"})
canonical_options=(${${${(M)raw_options:#*off}%% *}#no} ${${(M)raw_options:#*on}%% *}) canonical_options=(${${${(M)raw_options:#*off}%% *}#no} ${${(M)raw_options:#*on}%% *})
for option in $canonical_options; do for option in "${canonical_options[@]}"; do
[[ -o $option ]] [[ -o $option ]]
# This variable cannot be eliminated c.f. workers/42101. # This variable cannot be eliminated c.f. workers/42101.
onoff=${${=:-off on}[2-$?]} onoff=${${=:-off on}[2-$?]}