From 1c3da8df45d43a1769eecf9197b3b69def277c0b Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Tue, 24 Dec 2019 13:19:45 -0500 Subject: [PATCH] Migrate to .zsh-theme and zim:git-info, significantly simplify code --- .gitignore | 1 + fred-prompt.zsh-theme | 41 +++++++++++++++++ prompt_fred_setup | 101 ------------------------------------------ 3 files changed, 42 insertions(+), 101 deletions(-) create mode 100644 .gitignore create mode 100644 fred-prompt.zsh-theme delete mode 100644 prompt_fred_setup diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..382c56b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/*.zsh-theme.zwc* diff --git a/fred-prompt.zsh-theme b/fred-prompt.zsh-theme new file mode 100644 index 0000000..16b7cdb --- /dev/null +++ b/fred-prompt.zsh-theme @@ -0,0 +1,41 @@ +# -*-mode: sh-*- +# My mess of various themes + +setopt nopromptbang promptcr promptpercent promptsp promptsubst + +if [[ $(locale charmap) != UTF-8 || "$TERM" == linux ]] +then + ERROR_CHAR='<' + DIRTY_CHAR='^' + STASH_CHAR='≡' # ASCII 240 + PREFIX='$' +else + ERROR_CHAR='⏎' + DIRTY_CHAR="∆" # U+2206 + STASH_CHAR='📚' # U+1F4DA + PREFIX='❱' # U+2771 +fi + +typeset -gA git_info +if (( ${+functions[git-info]} )); then + zstyle ':zim:git-info' verbose yes + zstyle ':zim:git-info:clean' format '%F{green}' + zstyle ':zim:git-info:branch' format '%b' + zstyle ':zim:git-info:commit' format '%c' + zstyle ':zim:git-info:action' format '%b%f:%F{yellow}%B%a' + zstyle ':zim:git-info:stashed' format "%S${STASH_CHAR}" + zstyle ':zim:git-info:dirty' format '%F{yellow}${DIRTY_CHAR}%f' + zstyle ':zim:git-info:keys' format \ + 'prompt' ' %F{yellow}%C%b%c%f%f%s' \ + 'rprompt' '%D%S' + + autoload -Uz add-zsh-hook && add-zsh-hook precmd git-info +fi + +# Define prompts. +local userHost='%B%(!.%F{red}.%F{green})%n@${SSH_CLIENT:+%F{blue\}}%m%f%b' # user@host +local pathString='%F{cyan}%$((($COLUMNS-20) / 4 ))<..<%~%f' # /path/to/wd +local gitInfo='${(e)git_info[prompt]}' # branch:action +local promptChar='%B%(!.%F{red}.%F{cyan})${PREFIX}%f%b' +PS1="$userHost $pathString$gitInfo$promptChar " +RPS1='${editor_info[overwrite]}%(?:: %F{red}%?'$ERROR_CHAR'%f) ${(e)git_info[rprompt]}' diff --git a/prompt_fred_setup b/prompt_fred_setup deleted file mode 100644 index 0e709f3..0000000 --- a/prompt_fred_setup +++ /dev/null @@ -1,101 +0,0 @@ -# -*-mode: sh-*- -# My mess of various themes - -setopt PROMPT_SUBST #allows prompt substitutions -if [[ $(locale charmap) != UTF-8 || "$TERM" == linux ]] -then - ERROR_CHAR='' - GIT_DIRTY_CHAR="*" - PREFIX='$' - LCOLOR="" -else - ERROR_CHAR='⏎' - GIT_DIRTY_CHAR="∆" # U+2206 - PREFIX="❱" # U+2771 - LCOLOR="$fg_bold[black]" -fi - -prompt_context() { - if [ -n "$SSH_CLIENT" ] - then - host=%B%F{blue}%m%f%b - else - host=%B%F{green}%m%f%b - fi - print "%B%(!.%F{red}.%F{green})%n@${host}" -} - -prompt_git_dirty () { - [[ "$(git rev-parse --is-inside-work-tree)" == "true" && \ - -n "$(git status --porcelain --ignore-submodules)" ]] -} - -rprompt_git() { - ref=${vcs_info_msg_0_} - if [[ -n ${ref} ]]; then - if prompt_git_dirty; then - print '%F{yellow}'$GIT_DIRTY_CHAR'%f' - fi - fi -} - -# Git: branch/detached head, dirty status -prompt_git() { - local color ref - ref=${vcs_info_msg_0_} - if [[ -n ${ref} ]]; then - if prompt_git_dirty; then - color=yellow - else - color=green - fi - print -n " %F{${color}}${ref}" - fi -} - -prompt_prefix() { - print "%(!. %B%F{red}#%f%b.)%B%F{cyan}${PREFIX}%f%b " -} - -function prompt_fred_precmd { - setopt LOCAL_OPTIONS - unsetopt XTRACE KSH_ARRAYS - - (( PWDWIDTH = ($COLUMNS-20) * 1/4 )) - vcs_info - - #Terminal Title - print -Pn "\e]0;%~:zsh\a" -} - -function prompt_fred_preexec { - #Terminal Title - print -Pn '\e]0;%~:${1}\a' -} - -function prompt_fred_setup { - setopt LOCAL_OPTIONS - unsetopt XTRACE KSH_ARRAYS - prompt_opts=(cr percent subst) - - # Load required functions. - autoload -Uz add-zsh-hook - autoload -Uz vcs_info - - zstyle ':vcs_info:*' enable git - zstyle ':vcs_info:*' check-for-changes false - zstyle ':vcs_info:git*' formats "%b%f" - zstyle ':vcs_info:git*' actionformats "%b%f:%F{yellow}%B%a" - - # Add hook for calling precmd before each command. - add-zsh-hook precmd prompt_fred_precmd - add-zsh-hook preexec prompt_fred_preexec - - # Define prompts. - PROMPT='$(prompt_context)%F{cyan} %${PWDWIDTH}<..<%~%f$(prompt_git)$(prompt_prefix)' - RPROMPT='${editor_info[overwrite]}%(?:: %F{red}%?'$ERROR_CHAR'%f) $(rprompt_git)' - SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' -} - -prompt_fred_setup "$@" -