X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=zsh%2Frc;fp=zsh%2Frc;h=1a30e83094e3b79c399731437295dcabe49d36da;hb=0388e4464474e155fd41d18266813d9ac5795cac;hp=ee2737b833a4c5976dc378119baa06872d882c0f;hpb=e88bcead0b83f3d5bf2507f971e5c9d27417c9fc;p=config%2Fdotfiles.git diff --git a/zsh/rc b/zsh/rc index ee2737b..1a30e83 100644 --- a/zsh/rc +++ b/zsh/rc @@ -5,9 +5,6 @@ source_debug "sourcing ~/.zsh/rc" # MISCELLANEOUS SETTINGS -# Use Vi(m) style key bindings. -bindkey -v - # Be paranoid, new files are readable/writable by me only. umask 077 @@ -33,6 +30,22 @@ setopt extendedglob setopt ignoreeof +# KEY BINDINGS + +# Not all bindings are done here, only those not specific to a given section. + +# 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 # Make sure every entry in $fpath is unique. @@ -120,11 +133,11 @@ my-vi-history-beginning-search-backward() { zle vi-forward-char fi } -bindkey "^P" my-vi-history-beginning-search-backward -bindkey -a "^P" history-beginning-search-backward # binding for Vi-mode +bindkey '^P' my-vi-history-beginning-search-backward +bindkey -a '^P' history-beginning-search-backward # binding for Vi-mode # Here only Vi-mode is necessary as ^P enters Vi-mode and ^N only makes sense # after calling ^P. -bindkey -a "^N" history-beginning-search-forward +bindkey -a '^N' history-beginning-search-forward # PROMPT SETTINGS @@ -306,21 +319,21 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then [[ -z $window_reset ]] && return # Reset the window name to 'zsh'. - local name="zsh" + local name=zsh # If the function was called with an argument then reset the window # name to '.zsh' (used by clear alias). if [[ -n $1 ]]; then - name=".zsh" + name=.zsh 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= @@ -335,6 +348,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. @@ -365,7 +381,7 @@ zstyle ':completion:*' completer _complete _match _correct _approximate setopt nolistambiguous # Allow completions in the middle of a text, i.e. "/usr/bin/whatever" # completes like "/usr/bin/". Useful when adding new options to commands. -bindkey "^I" expand-or-complete-prefix +bindkey '^I' expand-or-complete-prefix # Try uppercase if the currently typed string doesn't match. This allows # typing in lowercase most of the time and completion fixes the case. zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' @@ -404,10 +420,12 @@ zstyle ':completion:*:(mv|cp):*' ignore-line no # 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 @@ -416,10 +434,11 @@ TRAPINT() { # Colorize stderr. Very useful when looking for errors. Thanks to # http://gentoo-wiki.com/wiki/Zsh for the basic script and Mikachu in #zsh on # Freenode (2010-03-07 04:03) for some improvements (-r, printf). It's not yet -# perfect and doesn't work with some interactive stderr output, but in those +# perfect and doesn't work with su and git for example, but it can handle most +# interactive output quite well (even with no trailing new line) and in those # cases the E alias can be used as workaround. -exec 2>>(while read -r line; do - printf '\e[91m%s\e[0m\n' "$line" +exec 2>>(while read -r -k -u 0 line; do + printf '\e[91m%s\e[0m' "$line"; print -n $'\0'; done &) @@ -482,7 +501,7 @@ if [[ $uname == Linux ]]; then # Settings when creating Debian packages. DEBEMAIL=simon@ruderich.org export DEBEMAIL - DEBFULLNAME="Simon Ruderich" + DEBFULLNAME='Simon Ruderich' export DEBFULLNAME elif [[ $uname == Darwin ]]; then # Mac OS X