summaryrefslogtreecommitdiff
path: root/plugins/command-not-found
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2021-04-28 18:07:03 -0600
committerTuowen Zhao <ztuowen@gmail.com>2021-04-28 18:07:03 -0600
commitb21e3c4f28d0d55947285dcebf9f91b580384b09 (patch)
tree3c4e0d946709ecb180e95610f16a8ae88179fb46 /plugins/command-not-found
parentb6baa00fd2d8e44b5abda20f95461942b615258c (diff)
parent63a7422d8dd5eb93c849df0ab9e679e6f333818a (diff)
downloadzsh-b21e3c4f28d0d55947285dcebf9f91b580384b09.tar.gz
zsh-b21e3c4f28d0d55947285dcebf9f91b580384b09.tar.bz2
zsh-b21e3c4f28d0d55947285dcebf9f91b580384b09.zip
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'plugins/command-not-found')
-rw-r--r--plugins/command-not-found/README.md1
-rw-r--r--plugins/command-not-found/command-not-found.plugin.zsh100
2 files changed, 56 insertions, 45 deletions
diff --git a/plugins/command-not-found/README.md b/plugins/command-not-found/README.md
index 1cf4ba66e..f267f0c89 100644
--- a/plugins/command-not-found/README.md
+++ b/plugins/command-not-found/README.md
@@ -28,5 +28,6 @@ It works out of the box with the command-not-found packages for:
- [macOS (Homebrew)](https://github.com/Homebrew/homebrew-command-not-found)
- [Fedora](https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound)
- [NixOS](https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/programs/command-not-found)
+- [Termux](https://github.com/termux/command-not-found)
You can add support for other platforms by submitting a Pull Request.
diff --git a/plugins/command-not-found/command-not-found.plugin.zsh b/plugins/command-not-found/command-not-found.plugin.zsh
index aea1e1b4c..cbf9a0a8e 100644
--- a/plugins/command-not-found/command-not-found.plugin.zsh
+++ b/plugins/command-not-found/command-not-found.plugin.zsh
@@ -1,52 +1,62 @@
-# Uses the command-not-found package zsh support
-# 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
- function command_not_found_handler {
- # check because c-n-f could've been removed in the meantime
- 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
- return 0
- }
+## Platforms with a built-in command-not-found handler init file
+
+for file (
+ # Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
+ /usr/share/doc/pkgfile/command-not-found.zsh
+ # macOS (M1 and classic Homebrew): https://github.com/Homebrew/homebrew-command-not-found
+ /opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
+ /usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
+); do
+ if [[ -r "$file" ]]; then
+ source "$file"
+ unset file
+ return 0
+ fi
+done
+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
-# Arch Linux command-not-found support, you must have package pkgfile installed
-# https://wiki.archlinux.org/index.php/Pkgfile#.22Command_not_found.22_hook
-[[ -e /usr/share/doc/pkgfile/command-not-found.zsh ]] && source /usr/share/doc/pkgfile/command-not-found.zsh
-
-# Fedora command-not-found support
-if [ -f /usr/libexec/pk-command-not-found ]; then
- 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
- }
+# Fedora: https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound
+if [[ -x /usr/libexec/pk-command-not-found ]]; then
+ 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
+
+ printf "zsh: command not found: %s\n" "$1" >&2
+ return 127
+ }
fi
-# OSX command-not-found support
-# https://github.com/Homebrew/homebrew-command-not-found
-if [[ -s '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh' ]]; then
- source '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh'
+# NixOS: https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/programs/command-not-found
+if [[ -x /run/current-system/sw/bin/command-not-found ]]; then
+ command_not_found_handler() {
+ /run/current-system/sw/bin/command-not-found -- "$@"
+ }
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 $@
- }
+# Termux: https://github.com/termux/command-not-found
+if [[ -x /data/data/com.termux/files/usr/libexec/termux/command-not-found ]]; then
+ command_not_found_handler() {
+ /data/data/com.termux/files/usr/libexec/termux/command-not-found -- "$1"
+ }
fi