Diff
1diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
2index bf5902fc8c60930dbc331d8a821fa27e47614ea3..c389fc963bc9ce2d33e292f8042604a1508e5872 100644
3--- a/oh-my-zsh.sh
4+++ b/oh-my-zsh.sh
5@@ -1,8 +1,40 @@
6 # Protect against non-zsh execution of Oh My Zsh (use POSIX syntax here)
7 [ -n "$ZSH_VERSION" ] || {
8- # ANSI (\033[<code>m): 0: reset, 1: bold, 4: underline, 22: no bold, 24: no underline, 31: red
9- printf "\033[1;31mERROR:\033[22m Oh My Zsh can't be loaded from: \033[1m${0#-}\033[22m. " >&2
10- printf "You need to run \033[1;4mzsh\033[22;24m instead.\033[0m\n" >&2
11+ # ANSI formatting function (\033[<code>m)
12+ # 0: reset, 1: bold, 4: underline, 22: no bold, 24: no underline, 31: red, 33: yellow
13+ f() {
14+ [ $# -gt 0 ] || return
15+ IFS=";" printf "\033[%sm" $*
16+ }
17+ # If stdout is not a terminal ignore all formatting
18+ [ -t 1 ] || f() { :; }
19+
20+ ptree() {
21+ # Get process tree of the current process
22+ pid=$$; pids="$pid"
23+ while [ ${pid-0} -ne 1 ] && ppid=$(ps -e -o pid,ppid | awk "\$1 == $pid { print \$2 }"); do
24+ pids="$pids $pid"; pid=$ppid
25+ done
26+
27+ # Show process tree
28+ case "$(uname)" in
29+ Linux) ps -o ppid,pid,command -f -p $pids 2>/dev/null ;;
30+ Darwin|*) ps -o ppid,pid,command -p $pids 2>/dev/null ;;
31+ esac
32+
33+ # If ps command failed, try Busybox ps
34+ [ $? -eq 0 ] || ps -o ppid,pid,comm | awk "NR == 1 || index(\"$pids\", \$2) != 0"
35+ }
36+
37+ {
38+ shell=$(ps -o pid,comm | awk "\$1 == $$ { print \$2 }")
39+ printf "$(f 1 31)Error:$(f 22) Oh My Zsh can't be loaded from: $(f 1)${shell}$(f 22). "
40+ printf "You need to run $(f 1)zsh$(f 22) instead.$(f 0)\n"
41+ printf "$(f 33)Here's the process tree:$(f 22)\n\n"
42+ ptree
43+ printf "$(f 0)\n"
44+ } >&2
45+
46 return 1
47 }
48