X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=zsh%2Frc;h=94d7fe37208874c0b79a2cafb23414ce24f41568;hb=81fe12757189bc144a22271f5bc669dd98ea2c37;hp=f55df48041f61980ff2d982ce52a3a53b06c6434;hpb=472231df37f6e5e46d41e569a58aafd645adf1c1;p=config%2Fdotfiles.git diff --git a/zsh/rc b/zsh/rc index f55df48..94d7fe3 100644 --- a/zsh/rc +++ b/zsh/rc @@ -37,6 +37,14 @@ setopt ignoreeof # Use Vi(m) style key bindings. bindkey -v +# Also use jj to exit insert mode. +bindkey 'jj' vi-cmd-mode + +# I don't need the arrow keys, I use ^N and ^P for this (see below). +bindkey -r '^[OA' '^[OB' '^[OC' '^[OD' '^[[A' '^[[B' '^[[C' '^[[D' +# Also not in Vi mode. +bindkey -a -r '^[OA' '^[OB' '^[OC' '^[OD' '^[[A' '^[[B' '^[[C' '^[[D' + # FUNCTION SETTINGS @@ -137,7 +145,8 @@ bindkey -a '^N' history-beginning-search-forward # Use colorized output, necessary for prompts and completions. autoload -U colors && colors -# Some shortcuts for colors. +# Some shortcuts for colors. The %{...%} tells zsh that the data in between +# doesn't need any space, necessary for correct prompt draw. local red="%{${fg[red]}%}" local blue="%{${fg[blue]}%}" local green="%{${fg[green]}%}" @@ -236,6 +245,9 @@ unset red blue green yellow default # screen is running on the remote machine instead of @screen @:hostname # (hostname replaced by the machine's hostname) is displayed. This only works # if the .zshrc on the server also uses this command. +# +# screen* is necessary as `screen` uses screen.linux for example for a linux +# console. 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. @@ -275,7 +287,7 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then m) program_name=mutt ;; - v|vi) + v) program_name=vim ;; esac @@ -318,13 +330,13 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then fi # Prepend prefixes like in window_preexec(). + if [[ -n $window_root ]]; then + name="!$name" + fi if [[ -n $SSH_CONNECTION ]]; then - window_title "@$name" - elif [[ -n $window_root ]]; then - window_title "!$name" - else - window_title $name + name="@$name" fi + window_title $name # Just reset the name, so no screen reset necessary for the moment. window_reset= @@ -339,6 +351,9 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then window_title() { print -n "\e]2;$1\e\\" } + else + # Fallback if another TERM is used. + window_title() { } fi # Add the preexec() and precmd() hooks. @@ -390,12 +405,14 @@ zstyle ':completion:*' group-name '' zstyle ':completion:*:functions' ignored-patterns '_*' # Ignore parent directory. zstyle ':completion:*:(cd|mv|cp):*' ignore-parents parent pwd -# When unsetting variables make sure every variable name is only suggested -# once. -zstyle ':completion:*:unset:*' ignore-line yes -# When working with Mercurial and Git don't complete the same file multiple -# times. Very useful when completing file names. -zstyle ':completion:*:(hg|git)*:*' ignore-line yes +# Always complete one value (file name) only once in the current line. This +# makes it easy to complete multiple values because I can just press tab to +# get all possible values. Otherwise I would have to skip the first value +# again and again. +zstyle ':completion:*' ignore-line yes +# Except for mv and cp, because I often want to use to similar names, so I +# complete to the same and change it. +zstyle ':completion:*:(mv|cp):*' ignore-line no # CUSTOM ALIASES AND FUNCTIONS @@ -406,10 +423,12 @@ zstyle ':completion:*:(hg|git)*:*' ignore-line yes # typing the command. # # Thanks to Vadim Zeitlin for a fix (--) so lines -# starting with - don't cause errors. +# starting with - don't cause errors; and to Nadav Har'El +# for a fix (-r) to handle whitespace/quotes +# correctly, both on the Zsh mailing list. TRAPINT() { # Store the current buffer in the history. - zle && print -s -- $BUFFER + zle && print -s -r -- $BUFFER # Return the default exit code so Zsh aborts the current command. return $1 @@ -479,14 +498,16 @@ tig() { # OS SPECIFIC SETTINGS -if [[ $(uname) == Linux ]]; then +local uname=$(uname) + +if [[ $uname == Linux ]]; then # Settings when creating Debian packages. DEBEMAIL=simon@ruderich.org export DEBEMAIL DEBFULLNAME='Simon Ruderich' export DEBFULLNAME -elif [[ $(uname) == Darwin ]]; then # Mac OS X +elif [[ $uname == Darwin ]]; then # Mac OS X # Store the current clipboard in CLIPBOARD before every command so it can # be used in commands. os_darwin_preexec() { @@ -514,18 +535,16 @@ source_config ~/.zsh host rc ${$(hostname)//.*/} # RUN COMMANDS # If not already in screen reattach to a running session or create a new one. -# -# screen* is necessary as `screen` uses screen.linux for example for a linux -# console which would otherwise cause an infinite loop. -if [[ $TERM != screen* && $TERM != 'dumb' ]]; then +# This also starts screen one a remote server when connecting through ssh. +if [[ $TERM != dumb && -z $STY ]]; then # Get running detached sessions. session=$(screen -list | grep 'Detached' | awk '{ print $1; exit }') # Create a new session if none is running. if [[ -z $session ]]; then - screen + exec screen # Reattach to a running session. else - screen -r $session + exec screen -r $session fi fi