From 2eac3bd4beb693624ff22cf40a26079df498a4f1 Mon Sep 17 00:00:00 2001 From: Karel Balej Date: Fri, 7 Oct 2022 23:20:12 +0200 Subject: [PATCH] zsh: backport https://zsh.org/workers/50278 --- srcpkgs/zsh/patches/50278.patch | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 srcpkgs/zsh/patches/50278.patch diff --git a/srcpkgs/zsh/patches/50278.patch b/srcpkgs/zsh/patches/50278.patch new file mode 100644 index 000000000000..48c09ef6df07 --- /dev/null +++ b/srcpkgs/zsh/patches/50278.patch @@ -0,0 +1,76 @@ +commit 1e52cd968d7ffd9da3249ef01f6c41f8b29e4df3 +Author: Bart Schaefer +Date: Sun May 22 15:50:45 2022 -0700 + + 50278: use `man -w` in preference to `manpath`; fix caching and precedence of -M + +diff --git a/Completion/Unix/Command/_man b/Completion/Unix/Command/_man +index dba1d13dc..190811e41 100644 +--- a/Completion/Unix/Command/_man ++++ b/Completion/Unix/Command/_man +@@ -16,7 +16,7 @@ + _man() { + local dirs expl mrd awk variant noinsert + local -a context line state state_descr args modes +- local -aU sects ++ local -aU sects _manpath + local -A opt_args val_args sect_descs + + if [[ $service == man ]]; then +@@ -168,29 +168,40 @@ _man() { + _arguments -s -S : $args '*::: :->man' && return 0 + [[ -n $state ]] || return 1 + ++ # Override man path ++ [[ -n ${opt_args[-M]} ]] && ++ _manpath=( ${(s<:>)opt_args[-M]} ) ++ ++ # Restore cached man path to avoid $(manpath) if we can + if (( ! $#_manpath )); then +- local mp +- mp=( ${(s.:.)$(manpath 2>/dev/null)} ) +- [[ "$mp" == *:* ]] && mp=( ${(s.:.)mp} ) +- if (( $#mp )); then +- _manpath=( $mp ) +- elif (( $#manpath )); then +- _manpath=( $manpath ) ++ if (( ! $+_manpath_cache )); then ++ typeset -gHA _manpath_cache + fi ++ if [[ -z $_manpath_cache[$MANPATH] ]]; then ++ local mp ++ mp=( ${(s.:.)$({ command man -w || manpath } 2>/dev/null)} ) ++ [[ "$mp" == *:* ]] && mp=( ${(s.:.)mp} ) ++ if (( $#mp )); then ++ _manpath_cache[$MANPATH]=${(j.:.)mp} ++ elif (( $#manpath )); then ++ _manpath_cache[$MANPATH]=$MANPATH ++ fi ++ fi ++ _manpath=( ${(s.:.)_manpath_cache[$MANPATH]} ) ++ fi ++ ++ # Augment man path ++ if [[ -n ${opt_args[-m]} ]]; then ++ [[ $variant == (netbsd|openbsd)* ]] && ++ _manpath+=( ${(s<:>)opt_args[-m]} ) ++ elif [[ $variant == aix* ]]; then ++ # _manpath declared -U so no need to test ++ _manpath+=( /usr/share/man ) + fi + + (( $#_manpath )) || + _manpath=( /usr/man(-/) /(opt|usr)/(pkg|dt|share|X11R6|local)/(cat|)man(-/) ) + +- # Override man path +- [[ -n ${opt_args[-M]} ]] && +- _manpath=( ${(s<:>)opt_args[-M]} ) +- +- # Augment man path +- [[ $variant == (netbsd|openbsd)* ]] && +- [[ -n ${opt_args[-m]} ]] && +- _manpath+=( ${(s<:>)opt_args[-m]} ) +- + # `sman' is the SGML manual directory for Solaris 7. + # 1M is system administrator commands on SVR4 +