Browse Source

refactor(adben): refactor theme and degrade gracefully on missing dependencies (#9734)

Marc Cornellà 4 years ago
parent
commit
69507c9518
1 changed files with 57 additions and 45 deletions
  1. 57 45
      themes/adben.zsh-theme

+ 57 - 45
themes/adben.zsh-theme

@@ -29,11 +29,13 @@
 # # This theme's look and feel is based on the Aaron Toponce's zsh theme, more info:
 # # https://pthree.org/2008/11/23/727/
 # # enjoy!
+
 ########## COLOR ###########
 for COLOR in CYAN WHITE YELLOW MAGENTA BLACK BLUE RED DEFAULT GREEN GREY; do
-    eval PR_$COLOR='%{$fg[${(L)COLOR}]%}'
-    eval PR_BRIGHT_$COLOR='%{$fg_bold[${(L)COLOR}]%}'
+  eval PR_$COLOR='%{$fg[${(L)COLOR}]%}'
+  eval PR_BRIGHT_$COLOR='%{$fg_bold[${(L)COLOR}]%}'
 done
+
 PR_RESET="%{$reset_color%}"
 RED_START="${PR_RESET}${PR_GREY}<${PR_RESET}${PR_RED}<${PR_BRIGHT_RED}<${PR_RESET} "
 RED_END="${PR_RESET}${PR_BRIGHT_RED}>${PR_RESET}${PR_RED}>${PR_GREY}>${PR_RESET} "
@@ -44,14 +46,14 @@ DIVISION="${PR_RESET}${PR_RED} < ${PR_RESET}"
 VCS_DIRTY_COLOR="${PR_RESET}${PR_YELLOW}"
 VCS_CLEAN_COLOR="${PR_RESET}${PR_GREEN}"
 VCS_SUFIX_COLOR="${PR_RESET}${PR_RED}› ${PR_RESET}"
-# ########## COLOR ###########
-# ########## SVN ###########
+
+########## SVN ###########
 ZSH_THEME_SVN_PROMPT_PREFIX="${PR_RESET}${PR_RED}‹svn:"
 ZSH_THEME_SVN_PROMPT_SUFFIX=""
 ZSH_THEME_SVN_PROMPT_DIRTY="${VCS_DIRTY_COLOR} ✘${VCS_SUFIX_COLOR}"
 ZSH_THEME_SVN_PROMPT_CLEAN="${VCS_CLEAN_COLOR} ✔${VCS_SUFIX_COLOR}"
-# ########## SVN ###########
-# ########## GIT ###########
+
+########## GIT ###########
 ZSH_THEME_GIT_PROMPT_PREFIX="${PR_RESET}${PR_RED}‹git:"
 ZSH_THEME_GIT_PROMPT_SUFFIX=""
 ZSH_THEME_GIT_PROMPT_DIRTY="${VCS_DIRTY_COLOR} ✘${VCS_SUFIX_COLOR}"
@@ -62,53 +64,63 @@ ZSH_THEME_GIT_PROMPT_DELETED="${PR_RESET}${PR_YELLOW} ✖${PR_RESET}"
 ZSH_THEME_GIT_PROMPT_RENAMED="${PR_RESET}${PR_YELLOW} ➜${PR_RESET}"
 ZSH_THEME_GIT_PROMPT_UNMERGED="${PR_RESET}${PR_YELLOW} ═${PR_RESET}"
 ZSH_THEME_GIT_PROMPT_UNTRACKED="${PR_RESET}${PR_YELLOW} ✭${PR_RESET}"
-# ########## GIT ###########
-function precmd {
-    #gets the fortune
-    ps1_fortune () {
-        #Choose from all databases, regardless of whether they are considered "offensive"
-        fortune -a
-    }
-    #obtains the tip
-    ps1_command_tip () {
-        wget -qO - http://www.commandlinefu.com/commands/random/plaintext | sed 1d | sed '/^$/d'
-    }
-    prompt_header () {
-        if [[ "true" == "$ENABLE_COMMAND_TIP" ]]; then
-            ps1_command_tip
-        else
-            ps1_fortune
-        fi
-    }
-    PROMPT_HEAD="${RED_START}${PR_YELLOW}$(prompt_header)${PR_RESET}"
-    # set a simple variable to show when in screen
-    if [[ -n "${WINDOW}" ]]; then
-        SCREEN=""
+
+# Get a fortune quote
+ps1_fortune() {
+  (( ${+commands[fortune]} )) && fortune
+}
+
+# Obtain a command tip
+ps1_command_tip() {
+  {
+    if (( ${+commands[wget]} )); then
+      command wget -qO- https://www.commandlinefu.com/commands/random/plaintext
+    elif (( ${+commands[curl]} )); then
+      command curl -fsL https://www.commandlinefu.com/commands/random/plaintext
     fi
+  } | sed 1d | sed '/^$/d'
 }
 
-# Context: user@directory or just directory
-prompt_context () {
-    if [[ "$USERNAME" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
-        echo -n "${PR_RESET}${PR_RED}$USERNAME@%m${PR_RESET}${PR_BRIGHT_YELLOW}%~%<<${PR_RESET}"
+function precmd_adben {
+  prompt_header() {
+    if [[ "$ENABLE_COMMAND_TIP" = true ]]; then
+      ps1_command_tip
     else
-        echo -n "${PR_RESET}${PR_BRIGHT_YELLOW}%~%<<${PR_RESET}"
+      ps1_fortune
     fi
+  }
+
+  PROMPT_HEAD="${RED_START}${PR_YELLOW}$(prompt_header)${PR_RESET}"
+
+  # set a simple variable to show when in screen
+  if [[ -n "${WINDOW}" ]]; then
+    SCREEN=""
+  fi
 }
 
-set_prompt () {
-    # required for the prompt
-    setopt prompt_subst
-    autoload zsh/terminfo
+# Context: user@directory or just directory
+prompt_context() {
+  if [[ "$USERNAME" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
+    echo -n "${PR_RESET}${PR_RED}$USERNAME@%m${PR_RESET}${PR_BRIGHT_YELLOW}%~%<<${PR_RESET}"
+  else
+    echo -n "${PR_RESET}${PR_BRIGHT_YELLOW}%~%<<${PR_RESET}"
+  fi
+}
 
-    # ######### PROMPT #########
-    PROMPT='${PROMPT_HEAD}
+########## SETUP ###########
+
+# Required for the prompt
+setopt prompt_subst
+autoload zsh/terminfo
+
+# Prompt
+PROMPT='${PROMPT_HEAD}
 ${RED_START}$(prompt_context)
 ${GREEN_START_P1}'
-    RPROMPT='${PR_RESET}$(git_prompt_info)$(svn_prompt_info)${PR_YELLOW}%D{%R.%S %a %b %d %Y} ${GREEN_END}${PR_RESET}'
-    # Matching continuation prompt
-    PROMPT2='${GREEN_BASE_START}${PR_RESET} %_ ${GREEN_BASE_START}${PR_RESET} '
-    # ######### PROMPT #########
-}
+RPROMPT='${PR_RESET}$(git_prompt_info)$(svn_prompt_info)${PR_YELLOW}%D{%R.%S %a %b %d %Y} ${GREEN_END}${PR_RESET}'
+# Matching continuation prompt
+PROMPT2='${GREEN_BASE_START}${PR_RESET} %_ ${GREEN_BASE_START}${PR_RESET} '
 
-set_prompt
+# Prompt head
+autoload -Uz add-zsh-hook
+add-zsh-hook precmd precmd_adben