mirror of
https://github.com/dcarrillo/prezto.git
synced 2024-11-16 02:41:13 +00:00
command-not-found: Restore idiomatic homebrewed handler loading on MacOS
As is the convention in prezto, we cache the command-not-found handler to avoid incurring the performance penalty of loading ruby interpreter on every call. This restores the 'Homebrew way' of loading command-not-found handler. Further, the formally recommended command lookup mechanism in Homebrew (viz., `brew command command-not-found-init`) is ruby based and is super slow. To avoid performance penalty, we `find` it ourselves from `TAP_DIRECTORY` defined internally in Homebrew. This also reinstates support for custom taps or non-standard Homebrew location.
This commit is contained in:
parent
3de1e24965
commit
2286662b80
@ -12,9 +12,28 @@ if [[ -s '/etc/zsh_command_not_found' ]]; then
|
|||||||
# Load command-not-found on Arch Linux-based distributions.
|
# Load command-not-found on Arch Linux-based distributions.
|
||||||
elif [[ -s '/usr/share/doc/pkgfile/command-not-found.zsh' ]]; then
|
elif [[ -s '/usr/share/doc/pkgfile/command-not-found.zsh' ]]; then
|
||||||
source '/usr/share/doc/pkgfile/command-not-found.zsh'
|
source '/usr/share/doc/pkgfile/command-not-found.zsh'
|
||||||
# Load command-not-found on macOS when homebrew tap is configured.
|
# Load command-not-found on macOS when Homebrew tap is configured.
|
||||||
elif [[ -s '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh' ]]; then
|
# To avoid performance penalty, we do not use Homebrew's ruby based command
|
||||||
source '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh'
|
# lookup mechanism (viz., `brew command command-not-found-init`) and instead
|
||||||
|
# `find` it ourselves from `TAP_DIRECTORY` defined internally in Homebrew.
|
||||||
|
elif (( $+commands[brew] )); then
|
||||||
|
cnf_command="$(brew --repository 2> /dev/null)"/Library/Taps/homebrew/homebrew-command-not-found/cmd/brew-command-not-found-init.rb
|
||||||
|
if [[ -s "$cnf_command" ]]; then
|
||||||
|
cache_file="${TMPDIR:-/tmp}/prezto-brew-command-not-found-cache.$UID.zsh"
|
||||||
|
|
||||||
|
if [[ "$cnf_command" -nt "$cache_file" \
|
||||||
|
|| "${ZDOTDIR:-$HOME}/.zpreztorc" -nt "$cache_file" \
|
||||||
|
|| ! -s "$cache_file" ]]; then
|
||||||
|
# brew command-not-found-init is slow; cache its output.
|
||||||
|
brew command-not-found-init >! "$cache_file" 2> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
source "$cache_file"
|
||||||
|
|
||||||
|
unset cache_file
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset cnf_command
|
||||||
# Return if requirements are not found.
|
# Return if requirements are not found.
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
|
Loading…
Reference in New Issue
Block a user