magic space binding
[zsh.git] / .zsh / 55_KeyBindings.zsh
index 3044c75..315fd79 100644 (file)
@@ -7,40 +7,43 @@ bindkey -e
 # change some defaults
 bindkey '^Z' push-input            # "suspend" current line
 case "$TERM" in
-        linux)  # Linux console
-                bindkey '\e[1~' beginning-of-line       # Home 
-                bindkey '\e[4~' end-of-line             # End  
-                bindkey '\e[3~' delete-char             # Del
-                bindkey '\e[2~' overwrite-mode          # Insert  
-                ;;
-        screen) # The textmode window manager
-                # In Linux console
-                bindkey '\e[1~' beginning-of-line       # Home
-                bindkey '\e[4~' end-of-line             # End  
-                bindkey '\e[3~' delete-char             # Del
-                bindkey '\e[2~' overwrite-mode          # Insert  
-                bindkey '\e[7~' beginning-of-line       # home
-                bindkey '\e[8~' end-of-line             # end
-                # In rxvt
-                bindkey '\eOc' forward-word             # ctrl cursor right
-                bindkey '\eOd' backward-word            # ctrl cursor left
-                ;;
-#       rxvt)
-#               bindkey '\e[7~' beginning-of-line       # home
-#               bindkey '\e[8~' end-of-line             # end
-#               bindkey '\eOc' forward-word             # ctrl cursor right
-#               bindkey '\eOd' backward-word            # ctrl cursor left
-#               bindkey '\e[3~' delete-char
-#               bindkey '\e[2~' overwrite-mode          # Insert
-#               ;;
-        *xterm*|rxvt)
-                bindkey '\e[H' beginning-of-line        # Home
-                bindkey '\e[F'  end-of-line             # End
-                bindkey '\e[3~' delete-char             # Del
-                bindkey '\e[2~' overwrite-mode          # Insert
-                bindkey "^[[5C"   forward-word          # ctrl cursor right
-                bindkey "^[[5D"   backward-word         # ctrl cursor left
-                ;;
+    linux)  # Linux console
+        bindkey '\e[1~' beginning-of-line       # Home
+        bindkey '\e[4~' end-of-line             # End
+        bindkey '\e[3~' delete-char             # Del
+        bindkey '\e[2~' overwrite-mode          # Insert
+        ;;
+    screen) # The textmode window manager
+        # In Linux console
+        bindkey '\e[1~' beginning-of-line       # Home
+        bindkey '\e[4~' end-of-line             # End
+        bindkey '\e[3~' delete-char             # Del
+        bindkey '\e[2~' overwrite-mode          # Insert
+        bindkey '\e[7~' beginning-of-line       # home
+        bindkey '\e[8~' end-of-line             # end
+        # In rxvt
+        bindkey '\eOc' forward-word             # ctrl cursor right
+        bindkey '\eOd' backward-word            # ctrl cursor left
+        ;;
+    rxvt*)
+        bindkey '\e[7~' beginning-of-line       # home
+        bindkey '\e[8~' end-of-line             # end
+        bindkey '\eOc' forward-word             # ctrl cursor right
+        bindkey '\eOd' backward-word            # ctrl cursor left
+        bindkey '\e[3~' delete-char
+        bindkey '\e[2~' overwrite-mode          # Insert
+        ;;
+    *xterm*)
+        bindkey '\e[H'  beginning-of-line        # Home
+        bindkey '\e[F'  end-of-line             # End
+        # I need the next two when in rxvt via ssh.
+        bindkey '\e[7~' beginning-of-line       # home
+        bindkey '\e[8~' end-of-line             # end
+        bindkey '\e[3~' delete-char             # Del
+        bindkey '\e[2~' overwrite-mode          # Insert
+        bindkey "^[[5C" forward-word          # ctrl cursor right
+        bindkey "^[[5D" backward-word         # ctrl cursor left
+        ;;
 esac
 
 #k# Insert a timestamp on the command line (yyyy-mm-dd)
@@ -54,9 +57,10 @@ bindkey "^Os" sudo-command-line
 ## This function allows you type a file pattern,
 ## and see the results of the expansion at each step.
 ## When you hit return, they will be inserted into the command line.
-autoload -U insert-files
-zle -N insert-files
-bindkey "^Xf" insert-files ## C-x-f
+if is4 && zrcautoload insert-files && zle -N insert-files; then
+    #k# Insert files and test globbing
+    bindkey "^Xf" insert-files ## C-x-f
+fi
 
 ## This set of functions implements a sort of magic history searching.
 ## After predict-on, typing characters causes the editor to look backward
@@ -66,11 +70,11 @@ bindkey "^Xf" insert-files ## C-x-f
 ## line doesn't match something in the history, adding a key performs
 ## standard completion - though editing in the middle is liable to delete
 ## the rest of the line.
-autoload -U predict-on
-zle -N predict-on
-#zle -N predict-off
-bindkey "^X^R" predict-on ## C-x C-r
-#bindkey "^U" predict-off ## C-u
+if is4 && zrcautoload predict-on && zle -N predict-on; then
+    #zle -N predict-off
+    bindkey "^X^R" predict-on ## C-x C-r
+    #bindkey "^U" predict-off ## C-u
+fi
 
 # used when you press M-? on a command line
 alias which-command='whence -a'
@@ -79,6 +83,32 @@ alias which-command='whence -a'
 # this has the disadvantage that in 'bar|baz' it eats all of it.
 typeset WORDCHARS='|'$WORDCHARS
 
-autoload -U edit-command-line
-zle -N edit-command-line
-bindkey '\C-x\C-e' edit-command-line
+# press ctrl-x ctrl-e for editing command line in $EDITOR or $VISUAL
+if is4 && zrcautoload edit-command-line && zle -N edit-command-line; then
+    bindkey '\C-x\C-e' edit-command-line
+fi
+
+# move cursor between chars when typing '', "", (), [], and {}
+magic-single-quotes() { if [[ $LBUFFER[-1] == \' ]]; then zle self-insert; zle .backward-char; else zle self-insert; fi };
+magic-double-quotes() { if [[ $LBUFFER[-1] == \" ]]; then zle self-insert; zle .backward-char; else zle self-insert; fi };
+magic-parentheses() { if [[ $LBUFFER[-1] == \( ]]; then zle self-insert; zle .backward-char; else zle self-insert; fi };
+magic-square-brackets() { if [[ $LBUFFER[-1] == \[ ]]; then zle self-insert; zle .backward-char; else zle self-insert; fi };
+magic-curly-brackets() { if [[ $LBUFFER[-1] == \{ ]]; then zle self-insert; zle .backward-char; else zle self-insert; fi };
+magic-angle-brackets() { if [[ $LBUFFER[-1] == \< ]]; then zle self-insert; zle .backward-char; else zle self-insert; fi };
+bindkey \' magic-single-quotes
+bindkey \" magic-double-quotes
+bindkey \) magic-parentheses
+bindkey \] magic-square-brackets
+bindkey \} magic-curly-brackets
+bindkey \> magic-angle-brackets
+zle -N magic-single-quotes
+zle -N magic-double-quotes
+zle -N magic-parentheses
+zle -N magic-square-brackets
+zle -N magic-curly-brackets
+zle -N magic-angle-brackets
+
+# Show what the completion system is trying to complete with at a given point
+bindkey '^Xh' _complete_help
+
+bindkey " " magic-space