Browse Source

man: look for man page for subcommands (#8798)

wurza 3 years ago
parent
commit
25d0b2dfbd
1 changed files with 14 additions and 8 deletions
  1. 14 8
      plugins/man/man.plugin.zsh

+ 14 - 8
plugins/man/man.plugin.zsh

@@ -16,16 +16,22 @@ man-command-line() {
     # if there is no command typed, use the last command
     [[ -z "$BUFFER" ]] && zle up-history
 
-    # prepend man to only the first part of the typed command
+    # if typed command begins with man, do nothing
+    [[ "$BUFFER" = man\ * ]] && return
+
+    # get command and possible subcommand
     # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags
-    [[ "$BUFFER" != man\ * ]] && BUFFER="man ${${(Az)BUFFER}[1]}"
+    local -a args
+    args=(${${(Az)BUFFER}[1]} ${${(Az)BUFFER}[2]})
+
+    # check if man page exists for command and first argument
+    if man "${args[1]}-${args[2]}" >/dev/null 2>&1; then
+        BUFFER="man $args"
+    else
+        BUFFER="man ${args[1]}"
+    fi
 }
+
 zle -N man-command-line
 # Defined shortcut keys: [Esc]man
 bindkey "\e"man man-command-line
-
-
-# ------------------------------------------------------------------------------
-# Also, you might want to use man-preview included in 'osx' plugin
-# just substitute "man" in the function with "man-preview" after you included OS X in
-# the .zshrc