refactor(command-not-found): clean up and reorganize logic

This commit is contained in:
Marc Cornellà 2021-04-09 21:21:57 +02:00
parent 8b55fb3b60
commit b54a6dab9c
No known key found for this signature in database
GPG key ID: 0314585E776A9C1B

View file

@ -1,55 +1,55 @@
# Uses the command-not-found package zsh support ## Platforms with a built-in command-not-found handler init file
# as seen in https://www.porcheron.info/command-not-found-for-zsh/
# this is installed in Ubuntu
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then for file (
function command_not_found_handler { # Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
# check because c-n-f could've been removed in the meantime /usr/share/doc/pkgfile/command-not-found.zsh
if [ -x /usr/lib/command-not-found ]; then # macOS (M1 and classic Homebrew): https://github.com/Homebrew/homebrew-command-not-found
/usr/lib/command-not-found -- "$1" /opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
return $? /usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
elif [ -x /usr/share/command-not-found/command-not-found ]; then ); do
/usr/share/command-not-found/command-not-found -- "$1" if [[ -r "$file" ]]; then
return $? source "$file"
else unset file
printf "zsh: command not found: %s\n" "$1" >&2 return 0
return 127 fi
fi done
return 0 unset file
}
## Platforms with manual command_not_found_handler() setup
# Debian and derivatives: https://launchpad.net/ubuntu/+source/command-not-found
if [[ -x /usr/lib/command-not-found || -x /usr/share/command-not-found/command-not-found ]]; then
command_not_found_handler() {
if [[ -x /usr/lib/command-not-found ]]; then
/usr/lib/command-not-found -- "$1"
return $?
elif [[ -x /usr/share/command-not-found/command-not-found ]]; then
/usr/share/command-not-found/command-not-found -- "$1"
return $?
else
printf "zsh: command not found: %s\n" "$1" >&2
return 127
fi
}
fi fi
# Arch Linux command-not-found support, you must have package pkgfile installed # Fedora: https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound
# https://wiki.archlinux.org/index.php/Pkgfile#.22Command_not_found.22_hook if [[ -x /usr/libexec/pk-command-not-found ]]; then
[[ -e /usr/share/doc/pkgfile/command-not-found.zsh ]] && source /usr/share/doc/pkgfile/command-not-found.zsh command_not_found_handler() {
if [[ -S /var/run/dbus/system_bus_socket && -x /usr/libexec/packagekitd ]]; then
/usr/libexec/pk-command-not-found -- "$@"
return $?
fi
# Fedora command-not-found support printf "zsh: command not found: %s\n" "$1" >&2
if [ -f /usr/libexec/pk-command-not-found ]; then return 127
command_not_found_handler() { }
runcnf=1
retval=127
[ ! -S /var/run/dbus/system_bus_socket ] && runcnf=0
[ ! -x /usr/libexec/packagekitd ] && runcnf=0
if [ $runcnf -eq 1 ]; then
/usr/libexec/pk-command-not-found $@
retval=$?
fi
return $retval
}
fi fi
# macOS command-not-found support # NixOS: https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/programs/command-not-found
# https://github.com/Homebrew/homebrew-command-not-found if [[ -x /run/current-system/sw/bin/command-not-found ]]; then
HB_CNF_HANDLER_SUFFIX="Library/Taps/homebrew/homebrew-command-not-found/handler.sh" command_not_found_handler() {
if [[ -s "/opt/homebrew/$HB_CNF_HANDLER_SUFFIX" ]]; then /run/current-system/sw/bin/command-not-found -- "$@"
source "/opt/homebrew/$HB_CNF_HANDLER_SUFFIX" }
elif [[ -s "/usr/local/Homebrew/$HB_CNF_HANDLER_SUFFIX" ]]; then
source "/usr/local/Homebrew/$HB_CNF_HANDLER_SUFFIX"
fi
# NixOS command-not-found support
if [ -x /run/current-system/sw/bin/command-not-found ]; then
command_not_found_handler() {
/run/current-system/sw/bin/command-not-found $@
}
fi fi