X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=zsh%2Frc;h=d440e2fe630464d84bc641aeb4e5aa3f08320e2f;hb=7bf679fea082220666c375e347f59f0a4ccde907;hp=3d6b28d5fc94186c5d77ab3a2552252773bf28f3;hpb=5eb3974ac34161ab19b56f1a51a486ea672c70b2;p=config%2Fdotfiles.git diff --git a/zsh/rc b/zsh/rc index 3d6b28d..d440e2f 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 -M viins 'jj' vi-cmd-mode + +# I don't need the arrow keys, I use ^N and ^P for this (see below). +bindkey -M viins -r '^[OA' '^[OB' '^[OC' '^[OD' '^[[A' '^[[B' '^[[C' '^[[D' +# Also not in Vi mode. +bindkey -M vicmd -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 @@ -227,8 +240,10 @@ unset red blue green yellow default # # 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 -# running on a different computer with ssh a @ is added at the beginning. This -# only works if the .zshrc on the server also uses this command. +# running on a different computer with ssh a @ is added at the beginning. If +# 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. 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. @@ -283,6 +298,12 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then # different computer. if [[ -n $SSH_CONNECTION ]]; then program_name="@$program_name" + + # If screen is running in SSH then display "@:hostname" as title + # in the term/outer screen. + if [[ $program_name == @screen ]]; then + program_name="@:${$(hostname)//.*/}" + fi fi # Set the window name to the currently running program. @@ -297,11 +318,11 @@ 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(). @@ -318,14 +339,15 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then } # Sets the window title. Works with screen, xterm and rxvt. - window_title() { - if [[ $TERM == screen* ]]; then + if [[ $TERM == screen* ]]; then + window_title() { print -n "\ek$1\e\\" - - elif [[ $TERM == xterm* || $TERM == rxvt* ]]; then + } + elif [[ $TERM == xterm* || $TERM == rxvt* ]]; then + window_title() { print -n "\e]2;$1\e\\" - fi - } + } + fi # Add the preexec() and precmd() hooks. add-zsh-hook preexec window_preexec @@ -355,7 +377,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 +426,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 &) @@ -468,7 +491,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