diff --git a/modules/prompt/functions/prompt_paradox_setup b/modules/prompt/functions/prompt_paradox_setup new file mode 100644 index 00000000..b0dfbbfb --- /dev/null +++ b/modules/prompt/functions/prompt_paradox_setup @@ -0,0 +1,122 @@ +# Added from: https://raw.github.com/paradox460/prezto/paradox/modules/prompt/functions/prompt_paradox_setup +# Load dependencies. +pmodload 'helper' + +CURRENT_BG='NONE' +SEGMENT_SEPARATOR='⮀' + + +# Begin a segment +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_segment() { + local bg fg + [[ -n $1 ]] && bg="%K{$1}" || bg="%k" + [[ -n $2 ]] && fg="%F{$2}" || fg="%f" + if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then + echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} " + else + echo -n "%{$bg%}%{$fg%} " + fi + CURRENT_BG=$1 + [[ -n $3 ]] && print -Pn $3 +} + +# End the prompt, closing any open segments +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" + else + echo -n "%{%k%}" + fi + echo -n "%{%f%}" + CURRENT_BG='' +} + +function build_prompt { + prompt_segment black default '%(1?;%{%F{red}%}✘ ;)%(!;%{%F{yellow}%}⚡ ;)%(1j;%{%F{cyan}%}%j⚙ ;)%{%F{blue}%}%n%{%F{red}%}@%{%F{green}%}%M' + prompt_segment blue black '%2~' + if $git_status; then + prompt_segment green black '${(e)git_info[prompt]}${git_info[status]}' + fi + prompt_end +} + +start_time=$SECONDS +function prompt_paradox_preexec { + start_time=$SECONDS +} + +function calc_elapsed_time { + if [[ $timer_result -ge 3600 ]]; then + let "timer_hours = $timer_result / 3600" + let "remainder = $timer_result % 3600" + let "timer_minutes = $remainder / 60" + let "timer_seconds = $remainder % 60" + print -P "%B%F{red}>>> elapsed time ${timer_hours}h${timer_minutes}m${timer_seconds}s%b" + elif [[ $timer_result -ge 60 ]]; then + let "timer_minutes = $timer_result / 60" + let "timer_seconds = $timer_result % 60" + print -P "%B%F{yellow}>>> elapsed time ${timer_minutes}m${timer_seconds}s%b" + elif [[ $timer_result -gt 10 ]]; then + print -P "%B%F{green}>>> elapsed time ${timer_result}s%b" + fi +} + +function prompt_paradox_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git_status=git-info + fi + timer_result=$(($SECONDS-$start_time)) + if [[ $timer_result -gt 10 ]]; then + calc_elapsed_time + fi + start_time=$SECONDS +} + +function prompt_paradox_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook preexec prompt_paradox_preexec + add-zsh-hook precmd prompt_paradox_precmd + + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format '%B%F{blue}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format '%F{red}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format '%B%F{red}❮%f%b' + zstyle ':prezto:module:git:info:action' format '! %s' + zstyle ':prezto:module:git:info:added' format '✚' + zstyle ':prezto:module:git:info:ahead' format '⬆' + zstyle ':prezto:module:git:info:behind' format '⬇' + zstyle ':prezto:module:git:info:branch' format '⭠ %b' + zstyle ':prezto:module:git:info:commit' format '➦ %.7c' + zstyle ':prezto:module:git:info:deleted' format '✖' + zstyle ':prezto:module:git:info:modified' format '✱' + zstyle ':prezto:module:git:info:position' format '%p' + zstyle ':prezto:module:git:info:renamed' format '➙' + zstyle ':prezto:module:git:info:stashed' format 's' + zstyle ':prezto:module:git:info:unmerged' format '═' + zstyle ':prezto:module:git:info:untracked' format '?' + zstyle ':prezto:module:git:info:keys' format \ + 'prompt' '$(coalesce "%b" "%p" "%c")%s' \ + 'status' ' %A%B%S%a%d%m%r%U%u' + + # Define prompts. + PROMPT=' +%{%f%b%k%}$(build_prompt) + ${editor_info[keymap]} ' + RPROMPT='[%D{%L:%M:%S %p}]' + SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_paradox_setup "$@"