Browse Source

fix(init): exit gracefully if on non-zsh emulation mode (#11874)

Fixes #11686
Marc Cornellà 8 months ago
parent
commit
30f0d59188
1 changed files with 18 additions and 9 deletions
  1. 18 9
      oh-my-zsh.sh

+ 18 - 9
oh-my-zsh.sh

@@ -1,14 +1,14 @@
+# ANSI formatting function (\033[<code>m)
+# 0: reset, 1: bold, 4: underline, 22: no bold, 24: no underline, 31: red, 33: yellow
+omz_f() {
+  [ $# -gt 0 ] || return
+  IFS=";" printf "\033[%sm" $*
+}
+# If stdout is not a terminal ignore all formatting
+[ -t 1 ] || omz_f() { :; }
+
 # Protect against non-zsh execution of Oh My Zsh (use POSIX syntax here)
 [ -n "$ZSH_VERSION" ] || {
-  # ANSI formatting function (\033[<code>m)
-  # 0: reset, 1: bold, 4: underline, 22: no bold, 24: no underline, 31: red, 33: yellow
-  omz_f() {
-    [ $# -gt 0 ] || return
-    IFS=";" printf "\033[%sm" $*
-  }
-  # If stdout is not a terminal ignore all formatting
-  [ -t 1 ] || omz_f() { :; }
-
   omz_ptree() {
     # Get process tree of the current process
     pid=$$; pids="$pid"
@@ -38,6 +38,15 @@
   return 1
 }
 
+# Check if in emulation mode, if so early return
+# https://github.com/ohmyzsh/ohmyzsh/issues/11686
+[[ "$(emulate)" = zsh ]] || {
+  printf "$(omz_f 1 31)Error:$(omz_f 22) Oh My Zsh can't be loaded in \`$(emulate)\` emulation mode.$(omz_f 0)\n" >&2
+  return 1
+}
+
+unset -f omz_f
+
 # If ZSH is not defined, use the current script's directory.
 [[ -z "$ZSH" ]] && export ZSH="${${(%):-%x}:a:h}"