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 7 ' %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 export KEYTIMEOUT=1	# reduce delay to 0.1s
    128 bindkey -v
    129 prompt_vi(){
    130     # only add to prompt if not empty
    131     [[ -n $VIM_PROMPT ]] && prompt_segment default white $VIM_PROMPT
    132 }
    133 zle-line-init() { zle -K viins; }
    134 zle -N zle-line-init
    135 
    136 
    137 build_prompt() {
    138     RETVAL=$?
    139     local SEGMENT_SEPARATOR=$SEGMENT_SEPARATOR_L
    140     prompt_context
    141     prompt_dir
    142     prompt_mes
    143     prompt_end
    144 }
    145 
    146 build_rprompt() {
    147     RETVAL=$?
    148     local SEGMENT_SEPARATOR=$SEGMENT_SEPARATOR_R
    149     prompt_virtualenv
    150     prompt_vi
    151     #prompt_git
    152     prompt_end
    153 }
    154 
    155 PROMPT='%{%f%b%k%}$(build_prompt) '
    156 RPROMPT='%{%f%b%k%}$(build_rprompt)'
    157 
    158 # redraw on mode change
    159 zle-keymap-select() {
    160     if [[ $KEYMAP == vicmd ]]; then
    161 	printf "\033[2 q" # block cursor
    162 	VIM_PROMPT=" -- NORMAL -- "
    163     else
    164 	printf "\033[4 q" # underline. Change 4 to 6 for vertical line
    165 	VIM_PROMPT=""
    166     fi
    167 
    168     zle reset-prompt
    169     zle -R
    170 }
    171 zle -N zle-keymap-select
    172