浏览代码

chucknorris: check for strfile dependency
Gives a better error message than "command not found: strfile", because
it's not obvious to many users that strfile is part of fortune.
Also handles the weird /usr/sbin install location for strfile on Cygwin.

Andrew Janke 9 年之前
父节点
当前提交
a2e01e9a87
共有 1 个文件被更改,包括 20 次插入3 次删除
  1. 20 3
      plugins/chucknorris/chucknorris.plugin.zsh

+ 20 - 3
plugins/chucknorris/chucknorris.plugin.zsh

@@ -1,11 +1,28 @@
+# chucknorris: Chuck Norris fortunes
+
 # Automatically generate or update Chuck's compiled fortune data file
 # Automatically generate or update Chuck's compiled fortune data file
-DIR=${0:h}/fortunes
+# $0 must be used outside a local function. This variable name is unlikly to collide.
+CHUCKNORRIS_PLUGIN_DIR=${0:h}
+
+() {
+local DIR=$CHUCKNORRIS_PLUGIN_DIR/fortunes
 if [[ ! -f $DIR/chucknorris.dat ]] || [[ $DIR/chucknorris.dat -ot $DIR/chucknorris ]]; then
 if [[ ! -f $DIR/chucknorris.dat ]] || [[ $DIR/chucknorris.dat -ot $DIR/chucknorris ]]; then
-  strfile $DIR/chucknorris $DIR/chucknorris.dat
+  # For some reason, Cygwin puts strfile in /usr/sbin, which is not on the path by default
+  local strfile=strfile
+  if ! which strfile &>/dev/null && [[ -f /usr/sbin/strfile ]]; then
+    strfile=/usr/sbin/strfile
+  fi
+  if which $strfile &> /dev/null; then
+    $strfile $DIR/chucknorris $DIR/chucknorris.dat >/dev/null
+  else
+    echo "[oh-my-zsh] chucknorris depends on strfile, which is not installed" >&2
+    echo "[oh-my-zsh] strfile is often provided as part of the 'fortune' package" >&2
+  fi
 fi
 fi
 
 
 # Aliases
 # Aliases
 alias chuck="fortune -a $DIR"
 alias chuck="fortune -a $DIR"
 alias chuck_cow="chuck | cowthink"
 alias chuck_cow="chuck | cowthink"
+}
 
 
-unset DIR
+unset CHUCKNORRIS_PLUGIN_DIR