From 2527e1a0d10daf42bbe2f9fd25fe81b38d26ef8f Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Sun, 5 Dec 2010 12:50:00 +0100 Subject: [PATCH] Added zsh configuration --- install.sh | 3 ++ zsh/functions/chpwd_update_git_vars | 2 + zsh/functions/precmd_update_git_vars | 6 +++ zsh/functions/preexec_update_git_vars | 6 +++ zsh/functions/prompt_git_info | 23 ++++++++ zsh/functions/update_current_git_vars | 30 +++++++++++ zshrc | 77 +++++++++++++++++++++++++++ 7 files changed, 147 insertions(+) create mode 100755 zsh/functions/chpwd_update_git_vars create mode 100755 zsh/functions/precmd_update_git_vars create mode 100755 zsh/functions/preexec_update_git_vars create mode 100755 zsh/functions/prompt_git_info create mode 100755 zsh/functions/update_current_git_vars create mode 100644 zshrc diff --git a/install.sh b/install.sh index 0689c08..b0e68d9 100755 --- a/install.sh +++ b/install.sh @@ -24,3 +24,6 @@ linkmy emacs.d .emacs.d # VIM linkmy vimrc .vimrc linkmy vim .vim +# ZSH +linkmy zshrc .zshrc +linkmy zsh .zsh diff --git a/zsh/functions/chpwd_update_git_vars b/zsh/functions/chpwd_update_git_vars new file mode 100755 index 0000000..0ef846a --- /dev/null +++ b/zsh/functions/chpwd_update_git_vars @@ -0,0 +1,2 @@ +# -*- mode: shell-script -*- +update_current_git_vars diff --git a/zsh/functions/precmd_update_git_vars b/zsh/functions/precmd_update_git_vars new file mode 100755 index 0000000..172456a --- /dev/null +++ b/zsh/functions/precmd_update_git_vars @@ -0,0 +1,6 @@ +# -*- mode: shell-script -*- + +if [ -n "$__EXECUTED_GIT_COMMAND" ]; then + update_current_git_vars + unset __EXECUTED_GIT_COMMAND +fi diff --git a/zsh/functions/preexec_update_git_vars b/zsh/functions/preexec_update_git_vars new file mode 100755 index 0000000..9d229a9 --- /dev/null +++ b/zsh/functions/preexec_update_git_vars @@ -0,0 +1,6 @@ +# -*- mode: shell-script -*- +case "$1" in + git*) + __EXECUTED_GIT_COMMAND=1 + ;; +esac diff --git a/zsh/functions/prompt_git_info b/zsh/functions/prompt_git_info new file mode 100755 index 0000000..76d889a --- /dev/null +++ b/zsh/functions/prompt_git_info @@ -0,0 +1,23 @@ +# -*- mode: shell-script -*- + +if [ -n "$__CURRENT_GIT_BRANCH" ]; then + local s="(" + s+="$__CURRENT_GIT_BRANCH" + case "$__CURRENT_GIT_BRANCH_STATUS" in + ahead) + s+="↑" + ;; + diverged) + s+="↕" + ;; + behind) + s+="↓" + ;; + esac + if [ -n "$__CURRENT_GIT_BRANCH_IS_DIRTY" ]; then + s+="⚡" + fi + s+=")" + + printf " %s%s" "%{${fg[yellow]}%}" $s +fi diff --git a/zsh/functions/update_current_git_vars b/zsh/functions/update_current_git_vars new file mode 100755 index 0000000..71f37e7 --- /dev/null +++ b/zsh/functions/update_current_git_vars @@ -0,0 +1,30 @@ +# -*- mode: Shell-script -*- +unset __CURRENT_GIT_BRANCH +unset __CURRENT_GIT_BRANCH_STATUS +unset __CURRENT_GIT_BRANCH_IS_DIRTY + +local st="$(git status 2>/dev/null)" +if [[ -n "$st" ]]; then + local -a arr + arr=(${(f)st}) + + if [[ $arr[1] =~ 'Not currently on any branch.' ]]; then + __CURRENT_GIT_BRANCH='no-branch' + else + __CURRENT_GIT_BRANCH="${arr[1][(w)4]}" + fi + + if [[ $arr[2] =~ 'Your branch is' ]]; then + if [[ $arr[2] =~ 'ahead' ]]; then + __CURRENT_GIT_BRANCH_STATUS='ahead' + elif [[ $arr[2] =~ 'devirged' ]]; then + __CURRENT_GIT_BRANCH_STATUS='diverged' + else + __CURRENT_GIT_BRANCH_STATUS='behind' + fi + fi + + if [[ ! $st =~ 'nothing to commit' ]]; then + __CURRENT_GIT_BRANCH_IS_DIRTY='1' + fi +fi diff --git a/zshrc b/zshrc new file mode 100644 index 0000000..61b39ca --- /dev/null +++ b/zshrc @@ -0,0 +1,77 @@ +# Setup variables +PATH="${PATH}:/usr/local/bin:${HOME}/bin" + +export LESS_TERMCAP_mb=$'\e[1;37m' +export LESS_TERMCAP_md=$'\e[1;37m' +export LESS_TERMCAP_me=$'\e[0m' +export LESS_TERMCAP_se=$'\e[0m' +export LESS_TERMCAP_so=$'\e[1;47;30m' +export LESS_TERMCAP_ue=$'\e[0m' +export LESS_TERMCAP_us=$'\e[0;36m' + +# Functions +function env() { + exec /usr/bin/env "$@" | grep -v ^LESS_TERMCAP_ +} + +# Initialize colors. +autoload -U colors +colors + +# Allow for functions in the prompt +setopt PROMPT_SUBST + +# Autoload zsh functions. +fpath=(~/.zsh/functions $fpath) +autoload -U ~/.zsh/functions/*(:t) + +# Enable auto-execution of functions +typeset -ga preexec_functions +typeset -ga precmd_functions +typeset -ga chpwd_functions + +# Append git functions needed for prompt. +preexec_functions+='preexec_update_git_vars' +precmd_functions+='precmd_update_git_vars' +chpwd_functions+='chpwd_update_git_vars' + +# Set the prompt. +PROMPT='%{${fg[cyan]}%}%B%~%b%{${fg[default]}%} %(?.%{${fg[green]}%}O.%{${fg[red]}%}X)%{${fg[default]}%} %# ' +RPROMPT='$(prompt_git_info)%{${fg[default]}%}' + +# Aliases +alias alpine="alpine -p ""{imap.gmail.com/ssl/user=tom.willemsen@archlinux.us}remote_pinerc""" +alias evolus-pencil="/usr/lib/evolus-pencil-svn/evolus-pencil.sh" +alias grep="grep --color=always" +alias ls="ls -F --color=always" + +# Set terminal name to current runnign application +case $TERM in + rxvt*) + precmd () { print -Pn "\e]0;urxvt - %~\a" } + preexec () { print -Pn "\e]0;urxvt - $1\a" } + ;; +esac + +# Set terminal keys +bindkey "\e[1~" beginning-of-line +bindkey "\e[4~" end-of-line +bindkey "\e[5~" beginning-of-history +bindkey "\e[6~" end-of-history +bindkey "\e[3~" delete-char +bindkey "\e[2~" quoted-insert +bindkey "\e[5C" forward-word +bindkey "\e0c" emacs-forward-word +bindkey "\e[5D" backward-word +bindkey "\e0d" emacs-backward-word +bindkey "\e\e[C" forward-word +bindkey "\e\e[D" backward-word +## for rxvt +bindkey "\e[8~" end-of-line +bindkey "\e[7~" beginning-of-line +## for non RH/Debian xterm, can't hurt for RH/Debian xterm +bindkey "\e0H" beginning-of-line +bindkey "\e0F" end-of-line +## for freebsd console +bindkey "\e[H" beginning-of-line +bindkey "\e[F" end-of-line