From d9a75941c7348c5f13390738c58f86eb66b62fd1 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 2 Dec 2017 00:12:47 +0100 Subject: [PATCH 1/6] Added minimal2 prompt with git_info support --- .../prompt/functions/prompt_minimal2_setup | 1 + modules/prompt/themes/minimal2.zsh-theme | 207 ++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 120000 modules/prompt/functions/prompt_minimal2_setup create mode 100644 modules/prompt/themes/minimal2.zsh-theme diff --git a/modules/prompt/functions/prompt_minimal2_setup b/modules/prompt/functions/prompt_minimal2_setup new file mode 120000 index 0000000..ad14460 --- /dev/null +++ b/modules/prompt/functions/prompt_minimal2_setup @@ -0,0 +1 @@ +../themes/minimal2.zsh-theme \ No newline at end of file diff --git a/modules/prompt/themes/minimal2.zsh-theme b/modules/prompt/themes/minimal2.zsh-theme new file mode 100644 index 0000000..627e5d6 --- /dev/null +++ b/modules/prompt/themes/minimal2.zsh-theme @@ -0,0 +1,207 @@ +# +# Minimal² theme +# https://github.com/subnixr/minimal +# +# Requires the `git-info` zmodule to be included in the .zimrc file. + +# Switches +MINIMAL_PROMPT="${MINIMAL_PROMPT:-yes}" +MINIMAL_RPROMPT="${MINIMAL_RPROMPT:-yes}" +MINIMAL_MAGIC_ENTER="${MINIMAL_MAGIC_ENTER:-yes}" +MINIMAL_SSH_HOSTNAME="${MINIMAL_SSH_HOSTNAME:-yes}" + +# Parameters +MINIMAL_OK_COLOR="${MINIMAL_OK_COLOR:-2}" +MINIMAL_USER_CHAR="${MINIMAL_USER_CHAR:-λ}" +MINIMAL_INSERT_CHAR="${MINIMAL_INSERT_CHAR:-›}" +MINIMAL_NORMAL_CHAR="${MINIMAL_NORMAL_CHAR:-·}" +MINIMAL_PWD_LEN="${MINIMAL_PWD_LEN:-2}" +MINIMAL_PWD_CHAR_LEN="${MINIMAL_PWD_CHAR_LEN:-10}" +MINIMAL_MAGIC_ENTER_MARGIN="${MINIMAL_MAGIC_ENTER_MARGIN:- | }" + +# check if function exists +function _isfn { + type -w "$1" | grep -wq function +} + +# Extensions +if ! _isfn minimal_magic_output; then + function minimal_magic_output { + minimal_magic_output_base + } +fi + +if ! _isfn minimal_vcs; then + function minimal_vcs { + # git + if [[ -n ${git_info} ]]; then + print -n " ${(e)git_info[color]}${(e)git_info[prompt]}%{\e[0m%}" + fi + } +fi + +if ! _isfn minimal_env; then + function minimal_env { + # python virtual env + if [ -n "$VIRTUAL_ENV" ]; then + _venv="$(basename $VIRTUAL_ENV)" + echo -n "${_venv%%.*} " + fi + } +fi + +if ! _isfn minimal_ssh_hostname; then + function minimal_ssh_hostname { + if [[ "${MINIMAL_SSH_HOSTNAME}" == "yes" ]] && ([[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]); then + echo "$(hostname -s) " + fi + } +fi + +# Setup +autoload -U colors && colors +setopt prompt_subst + +_grey="\e[38;5;244m" +_greyp="%{$_grey%}" + +# Left Prompt +function minimal_lprompt { + local user_status="%{\e[%(1j.4.0);3%(0?.$MINIMAL_OK_COLOR.1)m%}\ +%(!.#.$MINIMAL_USER_CHAR)" + local kmstatus="$MINIMAL_INSERT_CHAR" + [ "$KEYMAP" = 'vicmd' ] && kmstatus="$MINIMAL_NORMAL_CHAR" + + echo -n "$user_status%{\e[0m%} $kmstatus" +} + +function minimal_ps2 { + local kmstatus="$MINIMAL_INSERT_CHAR" + local offset="$((${#_venv} + 2))" + [ "$KEYMAP" = 'vicmd' ] && kmstatus="$MINIMAL_NORMAL_CHAR" + + printf " %.0s" {1..$offset} + echo -n "$kmstatus" +} + +# Right Prompt +function minimal_path { + local w="%{\e[0m%}" + local cwd="%${MINIMAL_PWD_LEN}~" + local pi="" + local len="$MINIMAL_PWD_CHAR_LEN" + [ "$len" -lt 4 ] && len=4 + local hlen=$((len / 2 - 1)) + cwd="${(%)cwd}" + cwd=("${(@s:/:)cwd}") + + for i in {1..${#cwd}}; do + pi="$cwd[$i]" + [ "${#pi}" -gt "$len" ] && cwd[$i]="${pi:0:$hlen}$w..$_greyp${pi: -$hlen}" + done + + echo -n "$_greyp${(j:/:)cwd//\//$w/$_greyp}$w" +} + +# Magic Enter +function minimal_infoline { + local last_err="$1" + local w="\e[0m" + local rn="\e[0;31m" + local rb="\e[1;31m" + + local user_host_pwd="$_grey%n$w@$_grey%m$w:$_grey%~$w" + user_host_pwd="${${(%)user_host_pwd}//\//$w/$_grey}" + + local v_files="$(ls -1 | sed -n '$=')" + local h_files="$(ls -1A | sed -n '$=')" + + local job_n="$(jobs | sed -n '$=')" + + local iline="[$user_host_pwd] [$_grey${v_files:-0}$w ($_grey${h_files:-0}$w)]" + [ "$job_n" -gt 0 ] && iline="$iline [$_grey$job_n$w&]" + + if [ "$last_err" != "0" ]; then + iline="$iline \e[1;31m[\e[0;31m$last_err\e[1;31m]$w" + fi + + echo "$iline" +} + +function minimal_magic_output_base { + local margin="${#MINIMAL_MAGIC_ENTER_MARGIN}" + + if [ "$(dirs -p | wc -l)" -gt 1 ]; then + local stack="$(dirs)" + echo "[${_grey}dirs\e[0m - ${_grey}${stack//\//\e[0m/$_grey}\e[0m]" + fi + + if [ "$(uname)" = "Darwin" ] && ! ls --version &> /dev/null; then + COLUMNS=$((COLUMNS - margin)) CLICOLOR_FORCE=1 ls -C -G + else + ls -C --color="always" -w $((COLUMNS - margin)) + fi + + git -c color.status=always status -sb 2> /dev/null +} + +function minimal_wrap_output { + local output="$1" + local output_len="$(echo "$output" | sed -n '$=')" + if [ -n "$output" ]; then + if [ "$output_len" -gt "$((LINES - 2))" -a -n "$PAGER" ]; then + printf "$output\n" | "$PAGER" -R + else + printf "$output\n" | sed "s/^/$MINIMAL_MAGIC_ENTER_MARGIN/" + fi + fi +} + +function minimal_magic_enter { + local last_err="$?" # I need to capture this ASAP + + if [ -z "$BUFFER" ]; then + minimal_infoline $last_err + minimal_wrap_output "$(minimal_magic_output)" + zle redisplay + else + zle accept-line + fi +} + +prompt_minimal_precmd() { + (( ${+functions[git-info]} )) && git-info +} + +# Apply Switches +if [ "$MINIMAL_PROMPT" = "yes" ]; then + # prompt redraw on vimode change + function reset_prompt { + zle reset-prompt + } + + zle -N zle-line-init reset_prompt + zle -N zle-keymap-select reset_prompt + + add-zsh-hook precmd prompt_minimal_precmd + + zstyle ':zim:git-info:branch' format '%b' + zstyle ':zim:git-info:commit' format '%c' + zstyle ':zim:git-info:dirty' format '%{\e[0;31m%}' + zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' + zstyle ':zim:git-info:behind' format '%F{11}' + zstyle ':zim:git-info:ahead' format '%f' + zstyle ':zim:git-info:keys' format \ + 'prompt' '%b%c' \ + 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' + + PROMPT='$(minimal_env)$(minimal_ssh_hostname)$(minimal_lprompt) ' + PS2='$(minimal_ps2) ' + [ "$MINIMAL_RPROMPT" = "yes" ] && RPROMPT='$(minimal_path)$(minimal_vcs)' +fi + +if [ "$MINIMAL_MAGIC_ENTER" = "yes" ]; then + zle -N minimal-magic-enter minimal_magic_enter + bindkey -M main "^M" minimal-magic-enter + bindkey -M vicmd "^M" minimal-magic-enter +fi From feb3e4d3d9db1bb3e3d7cb7e9b3c4cb73bd930fc Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 2 Dec 2017 00:48:32 +0100 Subject: [PATCH 2/6] Converted theme to promptinit variant --- modules/prompt/themes/minimal2.zsh-theme | 175 +++++++++++------------ 1 file changed, 85 insertions(+), 90 deletions(-) diff --git a/modules/prompt/themes/minimal2.zsh-theme b/modules/prompt/themes/minimal2.zsh-theme index 627e5d6..c9579a1 100644 --- a/modules/prompt/themes/minimal2.zsh-theme +++ b/modules/prompt/themes/minimal2.zsh-theme @@ -4,69 +4,51 @@ # # Requires the `git-info` zmodule to be included in the .zimrc file. -# Switches -MINIMAL_PROMPT="${MINIMAL_PROMPT:-yes}" -MINIMAL_RPROMPT="${MINIMAL_RPROMPT:-yes}" -MINIMAL_MAGIC_ENTER="${MINIMAL_MAGIC_ENTER:-yes}" -MINIMAL_SSH_HOSTNAME="${MINIMAL_SSH_HOSTNAME:-yes}" +function { + # Switches + MINIMAL_PROMPT="${MINIMAL_PROMPT:-yes}" + MINIMAL_RPROMPT="${MINIMAL_RPROMPT:-yes}" + MINIMAL_MAGIC_ENTER="${MINIMAL_MAGIC_ENTER:-yes}" + MINIMAL_SSH_HOSTNAME="${MINIMAL_SSH_HOSTNAME:-yes}" -# Parameters -MINIMAL_OK_COLOR="${MINIMAL_OK_COLOR:-2}" -MINIMAL_USER_CHAR="${MINIMAL_USER_CHAR:-λ}" -MINIMAL_INSERT_CHAR="${MINIMAL_INSERT_CHAR:-›}" -MINIMAL_NORMAL_CHAR="${MINIMAL_NORMAL_CHAR:-·}" -MINIMAL_PWD_LEN="${MINIMAL_PWD_LEN:-2}" -MINIMAL_PWD_CHAR_LEN="${MINIMAL_PWD_CHAR_LEN:-10}" -MINIMAL_MAGIC_ENTER_MARGIN="${MINIMAL_MAGIC_ENTER_MARGIN:- | }" - -# check if function exists -function _isfn { - type -w "$1" | grep -wq function + # Parameters + MINIMAL_OK_COLOR="${MINIMAL_OK_COLOR:-2}" + MINIMAL_USER_CHAR="${MINIMAL_USER_CHAR:-λ}" + MINIMAL_INSERT_CHAR="${MINIMAL_INSERT_CHAR:-›}" + MINIMAL_NORMAL_CHAR="${MINIMAL_NORMAL_CHAR:-·}" + MINIMAL_PWD_LEN="${MINIMAL_PWD_LEN:-2}" + MINIMAL_PWD_CHAR_LEN="${MINIMAL_PWD_CHAR_LEN:-10}" + MINIMAL_MAGIC_ENTER_MARGIN="${MINIMAL_MAGIC_ENTER_MARGIN:- | }" } # Extensions -if ! _isfn minimal_magic_output; then - function minimal_magic_output { - minimal_magic_output_base - } -fi +function prompt_minimal2_magic_output { + prompt_minimal2_magic_output_base +} -if ! _isfn minimal_vcs; then - function minimal_vcs { - # git - if [[ -n ${git_info} ]]; then - print -n " ${(e)git_info[color]}${(e)git_info[prompt]}%{\e[0m%}" - fi - } -fi +function prompt_minimal2_vcs { + # git + if [[ -n ${git_info} ]]; then + echo -n " ${(e)git_info[color]}${(e)git_info[prompt]}%{\e[0m%}" + fi +} -if ! _isfn minimal_env; then - function minimal_env { - # python virtual env - if [ -n "$VIRTUAL_ENV" ]; then - _venv="$(basename $VIRTUAL_ENV)" - echo -n "${_venv%%.*} " - fi - } -fi +function prompt_minimal2_env { + # python virtual env + if [ -n "$VIRTUAL_ENV" ]; then + _venv="$(basename $VIRTUAL_ENV)" + echo -n "${_venv%%.*} " + fi +} -if ! _isfn minimal_ssh_hostname; then - function minimal_ssh_hostname { - if [[ "${MINIMAL_SSH_HOSTNAME}" == "yes" ]] && ([[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]); then - echo "$(hostname -s) " - fi - } -fi - -# Setup -autoload -U colors && colors -setopt prompt_subst - -_grey="\e[38;5;244m" -_greyp="%{$_grey%}" +function prompt_minimal2_ssh_hostname { + if [[ "${MINIMAL_SSH_HOSTNAME}" == "yes" ]] && ([[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]); then + echo -n "$(hostname -s) " + fi +} # Left Prompt -function minimal_lprompt { +function prompt_minimal2_lprompt { local user_status="%{\e[%(1j.4.0);3%(0?.$MINIMAL_OK_COLOR.1)m%}\ %(!.#.$MINIMAL_USER_CHAR)" local kmstatus="$MINIMAL_INSERT_CHAR" @@ -75,7 +57,7 @@ function minimal_lprompt { echo -n "$user_status%{\e[0m%} $kmstatus" } -function minimal_ps2 { +function prompt_minimal2_ps2 { local kmstatus="$MINIMAL_INSERT_CHAR" local offset="$((${#_venv} + 2))" [ "$KEYMAP" = 'vicmd' ] && kmstatus="$MINIMAL_NORMAL_CHAR" @@ -85,7 +67,7 @@ function minimal_ps2 { } # Right Prompt -function minimal_path { +function prompt_minimal2_path { local w="%{\e[0m%}" local cwd="%${MINIMAL_PWD_LEN}~" local pi="" @@ -104,7 +86,7 @@ function minimal_path { } # Magic Enter -function minimal_infoline { +function prompt_minimal2_infoline { local last_err="$1" local w="\e[0m" local rn="\e[0;31m" @@ -128,7 +110,7 @@ function minimal_infoline { echo "$iline" } -function minimal_magic_output_base { +function prompt_minimal2_magic_output_base { local margin="${#MINIMAL_MAGIC_ENTER_MARGIN}" if [ "$(dirs -p | wc -l)" -gt 1 ]; then @@ -145,7 +127,7 @@ function minimal_magic_output_base { git -c color.status=always status -sb 2> /dev/null } -function minimal_wrap_output { +function prompt_minimal2_wrap_output { local output="$1" local output_len="$(echo "$output" | sed -n '$=')" if [ -n "$output" ]; then @@ -157,51 +139,64 @@ function minimal_wrap_output { fi } -function minimal_magic_enter { +function prompt_minimal2_magic_enter { local last_err="$?" # I need to capture this ASAP if [ -z "$BUFFER" ]; then - minimal_infoline $last_err - minimal_wrap_output "$(minimal_magic_output)" + prompt_minimal2_infoline $last_err + prompt_minimal2_wrap_output "$(prompt_minimal2_magic_output)" zle redisplay else zle accept-line fi } -prompt_minimal_precmd() { +prompt_minimal2_precmd() { (( ${+functions[git-info]} )) && git-info } -# Apply Switches -if [ "$MINIMAL_PROMPT" = "yes" ]; then - # prompt redraw on vimode change - function reset_prompt { - zle reset-prompt - } +prompt_minimal2_setup() { + # Setup + autoload -Uz colors && colors + autoload -Uz add-zsh-hook - zle -N zle-line-init reset_prompt - zle -N zle-keymap-select reset_prompt + _grey="\e[38;5;244m" + _greyp="%{$_grey%}" - add-zsh-hook precmd prompt_minimal_precmd + # Apply Switches + if [ "$MINIMAL_PROMPT" = "yes" ]; then + # prompt redraw on vimode change + function reset_prompt { + zle reset-prompt + } - zstyle ':zim:git-info:branch' format '%b' - zstyle ':zim:git-info:commit' format '%c' - zstyle ':zim:git-info:dirty' format '%{\e[0;31m%}' - zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' - zstyle ':zim:git-info:behind' format '%F{11}' - zstyle ':zim:git-info:ahead' format '%f' - zstyle ':zim:git-info:keys' format \ - 'prompt' '%b%c' \ - 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' + prompt_opts=(cr percent sp subst) - PROMPT='$(minimal_env)$(minimal_ssh_hostname)$(minimal_lprompt) ' - PS2='$(minimal_ps2) ' - [ "$MINIMAL_RPROMPT" = "yes" ] && RPROMPT='$(minimal_path)$(minimal_vcs)' -fi + zle -N zle-line-init reset_prompt + zle -N zle-keymap-select reset_prompt -if [ "$MINIMAL_MAGIC_ENTER" = "yes" ]; then - zle -N minimal-magic-enter minimal_magic_enter - bindkey -M main "^M" minimal-magic-enter - bindkey -M vicmd "^M" minimal-magic-enter -fi + add-zsh-hook precmd prompt_minimal2_precmd + + zstyle ':zim:git-info:branch' format '%b' + zstyle ':zim:git-info:commit' format '%c' + zstyle ':zim:git-info:dirty' format '%{\e[0;31m%}' + zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' + zstyle ':zim:git-info:behind' format '%F{11}' + zstyle ':zim:git-info:ahead' format '%f' + zstyle ':zim:git-info:keys' format \ + 'prompt' '%b%c' \ + 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' + + PROMPT='$(prompt_minimal2_env)$(prompt_minimal2_ssh_hostname)$(prompt_minimal2_lprompt) ' + PS2='$(prompt_minimal2_ps2) ' + [ "$MINIMAL_RPROMPT" = "yes" ] && RPROMPT='$(prompt_minimal2_path)$(prompt_minimal2_vcs)' + fi + + if [ "$MINIMAL_MAGIC_ENTER" = "yes" ]; then + zle -N prompt_minimal2-magic-enter prompt_minimal2_magic_enter + bindkey -M main "^M" prompt_minimal2-magic-enter + bindkey -M vicmd "^M" prompt_minimal2-magic-enter + fi +} + +prompt_minimal2_setup "$@" \ No newline at end of file From 350f350e34ba23d929ca8e60892e8cda64f90263 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 2 Dec 2017 00:58:38 +0100 Subject: [PATCH 3/6] Coding style adjustments --- modules/prompt/themes/minimal2.zsh-theme | 248 +++++++++++------------ 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/modules/prompt/themes/minimal2.zsh-theme b/modules/prompt/themes/minimal2.zsh-theme index c9579a1..3694d1b 100644 --- a/modules/prompt/themes/minimal2.zsh-theme +++ b/modules/prompt/themes/minimal2.zsh-theme @@ -5,150 +5,150 @@ # Requires the `git-info` zmodule to be included in the .zimrc file. function { - # Switches - MINIMAL_PROMPT="${MINIMAL_PROMPT:-yes}" - MINIMAL_RPROMPT="${MINIMAL_RPROMPT:-yes}" - MINIMAL_MAGIC_ENTER="${MINIMAL_MAGIC_ENTER:-yes}" - MINIMAL_SSH_HOSTNAME="${MINIMAL_SSH_HOSTNAME:-yes}" + # Switches + MINIMAL_PROMPT="${MINIMAL_PROMPT:-yes}" + MINIMAL_RPROMPT="${MINIMAL_RPROMPT:-yes}" + MINIMAL_MAGIC_ENTER="${MINIMAL_MAGIC_ENTER:-yes}" + MINIMAL_SSH_HOSTNAME="${MINIMAL_SSH_HOSTNAME:-yes}" - # Parameters - MINIMAL_OK_COLOR="${MINIMAL_OK_COLOR:-2}" - MINIMAL_USER_CHAR="${MINIMAL_USER_CHAR:-λ}" - MINIMAL_INSERT_CHAR="${MINIMAL_INSERT_CHAR:-›}" - MINIMAL_NORMAL_CHAR="${MINIMAL_NORMAL_CHAR:-·}" - MINIMAL_PWD_LEN="${MINIMAL_PWD_LEN:-2}" - MINIMAL_PWD_CHAR_LEN="${MINIMAL_PWD_CHAR_LEN:-10}" - MINIMAL_MAGIC_ENTER_MARGIN="${MINIMAL_MAGIC_ENTER_MARGIN:- | }" + # Parameters + MINIMAL_OK_COLOR="${MINIMAL_OK_COLOR:-2}" + MINIMAL_USER_CHAR="${MINIMAL_USER_CHAR:-λ}" + MINIMAL_INSERT_CHAR="${MINIMAL_INSERT_CHAR:-›}" + MINIMAL_NORMAL_CHAR="${MINIMAL_NORMAL_CHAR:-·}" + MINIMAL_PWD_LEN="${MINIMAL_PWD_LEN:-2}" + MINIMAL_PWD_CHAR_LEN="${MINIMAL_PWD_CHAR_LEN:-10}" + MINIMAL_MAGIC_ENTER_MARGIN="${MINIMAL_MAGIC_ENTER_MARGIN:- | }" } # Extensions function prompt_minimal2_magic_output { - prompt_minimal2_magic_output_base + prompt_minimal2_magic_output_base } function prompt_minimal2_vcs { - # git - if [[ -n ${git_info} ]]; then - echo -n " ${(e)git_info[color]}${(e)git_info[prompt]}%{\e[0m%}" - fi + # git + if [[ -n ${git_info} ]]; then + echo -n " ${(e)git_info[color]}${(e)git_info[prompt]}%{\e[0m%}" + fi } function prompt_minimal2_env { - # python virtual env - if [ -n "$VIRTUAL_ENV" ]; then - _venv="$(basename $VIRTUAL_ENV)" - echo -n "${_venv%%.*} " - fi + # python virtual env + if [ -n "${VIRTUAL_ENV}" ]; then + _venv="$(basename ${VIRTUAL_ENV})" + echo -n "${_venv%%.*} " + fi } function prompt_minimal2_ssh_hostname { - if [[ "${MINIMAL_SSH_HOSTNAME}" == "yes" ]] && ([[ -n "$SSH_CLIENT" ]] || [[ -n "$SSH_TTY" ]]); then - echo -n "$(hostname -s) " - fi + if [[ "${MINIMAL_SSH_HOSTNAME}" == "yes" ]] && ([[ -n "${SSH_CLIENT}" ]] || [[ -n "${SSH_TTY}" ]]); then + echo -n "$(hostname -s) " + fi } # Left Prompt function prompt_minimal2_lprompt { - local user_status="%{\e[%(1j.4.0);3%(0?.$MINIMAL_OK_COLOR.1)m%}\ -%(!.#.$MINIMAL_USER_CHAR)" - local kmstatus="$MINIMAL_INSERT_CHAR" - [ "$KEYMAP" = 'vicmd' ] && kmstatus="$MINIMAL_NORMAL_CHAR" + local user_status="%{\e[%(1j.4.0);3%(0?.${MINIMAL_OK_COLOR}.1)m%}\ +%(!.#.${MINIMAL_USER_CHAR})" + local kmstatus="${MINIMAL_INSERT_CHAR}" + [ "$KEYMAP" = 'vicmd' ] && kmstatus="${MINIMAL_NORMAL_CHAR}" - echo -n "$user_status%{\e[0m%} $kmstatus" + echo -n "$user_status%{\e[0m%} $kmstatus" } function prompt_minimal2_ps2 { - local kmstatus="$MINIMAL_INSERT_CHAR" - local offset="$((${#_venv} + 2))" - [ "$KEYMAP" = 'vicmd' ] && kmstatus="$MINIMAL_NORMAL_CHAR" + local kmstatus="$MINIMAL_INSERT_CHAR" + local offset="$((${#_venv} + 2))" + [ "$KEYMAP" = 'vicmd' ] && kmstatus="${MINIMAL_NORMAL_CHAR}" - printf " %.0s" {1..$offset} - echo -n "$kmstatus" + printf " %.0s" {1..${offset}} + echo -n "${kmstatus}" } # Right Prompt function prompt_minimal2_path { - local w="%{\e[0m%}" - local cwd="%${MINIMAL_PWD_LEN}~" - local pi="" - local len="$MINIMAL_PWD_CHAR_LEN" - [ "$len" -lt 4 ] && len=4 - local hlen=$((len / 2 - 1)) - cwd="${(%)cwd}" - cwd=("${(@s:/:)cwd}") + local w="%{\e[0m%}" + local cwd="%${MINIMAL_PWD_LEN}~" + local pi="" + local len="${MINIMAL_PWD_CHAR_LEN}" + [ "$len" -lt 4 ] && len=4 + local hlen=$((len / 2 - 1)) + cwd="${(%)cwd}" + cwd=("${(@s:/:)cwd}") - for i in {1..${#cwd}}; do - pi="$cwd[$i]" - [ "${#pi}" -gt "$len" ] && cwd[$i]="${pi:0:$hlen}$w..$_greyp${pi: -$hlen}" - done + for i in {1..${#cwd}}; do + pi="$cwd[$i]" + [ "${#pi}" -gt "$len" ] && cwd[$i]="${pi:0:$hlen}$w..$_greyp${pi: -$hlen}" + done - echo -n "$_greyp${(j:/:)cwd//\//$w/$_greyp}$w" + echo -n "$_greyp${(j:/:)cwd//\//$w/$_greyp}$w" } # Magic Enter function prompt_minimal2_infoline { - local last_err="$1" - local w="\e[0m" - local rn="\e[0;31m" - local rb="\e[1;31m" + local last_err="$1" + local w="\e[0m" + local rn="\e[0;31m" + local rb="\e[1;31m" - local user_host_pwd="$_grey%n$w@$_grey%m$w:$_grey%~$w" - user_host_pwd="${${(%)user_host_pwd}//\//$w/$_grey}" + local user_host_pwd="${_grey}%n$w@${_grey}%m$w:${_grey}%~$w" + user_host_pwd="${${(%)user_host_pwd}//\//$w/${_grey}}" - local v_files="$(ls -1 | sed -n '$=')" - local h_files="$(ls -1A | sed -n '$=')" + local v_files="$(ls -1 | sed -n '$=')" + local h_files="$(ls -1A | sed -n '$=')" - local job_n="$(jobs | sed -n '$=')" + local job_n="$(jobs | sed -n '$=')" - local iline="[$user_host_pwd] [$_grey${v_files:-0}$w ($_grey${h_files:-0}$w)]" - [ "$job_n" -gt 0 ] && iline="$iline [$_grey$job_n$w&]" + local iline="[$user_host_pwd] [${_grey}${v_files:-0}$w (${_grey}${h_files:-0}$w)]" + [ "${job_n}" -gt 0 ] && iline="${iline} [${_grey}${job_n}$w&]" - if [ "$last_err" != "0" ]; then - iline="$iline \e[1;31m[\e[0;31m$last_err\e[1;31m]$w" - fi + if [ "$last_err" != "0" ]; then + iline="${iline} \e[1;31m[\e[0;31m$last_err\e[1;31m]$w" + fi - echo "$iline" + echo "${iline}" } function prompt_minimal2_magic_output_base { - local margin="${#MINIMAL_MAGIC_ENTER_MARGIN}" + local margin="${#MINIMAL_MAGIC_ENTER_MARGIN}" - if [ "$(dirs -p | wc -l)" -gt 1 ]; then - local stack="$(dirs)" - echo "[${_grey}dirs\e[0m - ${_grey}${stack//\//\e[0m/$_grey}\e[0m]" - fi + if [ "$(dirs -p | wc -l)" -gt 1 ]; then + local stack="$(dirs)" + echo "[${_grey}dirs\e[0m - ${_grey}${stack//\//\e[0m/$_grey}\e[0m]" + fi - if [ "$(uname)" = "Darwin" ] && ! ls --version &> /dev/null; then - COLUMNS=$((COLUMNS - margin)) CLICOLOR_FORCE=1 ls -C -G - else - ls -C --color="always" -w $((COLUMNS - margin)) - fi + if [ "$(uname)" = "Darwin" ] && ! ls --version &> /dev/null; then + COLUMNS=$((COLUMNS - margin)) CLICOLOR_FORCE=1 ls -C -G + else + ls -C --color="always" -w $((COLUMNS - margin)) + fi - git -c color.status=always status -sb 2> /dev/null + git -c color.status=always status -sb 2> /dev/null } function prompt_minimal2_wrap_output { - local output="$1" - local output_len="$(echo "$output" | sed -n '$=')" - if [ -n "$output" ]; then - if [ "$output_len" -gt "$((LINES - 2))" -a -n "$PAGER" ]; then - printf "$output\n" | "$PAGER" -R - else - printf "$output\n" | sed "s/^/$MINIMAL_MAGIC_ENTER_MARGIN/" - fi + local output="$1" + local output_len="$(echo "$output" | sed -n '$=')" + if [ -n "$output" ]; then + if [ "$output_len" -gt "$((LINES - 2))" -a -n "${PAGER}" ]; then + printf "$output\n" | "${PAGER}" -R + else + printf "$output\n" | sed "s/^/${MINIMAL_MAGIC_ENTER_MARGIN}/" fi + fi } function prompt_minimal2_magic_enter { - local last_err="$?" # I need to capture this ASAP + local last_err="$?" # I need to capture this ASAP - if [ -z "$BUFFER" ]; then - prompt_minimal2_infoline $last_err - prompt_minimal2_wrap_output "$(prompt_minimal2_magic_output)" - zle redisplay - else - zle accept-line - fi + if [ -z "$BUFFER" ]; then + prompt_minimal2_infoline $last_err + prompt_minimal2_wrap_output "$(prompt_minimal2_magic_output)" + zle redisplay + else + zle accept-line + fi } prompt_minimal2_precmd() { @@ -156,47 +156,47 @@ prompt_minimal2_precmd() { } prompt_minimal2_setup() { - # Setup - autoload -Uz colors && colors - autoload -Uz add-zsh-hook + # Setup + autoload -Uz colors && colors + autoload -Uz add-zsh-hook - _grey="\e[38;5;244m" - _greyp="%{$_grey%}" + _grey="\e[38;5;244m" + _greyp="%{$_grey%}" - # Apply Switches - if [ "$MINIMAL_PROMPT" = "yes" ]; then - # prompt redraw on vimode change - function reset_prompt { - zle reset-prompt - } + # Apply Switches + if [ "$MINIMAL_PROMPT" = "yes" ]; then + # prompt redraw on vimode change + function reset_prompt { + zle reset-prompt + } - prompt_opts=(cr percent sp subst) + prompt_opts=(cr percent sp subst) - zle -N zle-line-init reset_prompt - zle -N zle-keymap-select reset_prompt + zle -N zle-line-init reset_prompt + zle -N zle-keymap-select reset_prompt - add-zsh-hook precmd prompt_minimal2_precmd + add-zsh-hook precmd prompt_minimal2_precmd - zstyle ':zim:git-info:branch' format '%b' - zstyle ':zim:git-info:commit' format '%c' - zstyle ':zim:git-info:dirty' format '%{\e[0;31m%}' - zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' - zstyle ':zim:git-info:behind' format '%F{11}' - zstyle ':zim:git-info:ahead' format '%f' - zstyle ':zim:git-info:keys' format \ - 'prompt' '%b%c' \ - 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' + zstyle ':zim:git-info:branch' format '%b' + zstyle ':zim:git-info:commit' format '%c' + zstyle ':zim:git-info:dirty' format '%{\e[0;31m%}' + zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' + zstyle ':zim:git-info:behind' format '%F{11}' + zstyle ':zim:git-info:ahead' format '%f' + zstyle ':zim:git-info:keys' format \ + 'prompt' '%b%c' \ + 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' - PROMPT='$(prompt_minimal2_env)$(prompt_minimal2_ssh_hostname)$(prompt_minimal2_lprompt) ' - PS2='$(prompt_minimal2_ps2) ' - [ "$MINIMAL_RPROMPT" = "yes" ] && RPROMPT='$(prompt_minimal2_path)$(prompt_minimal2_vcs)' - fi + PROMPT='$(prompt_minimal2_env)$(prompt_minimal2_ssh_hostname)$(prompt_minimal2_lprompt) ' + PS2='$(prompt_minimal2_ps2) ' + [ "$MINIMAL_RPROMPT" = "yes" ] && RPROMPT='$(prompt_minimal2_path)$(prompt_minimal2_vcs)' + fi - if [ "$MINIMAL_MAGIC_ENTER" = "yes" ]; then - zle -N prompt_minimal2-magic-enter prompt_minimal2_magic_enter - bindkey -M main "^M" prompt_minimal2-magic-enter - bindkey -M vicmd "^M" prompt_minimal2-magic-enter - fi + if [ "$MINIMAL_MAGIC_ENTER" = "yes" ]; then + zle -N prompt_minimal2-magic-enter prompt_minimal2_magic_enter + bindkey -M main "^M" prompt_minimal2-magic-enter + bindkey -M vicmd "^M" prompt_minimal2-magic-enter + fi } prompt_minimal2_setup "$@" \ No newline at end of file From 1bcc6a919641d36b6cb1d5b15170f4f0992f4324 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 3 Jan 2018 20:35:42 +0100 Subject: [PATCH 4/6] Updated minimal theme with changes from original project --- modules/prompt/themes/minimal2.zsh-theme | 371 +++++++++++++---------- 1 file changed, 212 insertions(+), 159 deletions(-) diff --git a/modules/prompt/themes/minimal2.zsh-theme b/modules/prompt/themes/minimal2.zsh-theme index 3694d1b..d2804a2 100644 --- a/modules/prompt/themes/minimal2.zsh-theme +++ b/modules/prompt/themes/minimal2.zsh-theme @@ -5,150 +5,217 @@ # Requires the `git-info` zmodule to be included in the .zimrc file. function { - # Switches - MINIMAL_PROMPT="${MINIMAL_PROMPT:-yes}" - MINIMAL_RPROMPT="${MINIMAL_RPROMPT:-yes}" - MINIMAL_MAGIC_ENTER="${MINIMAL_MAGIC_ENTER:-yes}" - MINIMAL_SSH_HOSTNAME="${MINIMAL_SSH_HOSTNAME:-yes}" + # Global settings + MNML_OK_COLOR="${MNML_OK_COLOR:-2}" + MNML_ERR_COLOR="${MNML_ERR_COLOR:-1}" - # Parameters - MINIMAL_OK_COLOR="${MINIMAL_OK_COLOR:-2}" - MINIMAL_USER_CHAR="${MINIMAL_USER_CHAR:-λ}" - MINIMAL_INSERT_CHAR="${MINIMAL_INSERT_CHAR:-›}" - MINIMAL_NORMAL_CHAR="${MINIMAL_NORMAL_CHAR:-·}" - MINIMAL_PWD_LEN="${MINIMAL_PWD_LEN:-2}" - MINIMAL_PWD_CHAR_LEN="${MINIMAL_PWD_CHAR_LEN:-10}" - MINIMAL_MAGIC_ENTER_MARGIN="${MINIMAL_MAGIC_ENTER_MARGIN:- | }" + MNML_USER_CHAR="${MNML_USER_CHAR:-λ}" + MNML_INSERT_CHAR="${MNML_INSERT_CHAR:-›}" + MNML_NORMAL_CHAR="${MNML_NORMAL_CHAR:-·}" + + [ -z "$MNML_PROMPT" ] && MNML_PROMPT=(mnml_ssh mnml_pyenv mnml_status mnml_keymap) + [ -z "$MNML_RPROMPT" ] && MNML_RPROMPT=('mnml_cwd 2 0' mnml_git) + [ -z "$MNML_INFOLN" ] && MNML_INFOLN=(mnml_err mnml_jobs mnml_uhp mnml_files) + + [ -z "$MNML_MAGICENTER" ] && MNML_MAGICENTER=(mnml_me_dirs mnml_me_ls mnml_me_git) } -# Extensions -function prompt_minimal2_magic_output { - prompt_minimal2_magic_output_base +# Components +function mnml_status { + local okc="$MNML_OK_COLOR" + local errc="$MNML_ERR_COLOR" + local uchar="$MNML_USER_CHAR" + + local job_ansi="0" + if [ -n "$(jobs | sed -n '$=')" ]; then + job_ansi="4" + fi + + local err_ansi="$MNML_OK_COLOR" + if [ "$MNML_LAST_ERR" != "0" ]; then + err_ansi="$MNML_ERR_COLOR" + fi + + echo -n "%{\e[$job_ansi;3${err_ansi}m%}%(!.#.$uchar)%{\e[0m%}" } -function prompt_minimal2_vcs { +function mnml_keymap { + local kmstat="$MNML_INSERT_CHAR" + [ "$KEYMAP" = 'vicmd' ] && kmstat="$MNML_NORMAL_CHAR" + echo -n "$kmstat" +} + +function mnml_cwd { + local segments="${1:-2}" + local seg_len="${2:-0}" + + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" + + if [ "$segments" -le 0 ]; then + segments=1 + fi + if [ "$seg_len" -gt 0 ] && [ "$seg_len" -lt 4 ]; then + seg_len=4 + fi + local seg_hlen=$((seg_len / 2 - 1)) + + local cwd="%${segments}~" + cwd="${(%)cwd}" + cwd=("${(@s:/:)cwd}") + + local pi="" + for i in {1..${#cwd}}; do + pi="$cwd[$i]" + if [ "$seg_len" -gt 0 ] && [ "${#pi}" -gt "$seg_len" ]; then + cwd[$i]="${pi:0:$seg_hlen}$_w..$_g${pi: -$seg_hlen}" + fi + done + + echo -n "$_g${(j:/:)cwd//\//$_w/$_g}$_w" +} + +function mnml_git { # git if [[ -n ${git_info} ]]; then echo -n " ${(e)git_info[color]}${(e)git_info[prompt]}%{\e[0m%}" fi } -function prompt_minimal2_env { - # python virtual env - if [ -n "${VIRTUAL_ENV}" ]; then - _venv="$(basename ${VIRTUAL_ENV})" - echo -n "${_venv%%.*} " - fi +function mnml_uhp { + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" + local cwd="%~" + cwd="${(%)cwd}" + + echo -n "$_g%n$_w@$_g%m$_w:$_g${cwd//\//$_w/$_g}$_w" } -function prompt_minimal2_ssh_hostname { - if [[ "${MINIMAL_SSH_HOSTNAME}" == "yes" ]] && ([[ -n "${SSH_CLIENT}" ]] || [[ -n "${SSH_TTY}" ]]); then - echo -n "$(hostname -s) " - fi -} - -# Left Prompt -function prompt_minimal2_lprompt { - local user_status="%{\e[%(1j.4.0);3%(0?.${MINIMAL_OK_COLOR}.1)m%}\ -%(!.#.${MINIMAL_USER_CHAR})" - local kmstatus="${MINIMAL_INSERT_CHAR}" - [ "$KEYMAP" = 'vicmd' ] && kmstatus="${MINIMAL_NORMAL_CHAR}" - - echo -n "$user_status%{\e[0m%} $kmstatus" -} - -function prompt_minimal2_ps2 { - local kmstatus="$MINIMAL_INSERT_CHAR" - local offset="$((${#_venv} + 2))" - [ "$KEYMAP" = 'vicmd' ] && kmstatus="${MINIMAL_NORMAL_CHAR}" - - printf " %.0s" {1..${offset}} - echo -n "${kmstatus}" -} - -# Right Prompt -function prompt_minimal2_path { - local w="%{\e[0m%}" - local cwd="%${MINIMAL_PWD_LEN}~" - local pi="" - local len="${MINIMAL_PWD_CHAR_LEN}" - [ "$len" -lt 4 ] && len=4 - local hlen=$((len / 2 - 1)) - cwd="${(%)cwd}" - cwd=("${(@s:/:)cwd}") - - for i in {1..${#cwd}}; do - pi="$cwd[$i]" - [ "${#pi}" -gt "$len" ] && cwd[$i]="${pi:0:$hlen}$w..$_greyp${pi: -$hlen}" - done - - echo -n "$_greyp${(j:/:)cwd//\//$w/$_greyp}$w" -} - -# Magic Enter -function prompt_minimal2_infoline { - local last_err="$1" - local w="\e[0m" - local rn="\e[0;31m" - local rb="\e[1;31m" - - local user_host_pwd="${_grey}%n$w@${_grey}%m$w:${_grey}%~$w" - user_host_pwd="${${(%)user_host_pwd}//\//$w/${_grey}}" - - local v_files="$(ls -1 | sed -n '$=')" - local h_files="$(ls -1A | sed -n '$=')" - - local job_n="$(jobs | sed -n '$=')" - - local iline="[$user_host_pwd] [${_grey}${v_files:-0}$w (${_grey}${h_files:-0}$w)]" - [ "${job_n}" -gt 0 ] && iline="${iline} [${_grey}${job_n}$w&]" - - if [ "$last_err" != "0" ]; then - iline="${iline} \e[1;31m[\e[0;31m$last_err\e[1;31m]$w" - fi - - echo "${iline}" -} - -function prompt_minimal2_magic_output_base { - local margin="${#MINIMAL_MAGIC_ENTER_MARGIN}" - - if [ "$(dirs -p | wc -l)" -gt 1 ]; then - local stack="$(dirs)" - echo "[${_grey}dirs\e[0m - ${_grey}${stack//\//\e[0m/$_grey}\e[0m]" - fi - - if [ "$(uname)" = "Darwin" ] && ! ls --version &> /dev/null; then - COLUMNS=$((COLUMNS - margin)) CLICOLOR_FORCE=1 ls -C -G - else - ls -C --color="always" -w $((COLUMNS - margin)) - fi - - git -c color.status=always status -sb 2> /dev/null -} - -function prompt_minimal2_wrap_output { - local output="$1" - local output_len="$(echo "$output" | sed -n '$=')" - if [ -n "$output" ]; then - if [ "$output_len" -gt "$((LINES - 2))" -a -n "${PAGER}" ]; then - printf "$output\n" | "${PAGER}" -R - else - printf "$output\n" | sed "s/^/${MINIMAL_MAGIC_ENTER_MARGIN}/" +function mnml_ssh { + if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then + echo -n "$(hostname -s)" fi - fi } -function prompt_minimal2_magic_enter { - local last_err="$?" # I need to capture this ASAP +function mnml_pyenv { + if [ -n "$VIRTUAL_ENV" ]; then + _venv="$(basename $VIRTUAL_ENV)" + echo -n "${_venv%%.*}" + fi +} - if [ -z "$BUFFER" ]; then - prompt_minimal2_infoline $last_err - prompt_minimal2_wrap_output "$(prompt_minimal2_magic_output)" - zle redisplay - else - zle accept-line - fi +function mnml_err { + local _w="%{\e[0m%}" + local _err="%{\e[3${MNML_ERR_COLOR}m%}" + + if [ "${MNML_LAST_ERR:-0}" != "0" ]; then + echo -n "$_err$MNML_LAST_ERR$_w" + fi +} + +function mnml_jobs { + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" + + local job_n="$(jobs | sed -n '$=')" + if [ "$job_n" -gt 0 ]; then + echo -n "$_g$job_n$_w&" + fi +} + +function mnml_files { + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" + + local a_files="$(ls -1A | sed -n '$=')" + local v_files="$(ls -1 | sed -n '$=')" + local h_files="$((a_files - v_files))" + + local output="${_w}[$_g${v_files:-0}" + if [ "${h_files:-0}" -gt 0 ]; then + output="$output $_w($_g$h_files$_w)" + fi + output="$output${_w}]" + + echo -n "$output" +} + +# Magic enter functions +function mnml_me_dirs { + local _w="\e[0m" + local _g="\e[38;5;244m" + + if [ "$(dirs -p | sed -n '$=')" -gt 1 ]; then + local stack="$(dirs)" + echo "$_g${stack//\//$_w/$_g}$_w" + fi +} + +function mnml_me_ls { + if [ "$(uname)" = "Darwin" ] && ! ls --version &> /dev/null; then + COLUMNS=$COLUMNS CLICOLOR_FORCE=1 ls -C -G -F + else + ls -C -F --color="always" -w $COLUMNS + fi +} + +function mnml_me_git { + git -c color.status=always status -sb 2> /dev/null +} + +# Wrappers & utils +# join outpus of components +function mnml_wrap { + local arr=() + local cmd_out="" + for cmd in ${(P)1}; do + cmd_out="$(eval "$cmd")" + if [ -n "$cmd_out" ]; then + arr+="$cmd_out" + fi + done + + echo -n "${(j: :)arr}" +} + +# expand string as prompt would do +function mnml_iline { + echo "${(%)1}" +} + +# display magic enter +function mnml_me { + local output=() + local cmd_output="" + for cmd in $MNML_MAGICENTER; do + cmd_out="$(eval "$cmd")" + if [ -n "$cmd_out" ]; then + output+="$cmd_out" + fi + done + echo -n "${(j:\n:)output}" | less -XFR +} + +# capture exit status and reset prompt +function mnml_line_init { + MNML_LAST_ERR="$?" # I need to capture this ASAP + zle reset-prompt +} + +# redraw prompt on keymap select +function mnml_keymap_select { + zle reset-prompt +} + +# draw infoline if no command is given +function mnml_buffer_empty { + if [ -z "$BUFFER" ]; then + mnml_iline "$(mnml_wrap MNML_INFOLN)" + mnml_me + zle redisplay + else + zle accept-line + fi } prompt_minimal2_precmd() { @@ -160,43 +227,29 @@ prompt_minimal2_setup() { autoload -Uz colors && colors autoload -Uz add-zsh-hook - _grey="\e[38;5;244m" - _greyp="%{$_grey%}" + prompt_opts=(cr percent sp subst) - # Apply Switches - if [ "$MINIMAL_PROMPT" = "yes" ]; then - # prompt redraw on vimode change - function reset_prompt { - zle reset-prompt - } + zle -N zle-line-init mnml_line_init + zle -N zle-keymap-select mnml_keymap_select + zle -N buffer-empty mnml_buffer_empty - prompt_opts=(cr percent sp subst) + add-zsh-hook precmd prompt_minimal2_precmd - zle -N zle-line-init reset_prompt - zle -N zle-keymap-select reset_prompt + zstyle ':zim:git-info:branch' format '%b' + zstyle ':zim:git-info:commit' format '%c' + zstyle ':zim:git-info:dirty' format '%{\e[0;3${MNML_ERR_COLOR}m%}' + zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' + zstyle ':zim:git-info:behind' format '%F{11}' + zstyle ':zim:git-info:ahead' format '%f' + zstyle ':zim:git-info:keys' format \ + 'prompt' '%b%c' \ + 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' - add-zsh-hook precmd prompt_minimal2_precmd + PROMPT='$(mnml_wrap MNML_PROMPT) ' + RPROMPT='$(mnml_wrap MNML_RPROMPT)' - zstyle ':zim:git-info:branch' format '%b' - zstyle ':zim:git-info:commit' format '%c' - zstyle ':zim:git-info:dirty' format '%{\e[0;31m%}' - zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' - zstyle ':zim:git-info:behind' format '%F{11}' - zstyle ':zim:git-info:ahead' format '%f' - zstyle ':zim:git-info:keys' format \ - 'prompt' '%b%c' \ - 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' - - PROMPT='$(prompt_minimal2_env)$(prompt_minimal2_ssh_hostname)$(prompt_minimal2_lprompt) ' - PS2='$(prompt_minimal2_ps2) ' - [ "$MINIMAL_RPROMPT" = "yes" ] && RPROMPT='$(prompt_minimal2_path)$(prompt_minimal2_vcs)' - fi - - if [ "$MINIMAL_MAGIC_ENTER" = "yes" ]; then - zle -N prompt_minimal2-magic-enter prompt_minimal2_magic_enter - bindkey -M main "^M" prompt_minimal2-magic-enter - bindkey -M vicmd "^M" prompt_minimal2-magic-enter - fi + bindkey -M main "^M" buffer-empty + bindkey -M vicmd "^M" buffer-empty } prompt_minimal2_setup "$@" \ No newline at end of file From a4215d9d148c3748476c631874941dc14c665dd1 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 3 Jan 2018 20:41:21 +0100 Subject: [PATCH 5/6] Fixed clean color for git status --- modules/prompt/themes/minimal2.zsh-theme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/prompt/themes/minimal2.zsh-theme b/modules/prompt/themes/minimal2.zsh-theme index d2804a2..5bf5871 100644 --- a/modules/prompt/themes/minimal2.zsh-theme +++ b/modules/prompt/themes/minimal2.zsh-theme @@ -243,7 +243,7 @@ prompt_minimal2_setup() { zstyle ':zim:git-info:ahead' format '%f' zstyle ':zim:git-info:keys' format \ 'prompt' '%b%c' \ - 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MINIMAL_OK_COLOR}m%}")' + 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MNML_OK_COLOR}m%}")' PROMPT='$(mnml_wrap MNML_PROMPT) ' RPROMPT='$(mnml_wrap MNML_RPROMPT)' From 1919ee6c7d43e5fc16bd2818cb54975c73b812a2 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Fri, 5 Jan 2018 21:29:10 +0100 Subject: [PATCH 6/6] Adapted zimfw code style guide and enhanced git-info coloring --- modules/prompt/themes/minimal2.zsh-theme | 234 ++++++++++++----------- 1 file changed, 118 insertions(+), 116 deletions(-) diff --git a/modules/prompt/themes/minimal2.zsh-theme b/modules/prompt/themes/minimal2.zsh-theme index 5bf5871..6660cfb 100644 --- a/modules/prompt/themes/minimal2.zsh-theme +++ b/modules/prompt/themes/minimal2.zsh-theme @@ -8,6 +8,8 @@ function { # Global settings MNML_OK_COLOR="${MNML_OK_COLOR:-2}" MNML_ERR_COLOR="${MNML_ERR_COLOR:-1}" + # ADDED FOR ZIMFW + MNML_DIV_COLOR="${MNML_DIV_COLOR:-5}" MNML_USER_CHAR="${MNML_USER_CHAR:-λ}" MNML_INSERT_CHAR="${MNML_INSERT_CHAR:-›}" @@ -22,57 +24,57 @@ function { # Components function mnml_status { - local okc="$MNML_OK_COLOR" - local errc="$MNML_ERR_COLOR" - local uchar="$MNML_USER_CHAR" + local okc="${MNML_OK_COLOR}" + local errc="${MNML_ERR_COLOR}" + local uchar="${MNML_USER_CHAR}" - local job_ansi="0" - if [ -n "$(jobs | sed -n '$=')" ]; then - job_ansi="4" - fi + local job_ansi="0" + if [ -n "$(jobs | sed -n '$=')" ]; then + job_ansi="4" + fi - local err_ansi="$MNML_OK_COLOR" - if [ "$MNML_LAST_ERR" != "0" ]; then - err_ansi="$MNML_ERR_COLOR" - fi + local err_ansi="${MNML_OK_COLOR}" + if [ "${MNML_LAST_ERR}" != "0" ]; then + err_ansi="${MNML_ERR_COLOR}" + fi - echo -n "%{\e[$job_ansi;3${err_ansi}m%}%(!.#.$uchar)%{\e[0m%}" + echo -n "%{\e[$job_ansi;3${err_ansi}m%}%(!.#.$uchar)%{\e[0m%}" } function mnml_keymap { - local kmstat="$MNML_INSERT_CHAR" - [ "$KEYMAP" = 'vicmd' ] && kmstat="$MNML_NORMAL_CHAR" - echo -n "$kmstat" + local kmstat="${MNML_INSERT_CHAR}" + [ "$KEYMAP" = 'vicmd' ] && kmstat="${MNML_NORMAL_CHAR}" + echo -n "${kmstat}" } function mnml_cwd { - local segments="${1:-2}" - local seg_len="${2:-0}" + local segments="${1:-2}" + local seg_len="${2:-0}" - local _w="%{\e[0m%}" - local _g="%{\e[38;5;244m%}" + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" - if [ "$segments" -le 0 ]; then - segments=1 + if [ "${segments}" -le 0 ]; then + segments=1 + fi + if [ "${seg_len}" -gt 0 ] && [ "${seg_len}" -lt 4 ]; then + seg_len=4 + fi + local seg_hlen=$((seg_len / 2 - 1)) + + local cwd="%${segments}~" + cwd="${(%)cwd}" + cwd=("${(@s:/:)cwd}") + + local pi="" + for i in {1..${#cwd}}; do + pi="$cwd[$i]" + if [ "${seg_len}" -gt 0 ] && [ "${#pi}" -gt "${seg_len}" ]; then + cwd[$i]="${pi:0:$seg_hlen}$_w..$_g${pi: -$seg_hlen}" fi - if [ "$seg_len" -gt 0 ] && [ "$seg_len" -lt 4 ]; then - seg_len=4 - fi - local seg_hlen=$((seg_len / 2 - 1)) + done - local cwd="%${segments}~" - cwd="${(%)cwd}" - cwd=("${(@s:/:)cwd}") - - local pi="" - for i in {1..${#cwd}}; do - pi="$cwd[$i]" - if [ "$seg_len" -gt 0 ] && [ "${#pi}" -gt "$seg_len" ]; then - cwd[$i]="${pi:0:$seg_hlen}$_w..$_g${pi: -$seg_hlen}" - fi - done - - echo -n "$_g${(j:/:)cwd//\//$_w/$_g}$_w" + echo -n "$_g${(j:/:)cwd//\//$_w/$_g}$_w" } function mnml_git { @@ -83,139 +85,139 @@ function mnml_git { } function mnml_uhp { - local _w="%{\e[0m%}" - local _g="%{\e[38;5;244m%}" - local cwd="%~" - cwd="${(%)cwd}" + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" + local cwd="%~" + cwd="${(%)cwd}" - echo -n "$_g%n$_w@$_g%m$_w:$_g${cwd//\//$_w/$_g}$_w" + echo -n "$_g%n$_w@$_g%m$_w:$_g${cwd//\//$_w/$_g}$_w" } function mnml_ssh { - if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then - echo -n "$(hostname -s)" - fi + if [ -n "${SSH_CLIENT}" ] || [ -n "${SSH_TTY}" ]; then + echo -n "$(hostname -s)" + fi } function mnml_pyenv { - if [ -n "$VIRTUAL_ENV" ]; then - _venv="$(basename $VIRTUAL_ENV)" - echo -n "${_venv%%.*}" - fi + if [ -n "${VIRTUAL_ENV}" ]; then + _venv="$(basename ${VIRTUAL_ENV})" + echo -n "${_venv%%.*}" + fi } function mnml_err { - local _w="%{\e[0m%}" - local _err="%{\e[3${MNML_ERR_COLOR}m%}" + local _w="%{\e[0m%}" + local _err="%{\e[3${MNML_ERR_COLOR}m%}" - if [ "${MNML_LAST_ERR:-0}" != "0" ]; then - echo -n "$_err$MNML_LAST_ERR$_w" - fi + if [ "${MNML_LAST_ERR:-0}" != "0" ]; then + echo -n "${_err}${MNML_LAST_ERR}${_w}" + fi } function mnml_jobs { - local _w="%{\e[0m%}" - local _g="%{\e[38;5;244m%}" + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" - local job_n="$(jobs | sed -n '$=')" - if [ "$job_n" -gt 0 ]; then - echo -n "$_g$job_n$_w&" - fi + local job_n="$(jobs | sed -n '$=')" + if [ "${job_n}" -gt 0 ]; then + echo -n "${_g}${job_n}${_w}&" + fi } function mnml_files { - local _w="%{\e[0m%}" - local _g="%{\e[38;5;244m%}" + local _w="%{\e[0m%}" + local _g="%{\e[38;5;244m%}" - local a_files="$(ls -1A | sed -n '$=')" - local v_files="$(ls -1 | sed -n '$=')" - local h_files="$((a_files - v_files))" + local a_files="$(ls -1A | sed -n '$=')" + local v_files="$(ls -1 | sed -n '$=')" + local h_files="$((a_files - v_files))" - local output="${_w}[$_g${v_files:-0}" - if [ "${h_files:-0}" -gt 0 ]; then - output="$output $_w($_g$h_files$_w)" - fi - output="$output${_w}]" + local output="${_w}[${_g}${v_files:-0}" + if [ "${h_files:-0}" -gt 0 ]; then + output="$output $_w(${_g}$h_files${_w})" + fi + output="${output}${_w}]" - echo -n "$output" + echo -n "${output}" } # Magic enter functions function mnml_me_dirs { - local _w="\e[0m" - local _g="\e[38;5;244m" + local _w="\e[0m" + local _g="\e[38;5;244m" - if [ "$(dirs -p | sed -n '$=')" -gt 1 ]; then - local stack="$(dirs)" - echo "$_g${stack//\//$_w/$_g}$_w" - fi + if [ "$(dirs -p | sed -n '$=')" -gt 1 ]; then + local stack="$(dirs)" + echo "${_g}${stack//\//${_w}/${_g}}${_w}" + fi } function mnml_me_ls { - if [ "$(uname)" = "Darwin" ] && ! ls --version &> /dev/null; then - COLUMNS=$COLUMNS CLICOLOR_FORCE=1 ls -C -G -F - else - ls -C -F --color="always" -w $COLUMNS - fi + if [ "$(uname)" = "Darwin" ] && ! ls --version &> /dev/null; then + COLUMNS=${COLUMNS} CLICOLOR_FORCE=1 ls -C -G -F + else + ls -C -F --color="always" -w ${COLUMNS} + fi } function mnml_me_git { - git -c color.status=always status -sb 2> /dev/null + git -c color.status=always status -sb 2> /dev/null } # Wrappers & utils # join outpus of components function mnml_wrap { - local arr=() - local cmd_out="" - for cmd in ${(P)1}; do - cmd_out="$(eval "$cmd")" - if [ -n "$cmd_out" ]; then - arr+="$cmd_out" - fi - done + local arr=() + local cmd_out="" + for cmd in ${(P)1}; do + cmd_out="$(eval "$cmd")" + if [ -n "${cmd_out}" ]; then + arr+="${cmd_out}" + fi + done - echo -n "${(j: :)arr}" + echo -n "${(j: :)arr}" } # expand string as prompt would do function mnml_iline { - echo "${(%)1}" + echo "${(%)1}" } # display magic enter function mnml_me { - local output=() - local cmd_output="" - for cmd in $MNML_MAGICENTER; do - cmd_out="$(eval "$cmd")" - if [ -n "$cmd_out" ]; then - output+="$cmd_out" - fi - done - echo -n "${(j:\n:)output}" | less -XFR + local output=() + local cmd_output="" + for cmd in ${MNML_MAGICENTER}; do + cmd_out="$(eval "$cmd")" + if [ -n "${cmd_out}" ]; then + output+="${cmd_out}" + fi + done + echo -n "${(j:\n:)output}" | less -XFR } # capture exit status and reset prompt function mnml_line_init { - MNML_LAST_ERR="$?" # I need to capture this ASAP - zle reset-prompt + MNML_LAST_ERR="$?" # I need to capture this ASAP + zle reset-prompt } # redraw prompt on keymap select function mnml_keymap_select { - zle reset-prompt + zle reset-prompt } # draw infoline if no command is given function mnml_buffer_empty { - if [ -z "$BUFFER" ]; then - mnml_iline "$(mnml_wrap MNML_INFOLN)" - mnml_me - zle redisplay - else - zle accept-line - fi + if [ -z "${BUFFER}" ]; then + mnml_iline "$(mnml_wrap MNML_INFOLN)" + mnml_me + zle redisplay + else + zle accept-line + fi } prompt_minimal2_precmd() { @@ -238,9 +240,9 @@ prompt_minimal2_setup() { zstyle ':zim:git-info:branch' format '%b' zstyle ':zim:git-info:commit' format '%c' zstyle ':zim:git-info:dirty' format '%{\e[0;3${MNML_ERR_COLOR}m%}' - zstyle ':zim:git-info:diverged' format '%{\e[0;31m%}' - zstyle ':zim:git-info:behind' format '%F{11}' - zstyle ':zim:git-info:ahead' format '%f' + zstyle ':zim:git-info:diverged' format '%{\e[0;3${MNML_DIV_COLOR}m%}' + zstyle ':zim:git-info:behind' format '%{\e[0;3${MNML_DIV_COLOR}m%}↓ ' + zstyle ':zim:git-info:ahead' format '%{\e[0;3${MNML_DIV_COLOR}m%}↑ ' zstyle ':zim:git-info:keys' format \ 'prompt' '%b%c' \ 'color' '$(coalesce "%D" "%V" "%B" "%A" "%{\e[0;3${MNML_OK_COLOR}m%}")'