diff --git a/modules/prompt/functions/prompt_p4ch0u_setup b/modules/prompt/functions/prompt_p4ch0u_setup new file mode 100644 index 00000000..8b276816 --- /dev/null +++ b/modules/prompt/functions/prompt_p4ch0u_setup @@ -0,0 +1,149 @@ +# +# A simple theme that displays relevant, contextual information. +# +# Authors: +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/nrGV6pg.png +# + +# +# 16 Terminal Colors +# -- --------------- +# 0 black +# 1 red +# 2 green +# 3 yellow +# 4 blue +# 5 magenta +# 6 cyan +# 7 white +# 8 bright black +# 9 bright red +# 10 bright green +# 11 bright yellow +# 12 bright blue +# 13 bright magenta +# 14 bright cyan +# 15 bright white +# + +# Load dependencies. +pmodload 'helper' + +function prompt_sorin_pwd { + local pwd="${PWD/#$HOME/~}" + + if [[ "$pwd" == (#m)[/~] ]]; then + _prompt_sorin_pwd="$MATCH" + unset MATCH + else + _prompt_sorin_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}" + fi +} + +function prompt_sorin_git_info { + if (( _prompt_sorin_precmd_async_pid > 0 )); then + # Append Git status. + if [[ -s "$_prompt_sorin_precmd_async_data" ]]; then + alias typeset='typeset -g' + source "$_prompt_sorin_precmd_async_data" + RPROMPT+='${git_info:+${(e)git_info[status]}}' + unalias typeset + fi + + # Reset PID. + _prompt_sorin_precmd_async_pid=0 + + # Redisplay prompt. + zle && zle reset-prompt + fi +} + +function prompt_sorin_precmd_async { + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + typeset -p git_info >! "$_prompt_sorin_precmd_async_data" + fi + + # Signal completion to parent process. + kill -WINCH $$ +} + +function prompt_sorin_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + prompt_sorin_pwd + + # Define prompts. + RPROMPT='${editor_info[overwrite]}%(?:: %F{1}⏎%f)${VIM:+" %B%F{6}V%f%b"}' + + # Kill the old process of slow commands if it is still running. + if (( _prompt_sorin_precmd_async_pid > 0 )); then + kill -KILL "$_prompt_sorin_precmd_async_pid" &>/dev/null + fi + + # Compute slow commands in the background. + trap prompt_sorin_git_info WINCH + prompt_sorin_precmd_async &! + _prompt_sorin_precmd_async_pid=$! +} + +function prompt_sorin_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + _prompt_sorin_precmd_async_pid=0 + _prompt_sorin_precmd_async_data="${TMPPREFIX}-prompt_sorin_data" + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_sorin_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b' +#zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{2}❯%F{3}❯%F{1}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}❮%F{3}❮%F{1}❮%f%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format '%F{7}:%f%%B%F{9}%s%f%%b' + zstyle ':prezto:module:git:info:added' format ' %%B%F{2}✚%f%%b' + zstyle ':prezto:module:git:info:ahead' format ' %%B%F{13}⬆%f%%b' + zstyle ':prezto:module:git:info:behind' format ' %%B%F{13}⬇%f%%b' + zstyle ':prezto:module:git:info:branch' format ' %%B%F{2}%b%f%%b' + zstyle ':prezto:module:git:info:commit' format ' %%B%F{3}%.7c%f%%b' + zstyle ':prezto:module:git:info:deleted' format ' %%B%F{1}✖%f%%b' + zstyle ':prezto:module:git:info:modified' format ' %%B%F{4}✱%f%%b' + zstyle ':prezto:module:git:info:position' format ' %%B%F{13}%p%f%%b' + zstyle ':prezto:module:git:info:renamed' format ' %%B%F{5}➜%f%%b' + zstyle ':prezto:module:git:info:stashed' format ' %%B%F{6}✭%f%%b' + zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{3}═%f%%b' + zstyle ':prezto:module:git:info:untracked' format ' %%B%F{7}◼%f%%b' + zstyle ':prezto:module:git:info:keys' format \ + 'status' '$(coalesce "%b" "%p" "%c")%s%A%B%S%a%d%m%r%U%u' + + # Define prompts. + PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} ' + RPROMPT='' + SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? ' +} + +function prompt_sorin_preview { + local +h PROMPT='' + local +h RPROMPT='' + local +h SPROMPT='' + + editor-info 2>/dev/null + prompt_preview_theme 'sorin' +} + +prompt_sorin_setup "$@" diff --git a/modules/prompt/functions/prompt_sorin_setup b/modules/prompt/functions/prompt_sorin_setup index e339dffe..8b276816 100644 --- a/modules/prompt/functions/prompt_sorin_setup +++ b/modules/prompt/functions/prompt_sorin_setup @@ -108,7 +108,8 @@ function prompt_sorin_setup { # Set editor-info parameters. zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b' - zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b' +#zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{2}❯%F{3}❯%F{1}❯%f%b' zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f' zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}❮%F{3}❮%F{1}❮%f%b' diff --git a/runcoms/zpreztorc b/runcoms/zpreztorc index 4778944c..32f08b37 100644 --- a/runcoms/zpreztorc +++ b/runcoms/zpreztorc @@ -16,33 +16,44 @@ zstyle ':prezto:*:*' color 'yes' # Set the Zsh modules to load (man zshmodules). -# zstyle ':prezto:load' zmodule 'attr' 'stat' +#zstyle ':prezto:load' zmodule 'attr' 'stat' # Set the Zsh functions to load (man zshcontrib). # zstyle ':prezto:load' zfunction 'zargs' 'zmv' # Set the Prezto modules to load (browse modules). # The order matters. +# prezto modules zstyle ':prezto:load' pmodule \ 'environment' \ + 'archive' \ 'terminal' \ 'editor' \ 'history' \ + 'history-substring-search' \ 'directory' \ 'spectrum' \ 'utility' \ 'completion' \ + 'dpkg' \ + 'fasd' \ + 'git' \ + 'haskell' \ + 'syntax-highlighting' \ + 'tmux' \ + 'utility' \ 'prompt' + # # Editor # # Set the key mapping style to 'emacs' or 'vi'. -zstyle ':prezto:module:editor' key-bindings 'emacs' +zstyle ':prezto:module:editor' key-bindings 'vi' # Auto convert .... to ../.. -# zstyle ':prezto:module:editor' dot-expansion 'yes' +zstyle ':prezto:module:editor' dot-expansion 'yes' # # Git @@ -152,6 +163,3 @@ zstyle ':prezto:module:prompt' theme 'sorin' # Auto start a session when Zsh is launched in a SSH connection. # zstyle ':prezto:module:tmux:auto-start' remote 'yes' - -# Integrate with iTerm2. -# zstyle ':prezto:module:tmux:iterm' integrate 'yes'