My zsh configuration
git clone https://github.com/m-col/zshrc
Files | Refs | Readme

-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