X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=zsh%2Frc;h=26bee55170432a7d1feec4a122c3385cd815251c;hb=0f2fa8e336698fab86f79bc716e5d94457da7931;hp=8c76e62d8655d206f118b091a8b404d312321ab7;hpb=b49af9250a0a049133eb65b918b7dc7a8bd2e583;p=config%2Fdotfiles.git diff --git a/zsh/rc b/zsh/rc index 8c76e62..26bee55 100644 --- a/zsh/rc +++ b/zsh/rc @@ -125,15 +125,21 @@ bindkey -a "^N" history-beginning-search-forward # Use colorized output, necessary for prompts and completions. autoload -U colors && colors +# Some shortcuts for colors. +local red="%{${fg[red]}%}" +local blue="%{${fg[blue]}%}" +local green="%{${fg[green]}%}" +local yellow="%{${fg[yellow]}%}" +local default="%{${fg[default]}%}" + # Set the default prompt. The current host and working directory is displayed, # the exit code of the last command if it wasn't 0, the number of running jobs # if not 0 and a + if this shell is running inside another shell. # The prompt is in green and blue to make easily detectable, the error exit # code in red and bold and the job count in yellow. -PROMPT="%{${fg[green]}%}%B%m%b%{${fg[default]}%}:\ -%{${fg[blue]}%}%B%~%b%{${fg[default]}%} \ -%(1j.%{${fg[yellow]}%}%j%{${fg[default]}%}.)%(2L.+.)%# \ -%(?..(%{${fg[red]}%}%B%?%b%{${fg[default]}%}%) )" +PROMPT="$green%B%m%b$default:$blue%B%~%b$default \ +%(1j.$yellow%j$default.)%# \ +%(?..($red%B%?%b$default%) )" # VCS_Info was added in 4.3.9 but it works in earlier versions too. So load it # if the necessary files are available in ~/.zsh/functions/vcs_info (often a @@ -148,29 +154,39 @@ if [[ $ZSH_VERSION == (4.3.<9->|4.<4->*|<5->*) || fi # Allow substitutions and expansions in the prompt, necessary for - # vcs_info. + # VCS_Info. setopt promptsubst - # Load vcs_info to display information about version control repositories. + # Load VCS_Info to display information about version control repositories. autoload -Uz vcs_info # Only look for git and mercurial repositories; the only I use. zstyle ':vcs_info:*' enable git hg - # Set style of vcs_info display. The current branch (green) and vcs (blue) + # Check the repository for changes so they can be used in %u/%c (see + # below). This comes with a speed penalty for bigger repositories. + zstyle ':vcs_info:*' check-for-changes true + + # Set style of VCS_Info display. The current branch (green) and VCS (blue) # is displayed. If there is an special action going on (merge, rebase) - # it's also displayed (red). + # it's also displayed (red). Also display if there are unstaged or staged + # (%u/%c) changes. zstyle ':vcs_info:*' formats \ - "(%{${fg[green]}%}%b%{${fg[default]}%}:\ -%{${fg[blue]}%}%s%{${fg[default]}%})" + "($green%b%u%c$default:$blue%s$default)" zstyle ':vcs_info:*' actionformats \ - "(%{${fg[green]}%}%b%{${fg[default]}%}/\ -%{${fg[red]}%}%a%{${fg[default]}%}:\ -%{${fg[blue]}%}%s%{${fg[default]}%})" - # Call vcs_info as precmd before every prompt. + "($green%b$default/$red%a$default:$blue%s$default)" + # Set style for formats/actionformats when unstaged (%u) and staged (%c) + # changes are detected in the repository; check-for-changes must be set to + # true for this to work. Thanks to Bart Trojanowski + # (http://jukie.net/~bart/blog/pimping-out-zsh-prompt) for the idea + # (2010-03-11 00:20). + zstyle ':vcs_info:*' unstagedstr '¹' + zstyle ':vcs_info:*' stagedstr '²' + + # Call VCS_Info as precmd before every prompt. prompt_precmd() { vcs_info } add-zsh-hook precmd prompt_precmd - # Display the vcs information in the right prompt. + # Display the VCS information in the right prompt. if [[ $ZSH_VERSION == (4.3.<9->|4.<4->*|<5->*) ]]; then RPROMPT='${vcs_info_msg_0_}' # There is a bug in Zsh below 4.3.9 which displays a wrong symbol when @@ -181,16 +197,15 @@ if [[ $ZSH_VERSION == (4.3.<9->|4.<4->*|<5->*) || fi fi +unset red blue green yellow default + # When screen, xterm or rxvt is used set the name of the window to the # currently running program. # # When a program is started preexec() sets the window's name to it; when it # stops precmd() resets the window's name to 'zsh'. # -# It works with screen, xterm and rxvt. If screen is running in X11 (DISPLAY -# is set) and stumpwm is running then the window title is also set in stumpwm -# using stumpish (I don't use stumpwm actually anymore but I left the changes -# in as a reference). +# It works with screen, xterm and rxvt. # # If a command is run with sudo or if the shell is running as root then a ! is # added at the beginning of the command to make this clear. If a command is @@ -200,11 +215,6 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then # Is set to a non empty value to reset the window name in the next # precmd() call. window_reset=yes - # Is set to a non empty value when the stump window manager is running. - ps aux | grep -q stumpwm | grep -v grep - if [[ $? -eq 0 ]]; then - window_stumpwm=yes - fi # Is set to a non empty value when the shell is running as root. if [[ $(id -u) -eq 0 ]]; then window_root=yes @@ -294,12 +304,6 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then if [[ $TERM == screen* ]]; then print -n "\ek$1\e\\" - # Update window name in stumpwm if running screen in X11 and when - # stumpwm is used. - if [[ -n $DISPLAY && -n $window_stumpwm ]]; then - echo "$1" | stumpish -e "title" > /dev/null - fi - elif [[ $TERM == xterm* || $TERM == rxvt* ]]; then print -n "\e]2;$1\e\\" fi @@ -389,6 +393,11 @@ exec 2>>(while read -r line; do print -n $'\0'; done &) +# Load aliases and similar functions also used by other shells. +if [[ -f ~/.shell/aliases ]]; then + . ~/.shell/aliases +fi + # Make sure aliases are expanded when using sudo. alias sudo='sudo ' @@ -405,40 +414,6 @@ alias -g ...='../..' alias -g ....='../../..' alias -g .....='../../../..' -# Shortcuts for often used programs. -alias c='clear' -alias e='elinks' -alias g='git' -alias m='mutt' -alias v='vim' -alias vi='vim' - -# Improved ls which displays the files in columns (-C), visualizes -# directories, links and other special files (-F) and pages everything through -# less (L). -# -# If available use GNU ls with colorized output. If it isn't available use -# normal ls which needs CLICOLOR_FORCE so it displays colors when used with a -# pager. -ls --color &> /dev/null -if [[ $? -eq 0 ]]; then - alias ls='ls --color' -else - alias ls='CLICOLOR_FORCE=1 ls -G' -fi -# Main ls function. -function ls() { - command ls -C -F $* L -} -# Helper function to list all files. -function la() { - ls -a $* -} -# Helper function to list all files in list format with access rights, etc. -function ll() { - la -l $* -} - # If the window naming feature is used (see above) then use ".zsh" (leading # dot) as title name after running clear so it's clear to me that the window # is empty. I open so much windows that I don't know in which I have something @@ -448,24 +423,6 @@ if [[ -n $window_reset ]]; then alias clear='clear; window_reset=yes; window_precmd reset' fi -# I sometimes confuse editor and shell, print a warning to prevent I exit the -# shell. -alias :q='echo "This is not Vim!" >&2' - -# Automatically use unified diffs. -alias diff='diff -u' - -# Display all files and use human readable sizes. -alias du='du -sh' - -# Use human readable sizes. -alias df='df -h' - -# Edit the mercurial patch queue series file for the current mercurial -# repository in Vim. Also change Vim's pwd to the patches directory so other -# patches can easily be opened. -alias vqs='vim -c "cd $(hg root)/.hg/patches/" "$(hg root)/.hg/patches/series"' - # Display all branches (except stash) in gitk but only 200 commits as this is # much faster. Also put in the background and disown. Thanks to sitaram in # #git on Freenode (2009-04-20 15:51).