-rw-r--r-- themes/ban.zsh-theme
1 # 2 # ban zsh theme 3 # 4 5 # Segment drawing 6 7 # A few utility functions to make it easy and re-usable to draw segmented prompts 8 9 CURRENT_BG='NONE' 10 11 # Special Powerline characters 12 () { 13 local LC_ALL="" LC_CTYPE="en_US.UTF-8" 14 15 # prompt segment shape: arrow or square 16 if $IS_SSH 17 then 18 SEGMENT_SEPARATOR_L=$'\ue0b0' 19 SEGMENT_SEPARATOR_R=$'' 20 SEGMENT_END=$'\ue0b0' 21 else 22 SEGMENT_SEPARATOR_L=$'▋▌' 23 #SEGMENT_SEPARATOR_R=$'' 24 #SEGMENT_END=$'' 25 fi 26 } 27 28 # Begin a segment 29 # Takes two arguments, background and foreground. Both can be omitted, 30 # rendering default background/foreground. 31 prompt_segment() { 32 local bg fg 33 [[ -n $1 ]] && bg="%K{$1}" || bg="%k" 34 [[ -n $2 ]] && fg="%F{$2}" || fg="%f" 35 if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then 36 echo -n "%{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%}" 37 else 38 echo -n "%{$bg%}%{$fg%}" 39 fi 40 CURRENT_BG=$1 41 [[ -n $3 ]] && echo -n $3 42 } 43 44 # End the prompt, closing any open segments 45 prompt_end() { 46 if [[ -n $CURRENT_BG ]]; then 47 echo -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_END" 48 else 49 echo -n "%{%k%}" 50 fi 51 echo -n "%{%f%}" 52 CURRENT_BG='' 53 } 54 55 prompt_context() { 56 if $IS_SSH; then 57 prompt_segment green black " %(!.%{%F{yellow}%}.)$USER@$HOST " 58 elif [[ $EUID -eq 0 ]]; then 59 prompt_segment red black " %(!.%{%F{black}%}.)$USER@$HOST " 60 fi 61 } 62 63 #source $HOME/.zsh/gitstatus/gitstatus.plugin.zsh 64 #gitstatus_start MY 65 #prompt_git() { 66 # local PL_BRANCH_CHAR 67 # () { 68 # local LC_ALL="" LC_CTYPE="en_US.UTF-8" 69 # PL_BRANCH_CHAR=$'\ue0a0' 70 # } 71 # 72 # gitstatus_query MY || return 1 # error 73 # [[ $VCS_STATUS_RESULT == ok-sync ]] || return 0 # not a git repo 74 # 75 # local clean='%F{076}' # green foreground 76 # local untracked='%F{014}' # teal foreground 77 # local modified='%F{011}' # yellow foreground 78 # 79 # local p 80 # if (( VCS_STATUS_HAS_STAGED || VCS_STATUS_HAS_UNSTAGED )); then 81 # p+=$modified 82 # elif (( VCS_STATUS_HAS_UNTRACKED )); then 83 # p+=$untracked 84 # else 85 # p+=$clean 86 # fi 87 # p+=${${VCS_STATUS_LOCAL_BRANCH:-@${VCS_STATUS_COMMIT}}//\%/%%} # escape % 88 # 89 # #[[ -n $VCS_STATUS_TAG ]] && p+="#${VCS_STATUS_TAG//\%/%%}" # escape % 90 # [[ $VCS_STATUS_HAS_STAGED == 1 ]] && p+="${modified}+" 91 # [[ $VCS_STATUS_HAS_UNSTAGED == 1 ]] && p+="${modified}!" 92 # [[ $VCS_STATUS_HAS_UNTRACKED == 1 ]] && p+="${untracked}?" 93 # [[ $VCS_STATUS_COMMITS_AHEAD -gt 0 ]] && p+="${clean} ⇡${VCS_STATUS_COMMITS_AHEAD}" 94 # [[ $VCS_STATUS_COMMITS_BEHIND -gt 0 ]] && p+="${clean} ⇣${VCS_STATUS_COMMITS_BEHIND}" 95 # #[[ $VCS_STATUS_STASHES -gt 0 ]] && p+="${clean} *${VCS_STATUS_STASHES}" 96 # 97 # prompt_segment default green "${p}" 98 #} 99 100 101 prompt_dir() { 102 prompt_segment magenta 10 ' %4~ ' 103 #dir=$(print -Pn '%3~/') 104 #[[ "${(q)dir:0:2}" == '\~/' ]] && dir="%F{12}🏠%F{black}${dir:1}" 105 #echo -n " $dir " 106 } 107 108 109 prompt_mes() { 110 if [[ $RETVAL -ne 0 ]] 111 then 112 #prompt_segment red black ' ▶ ' 113 prompt_segment black red '▍' 114 else 115 prompt_segment black magenta '▍' 116 fi 117 } 118 119 120 prompt_virtualenv() { 121 local virtualenv_path="$VIRTUAL_ENV" 122 if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then 123 prompt_segment red black " (`basename $virtualenv_path`) " 124 fi 125 } 126 127 128 if $IS_SSH || $IS_DOCKER 129 then 130 tmux_following_colour=green 131 elif [[ $EUID -eq 0 ]] 132 then 133 tmux_following_colour=red 134 else 135 tmux_following_colour=magenta 136 fi 137 if $IS_TMUX 138 then 139 #tmux_indicator=$'\ue0b0' 140 tmux_indicator=⬜ 141 else 142 tmux_indicator='' 143 fi 144 prompt_tmux() { 145 local SEGMENT_SEPARATOR='' 146 [[ -n "$tmux_indicator" ]] || return 0 147 prompt_segment $tmux_following_colour 11 "$tmux_indicator" 148 } 149 150 151 export KEYTIMEOUT=1 # reduce delay to 0.1s 152 bindkey -v 153 prompt_vi(){ 154 # only add to prompt if not empty 155 [[ -n $VIM_PROMPT ]] && prompt_segment default white $VIM_PROMPT 156 } 157 zle-line-init() { zle -K viins; } 158 zle -N zle-line-init 159 160 161 build_prompt() { 162 RETVAL=$? 163 local SEGMENT_SEPARATOR=$SEGMENT_SEPARATOR_L 164 prompt_tmux 165 prompt_context 166 prompt_dir 167 prompt_mes 168 prompt_end 169 } 170 171 build_rprompt() { 172 RETVAL=$? 173 local SEGMENT_SEPARATOR=$SEGMENT_SEPARATOR_R 174 prompt_virtualenv 175 prompt_vi 176 #prompt_git 177 prompt_end 178 } 179 180 PROMPT='%{%f%b%k%}$(build_prompt) ' 181 RPROMPT='%{%f%b%k%}$(build_rprompt)' 182 183 # redraw on mode change 184 zle-keymap-select() { 185 if [[ $KEYMAP == vicmd ]]; then 186 printf "\033[2 q" # block cursor 187 VIM_PROMPT=" -- NORMAL -- " 188 else 189 printf "\033[4 q" # underline. Change 4 to 6 for vertical line 190 VIM_PROMPT="" 191 fi 192 193 zle reset-prompt 194 zle -R 195 } 196 zle -N zle-keymap-select 197