X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=zsh%2Frc;h=f82abc75268ba2332901abcf196f5477e7c1a60d;hb=bf112c3be047b2e3849b583dc3c8932e1b38d39d;hp=f9b13b0d615e82fb7d7f03fdcd9fe9c24af3c7f6;hpb=e005fe62512b9ec910ab3cc26c773ba5dc79b7e6;p=config%2Fdotfiles.git diff --git a/zsh/rc b/zsh/rc index f9b13b0..f82abc7 100644 --- a/zsh/rc +++ b/zsh/rc @@ -37,8 +37,9 @@ setopt ignoreeof # Use Vi(m) style key bindings. bindkey -v -# Also use jj to exit insert mode. +# Use jj and jk to exit insert mode. bindkey 'jj' vi-cmd-mode +bindkey 'jk' 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' @@ -61,7 +62,7 @@ fpath=(~/.zsh/functions $fpath) # Autoload my functions (except completion functions and hidden files). Thanks # to caphuso from the Zsh example files for this idea. if [[ -d ~/.zsh/functions ]]; then - autoload ${fpath[1]}/^_*(^/:t) + autoload -Uz ${fpath[1]}/^_*(^/:t) fi # Simulate hooks using _functions arrays for Zsh versions older than 4.3.4. At @@ -95,8 +96,8 @@ fi # Autoload add-zsh-hook to add/remove zsh hook functions easily. autoload -Uz add-zsh-hook -# Load zmv (zsh move) which is powerful to rename files. -autoload zmv +# Load zmv (zsh move) which is a powerful file renamer. +autoload -Uz zmv # HISTORY SETTINGS @@ -113,10 +114,10 @@ setopt incappendhistory setopt histignoredups # Vim like completions of previous executed commands (also enter Vi-mode). If # called at the beginning it just recalls old commands (like cursor up), if -# called after typing something, only lines starting with the typed are -# returned. Very useful to get old commands quickly. Thanks to Mikachu in #zsh -# on Freenode (2010-01-17 12:47) for the information how to a use function -# with bindkey. +# called after typing something, only lines starting with the typed text are +# returned. Very useful to get old commands quickly - in addition to the +# history commands (!..). Thanks to Mikachu in #zsh on Freenode (2010-01-17 +# 12:47 CET) for the information how to a use function with bindkey. zle -N my-vi-history-beginning-search-backward my-vi-history-beginning-search-backward() { local not_at_beginning_of_line @@ -139,14 +140,26 @@ bindkey -a '^P' history-beginning-search-backward # binding for Vi-mode # after calling ^P. bindkey -a '^N' history-beginning-search-forward +# Automatically push cd-ed directories on the directory stack. +setopt autopushd +# Don't push duplicates on the directory stack. +setopt pushdignoredups +# Exchange the meaning of + and - when specifying a directory on the stack. +# This way cd - lists the last used directory first, which is more +# natural because cd - goes to the last directory. +setopt pushdminus + # PROMPT SETTINGS # Use colorized output, necessary for prompts and completions. -autoload -U colors && colors +autoload -Uz colors && colors + +# Necessary for $EPOCHSECONDS, the UNIX time. +zmodload zsh/datetime # Some shortcuts for colors. The %{...%} tells zsh that the data in between -# doesn't need any space, necessary for correct prompt draw. +# doesn't need any space, necessary for correct prompt drawing. local red="%{${fg[red]}%}" local blue="%{${fg[blue]}%}" local green="%{${fg[green]}%}" @@ -195,17 +208,17 @@ if [[ $ZSH_VERSION == (4.3.<9->|4.<4->*|<5->*) || # 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). + # (2010-03-11 00:20 CET). zstyle ':vcs_info:*' unstagedstr '¹' zstyle ':vcs_info:*' stagedstr '²' - # Default to running vcs_info. If possible we prevent running it later for + # Default to run vcs_info. If possible we prevent running it later for # speed reasons. If set to a non empty value vcs_info is run. FORCE_RUN_VCS_INFO=1 # Cache system inspired by Bart Trojanowski # (http://jukie.net/~bart/blog/pimping-out-zsh-prompt). - #zstyle ':vcs_info:*+pre-get-data:*' hooks pre-get-data + zstyle ':vcs_info:*+pre-get-data:*' hooks pre-get-data +vi-pre-get-data() { # Only Git and Mercurial support and need caching. Abort if any other # VCS is used. @@ -245,9 +258,10 @@ else fi # Set the prompt. A two line prompt is used. On the top left the current -# working directory is displayed, on the right vcs_info (if available). On the -# bottom left current user name and host is shown, the exit code of the last -# command if it wasn't 0, the number of running jobs if not 0. +# working directory is displayed, on the right vcs_info (if available) and the +# current time in hex. On the bottom left current user name and host is shown, +# the exit code of the last command if it wasn't 0, the number of running jobs +# if not 0. # # 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. @@ -269,10 +283,11 @@ prompt_precmd() { local width width_left width_right local top_left top_right - # Display vcs_info (if used) on the right in the top prompt. - top_right="${vcs_info_msg_0_}" + # Display the current time in HEX in bright blue and vcs_info (if used) on + # the right in the top prompt. + top_right="$vcs_info_msg_0_($blue%B0x$(([##16] EPOCHSECONDS))%b$default)" width_right=${#${(S%%)top_right//$~zero/}} - # Remove vcs_info if it would get too long. + # Remove it if it would get too long. if [[ $(( COLUMNS - 4 - 1 - width_right )) -lt 0 ]]; then top_right= width_right=0 @@ -292,7 +307,6 @@ prompt_precmd() { $blue%B'%b$default\ $green%B%n%b$default@$green%B%m%b$default %(1j.$yellow%j$default.)%# \ %(?..($red%B%?%b$default%) )" - } add-zsh-hook precmd prompt_precmd @@ -439,23 +453,25 @@ fi # COMPLETION SETTINGS -# Load the complist module which provides additions to completion lists -# (coloring, scrollable). +# Load the complist module which provides additional features to completion +# lists (coloring, scrolling). zmodload zsh/complist # Use new completion system, store dumpfile in ~/.zsh/cache to prevent # cluttering of ~/. $fpath must be set before calling this. Thanks to Adlai in -# #zsh on Freenode (2009-08-07 21:05) for reminding me of the $fpath problem. -autoload -U compinit && compinit -d ~/.zsh/cache/zcompdump +# #zsh on Freenode (2009-08-07 21:05 CEST) for reminding me of the $fpath +# problem. +autoload -Uz compinit && compinit -d ~/.zsh/cache/zcompdump -# Use cache to speed up completions. +# Use cache to speed up some slow completions (dpkg, perl modules, etc.). zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path ~/.zsh/cache # Complete arguments and fix spelling mistakes when possible. zstyle ':completion:*' completer _complete _match _correct _approximate -# Make sure the list of possible completions is displayed after pressing -# the first time. +# If there are multiple matches after pressing always display them +# immediately without requiring another . a lists aaa, aab, aac as +# possible completions if the directory contains aaa, aab, aac, bbb. 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. @@ -464,18 +480,21 @@ bindkey '^I' expand-or-complete-prefix # typing in lowercase most of the time and completion fixes the case. zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' -# Use ls like colors for completions. +# Use ls-like colors for completions. zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} # Make completion lists scrollable so "do you wish to see all n possibilities" -# is no longer displayed. +# is no longer displayed. Display current position in percent (%p). zstyle ':completion:*' list-prompt '%p' -# Display group name (like 'external command', 'alias', etc.) when there are -# multiple matches in bold. +# Display group name (%d) (like 'external command', 'alias', etc.), in bold. zstyle ':completion:*' format ' %B%d%b:' # Display different types of matches separately. zstyle ':completion:*' group-name '' +# Don't draw trailing / in bold (new in zsh 4.3.11). Thanks to Mikachu in #zsh +# on Freenode for the fix (2010-12-17 13:46 CET). +zle_highlight=(suffix:none) + # Ignore completion functions. zstyle ':completion:*:functions' ignored-patterns '_*' # Ignore parent directory. @@ -489,9 +508,15 @@ zstyle ':completion:*' ignore-line yes # complete to the same and change it. zstyle ':completion:*:(mv|cp):*' ignore-line no # Don't complete ./config.* files, this makes running ./configure much -# simpler. Thanks to Nomexous in #zsh on Freenode (2010-03-16 01:54) +# simpler. Thanks to Nomexous in #zsh on Freenode (2010-03-16 01:54 CET) zstyle ':completion:*:*:-command-:*' ignored-patterns './config.*' +# Don't complete unwanted files with Vim. Thanks to Nomexous in #zsh on +# Freenode (2010-06-06 04:54 CEST). See below for a way to complete them. +zstyle ':completion:*:*:vim:*:all-files' ignored-patterns \ + '*.aux' '*.log' '*.pdf' \ + '*.class' + # Provide a fallback completer which always completes files. Useful when Zsh's # completion is too "smart". Thanks to Frank Terbeck # (http://www.zsh.org/mla/users/2009/msg01038.html). @@ -519,17 +544,6 @@ TRAPINT() { return $1 } -# Colorize stderr in red. 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 su and git for example, but it can handle most -# interactive output quite well (even with no trailing new line) and in cases -# it doesn't work, the E alias can be used as workaround. -exec 2>>(while read -r -k -u 0 line; do - printf '\e[91m%s\e[0m' "$line"; - print -n $'\0'; -done &) - # Load aliases and similar functions also used by other shells. if [[ -f ~/.shell/aliases ]]; then . ~/.shell/aliases @@ -611,8 +625,8 @@ source_config ~/.zsh/rc.local # RUN COMMANDS # If not already in screen reattach to a running session or create a new one. -# This also starts screen one a remote server when connecting through ssh. -if [[ $TERM != dumb && -z $STY ]]; then +# This also starts screen on a remote server when connecting through ssh. +if [[ $TERM != dumb && $TERM != linux && -z $STY ]]; then # Get running detached sessions. session=$(screen -list | grep 'Detached' | awk '{ print $1; exit }') @@ -628,6 +642,26 @@ if [[ $TERM != dumb && -z $STY ]]; then fi fi +# Colorize stderr in red. 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 CET) for some improvements (-r, printf). It's not +# yet 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 +# cases it doesn't work, the E alias can be used as workaround. +# +# Moved in the "run commands" section to prevent one unnecessary zsh process +# when starting screen (see above). +exec 2>>(while read -r -k -u 0 line; do + printf '\e[91m%s\e[0m' "$line"; + print -n $'\0'; +done &) + +# Run reminder and redisplay it every four hours (if it's available). +PERIOD=14400 +periodic() { + which rem > /dev/null && [ -f ~/.reminders ] && rem -h +} + source_debug ". ~/.zsh/rc (done)"