Browse Source

fix(command-not-found): show error in Ubuntu when no package is found (#9418)

赵崇延 3 years ago
parent
commit
fa1911f89e
1 changed files with 19 additions and 5 deletions
  1. 19 5
      plugins/command-not-found/command-not-found.plugin.zsh

+ 19 - 5
plugins/command-not-found/command-not-found.plugin.zsh

@@ -2,7 +2,22 @@
 # as seen in https://www.porcheron.info/command-not-found-for-zsh/
 # this is installed in Ubuntu
 
-[[ -e /etc/zsh_command_not_found ]] && source /etc/zsh_command_not_found
+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
+    }
+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
@@ -10,13 +25,12 @@
 
 # Fedora command-not-found support
 if [ -f /usr/libexec/pk-command-not-found ]; then
-    command_not_found_handler () {
+    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
+        if [ $runcnf -eq 1 ]; then
             /usr/libexec/pk-command-not-found $@
             retval=$?
         fi
@@ -32,7 +46,7 @@ fi
 
 # NixOS command-not-found support
 if [ -x /run/current-system/sw/bin/command-not-found ]; then
-    command_not_found_handler () {
+    command_not_found_handler() {
         /run/current-system/sw/bin/command-not-found $@
     }
 fi