]> git.draconx.ca Git - zshconf.git/blobdiff - zshrc
zshrc: Improve keymap setup.
[zshconf.git] / zshrc
diff --git a/zshrc b/zshrc
index f1a3191a957b9ca626ca500b8045b2fd663db578..af977aa27031a7c4b459ea2b64b78e64e6e6ce33 100644 (file)
--- a/zshrc
+++ b/zshrc
@@ -1,38 +1,66 @@
-if [ -n "$HOME" ]; then
-       HISTFILE="$HOME/.zsh_history"
-       SAVEHIST=1000
+# Copyright © 2009-2011, 2017-2018 Nick Bowler
+#
+# Default configuration for interactive zsh.
+#
+# License WTFPL2: Do What The Fuck You Want To Public License, version 2.
+# This is free software: you are free to do what the fuck you want to.
+# There is NO WARRANTY, to the extent permitted by law.
+
+# Default shell options
+setopt EXTENDED_GLOB
+
+if [[ -n $HOME ]]; then
+       HISTFILE=$HOME/.zsh_history
+       SAVEHIST=10000
 fi
-HISTSIZE=1000
+HISTSIZE=10000
 
-bindkey -e
+reset_keymap() {
+  local k del home end
 
-case "$TERM" in
-rxvt*)
-       if [ "$TERM" = "rxvt-unicode" ]; then
-               [ -z "$COLORTERM" ] && export COLORTERM="rxvt-xpm"
-               [ -z "$COLORFGBG" ] && export COLORFGBG="15;default;0"
-       fi
+  case $# in
+  0) : ;;
+  *) export KEYMAP=$1 ;;
+  esac
 
-       bindkey '\e[3~' delete-char
-       bindkey '\e[8~' end-of-line
-       bindkey '\e[7~' beginning-of-line
-;;
-screen*|linux)
-       bindkey '\e[3~' delete-char
-       bindkey '\e[4~' end-of-line
-       bindkey '\e[1~' beginning-of-line
-;;
-xterm)
-       bindkey '\e[3~' delete-char
-       bindkey '\e[F' end-of-line
-       bindkey '\e[H' beginning-of-line
-       bindkey '\eOH' beginning-of-line
-       bindkey '\eOF' end-of-line
-;;
-esac
+  case $TERM in
+  rxvt*)
+    del=('\e[3~') home=('\e[7~') end=('\e[8~') ;;
+  screen*|linux|cygwin)
+    del=('\e[3~') home=('\e[1~') end=('\e[4~') ;;
+  cons25)
+    del=('^?') home=('\e[H') end=('\e[F') ;;
+  xterm*)
+    del=('\e[3~')
+    home=('\e[1~' '\e[H' '\e[OH')
+    end=('\e[4~' '\e[F' '\e[OF')
+    ;;
+  esac
+
+  bindkey -e
+  for k in "${del[@]}"; do bindkey "$k" delete-char; done
+  for k in "${home[@]}"; do bindkey "$k" beginning-of-line; done
+  for k in "${end[@]}"; do bindkey "$k" end-of-line; done
+
+  stty stop ''
+  case $KEYMAP in
+  colemak)
+    bindkey '^R' history-incremental-search-forward
+    bindkey '^P' history-incremental-search-backward
+    stty eof '^S' ;;
+  *)
+    stty eof '^D' ;;
+  esac
+}
+reset_keymap
+
+reset() {
+  command reset
+  reset_keymap
+}
 
 # Set the xterm title
-case "$TERM" in
+case $TERM in
         xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
                 settitle() { print -Pn $'\e]0;%n@%m %33<...<%~%<<\a' }
                 ;;
@@ -44,11 +72,12 @@ case "$TERM" in
                ;;
 esac
 
+# Show the return code of failed commands, but don't be noisy about it.
 precmd() {
        settitle
 
-       if [[ -n "$__NEWRUN" ]]; then
-               RPS1=$'%(0?,,%{\e[31;1m%}RC=%?%{\e[0m%})'
+       if [[ -n $__NEWRUN ]]; then
+               RPS1='%(0?,,%B%F{red}RC=%?%f%b)'
                unset __NEWRUN
        else
                unset RPS1
@@ -60,26 +89,31 @@ preexec() {
 }
 
 # A gentoo-like prompt.
-PS1=$'%B%(!,%F{red},%F{green}%n@)%m %F{blue}%33<...<%~%<< %#%f%b '
+PS1='%B%(!,%F{red},%F{green}%n@)%m %F{blue}%33<...<%~%<< %#%f%b '
 
-if [ -n "$COLORTERM" ]; then
-       # Random colour-related options
+if [ -n $COLORTERM ]; then
+       # Assorted colour-related options
        export MINICOM="-c on"
 fi
 
-if [[ -n "$SSH_CONNECTION" ]]; then
-       PS1="${PS1/green/yellow}"
+if [[ -n $SSH_CONNECTION ]]; then
+       PS1=${PS1/green/yellow}
 fi
 
 # Locale
 export LANG=en_CA.UTF-8
 export LC_COLLATE=ja_JP.UTF-8
 
-# I like colours
-alias ls='ls --color=auto'
+# Default options for various utilities.
+alias ls='ls -N --time-style=long-iso --color=auto'
 alias grep='grep --color=auto'
 
 # I hate mistakes
 alias mv='mv -i'
 alias rm='rm -i'
 alias cp='cp -i'
+
+# Common aliases
+alias vv='$EDITOR ~/.zshrc && source ~/.zshrc'
+alias ll='ls -l'
+alias lr='ls -rtl'