(require 'sawfish.wm.keymaps) ;;;;; Global Keymaps ;; configure my keys (more customized than sawfish-ui allows) (custom-set-keymap (quote global-keymap) (quote (keymap ))) ;; change desktops... (defun next-workspace-xy (dx dy) "Like next-workspace, but 2-dimensional. Wraps within rows and columns." (interactive) (let* ( ; The workspace IDs are contiguous, but don't necessarily start at 0. ; They tend to become more negative, as WSs are added and removed. (limits (workspace-limits)) (num-workspaces (+ 1 (- (cdr limits) (car limits)))) (rows pager-workspaces-per-column) ; there may be nonexistent WSs in the rightmost column (cols (ceiling (/ num-workspaces rows))) (ws (- current-workspace (car limits))) ; allow non-zero starting point (cx (quotient ws rows)) (cy (modulo ws rows)) (nx (modulo (+ cx dx) cols)) (ny (modulo (+ cy dy) rows)) (nws (+ ny (* rows nx))) (nws (+ nws (car limits))) ; allow workspace numbers starting at non-zero ;(nws (max nws (car limits))) ; bounds check ;(nws (min nws (cdr limits))) ; avoid creating new WSs ;(print-debug "%s ws's (%sx%s) %s (%s,%s) + (%s,%s) -> (%s,%s) %s\n" ; num-workspaces cols rows ws cx cy dx dy nx ny nws) ) (select-workspace nws) ) ) ;(bind-keys global-keymap "C-Left" '(move-viewport -1 0)) ;(bind-keys global-keymap "C-Left" '(next-workspace (- pager-workspaces-per-column))) (bind-keys global-keymap "C-Left" '(next-workspace-xy -1 0)) ;(bind-keys global-keymap "C-Right" '(move-viewport 1 0)) ;(bind-keys global-keymap "C-Right" '(next-workspace pager-workspaces-per-column)) (bind-keys global-keymap "C-Right" '(next-workspace-xy 1 0)) ;(bind-keys global-keymap "C-Up" '(move-viewport 0 -1)) ;(bind-keys global-keymap "C-Up" '(my-next-workspace -1)) (bind-keys global-keymap "C-Up" '(next-workspace-xy 0 -1)) ;(bind-keys global-keymap "C-Down" '(move-viewport 0 1)) ;(bind-keys global-keymap "C-Down" '(my-next-workspace 1)) (bind-keys global-keymap "C-Down" '(next-workspace-xy 0 1)) (bind-keys global-keymap "H-c" 'insert-workspace) (bind-keys global-keymap "H-d" 'merge-next-workspace) ;; move the mouse cursor around... (bind-keys global-keymap "S-C-Down" 'move-cursor-down) (bind-keys global-keymap "S-C-Up" 'move-cursor-up) (bind-keys global-keymap "S-C-Left" 'move-cursor-left) (bind-keys global-keymap "S-C-Right" 'move-cursor-right) (bind-keys global-keymap "S-M-Down" 'move-cursor-down-fine) (bind-keys global-keymap "S-M-Up" 'move-cursor-up-fine) (bind-keys global-keymap "S-M-Left" 'move-cursor-left-fine) (bind-keys global-keymap "S-M-Right" 'move-cursor-right-fine) ;; misc (bind-keys global-keymap "C-M-Delete" 'quit) (bind-keys global-keymap "M-Tab" 'cycle-windows) ;; not sure how to do this: ;;((synthesize-event "Button1-Click" nil) . "S-C-Space") ;; execute programs (bind-keys global-keymap "M-C-Prior" '(run-shell-command "aterm")) ;(bind-keys global-keymap "M-C-Prior" '(run-shell-command "Eterm -t trans")) ;(bind-keys global-keymap "M-C-Next" '(run-shell-command "Eterm -t trans --cmod 192")) ;(bind-keys global-keymap "M-C-Next" '(run-shell-command "Eterm -t trans --cmod 160")) (bind-keys global-keymap "M-C-Next" '(run-shell-command "Eterm -t trans --cmod 128")) ;;(bind-keys global-keymap "M-C-Next" '(run-shell-command "Eterm")) (bind-keys global-keymap "M-C-r" '(run-shell-command "~/.sawfish/bin/randtheme.sh")) (bind-keys global-keymap "M-C-f" '(run-shell-command "~/.sawfish/bin/randfont.sh")) (bind-keys global-keymap "M-C-l" '(run-shell-command "xrefresh")) (bind-keys global-keymap "M-C-Home" '(run-shell-command "dillo")) (bind-keys global-keymap "M-C-End" '(run-shell-command "pyrpn")) (bind-keys global-keymap "M-C-Escape" '(run-shell-command "xlock -mode blank")) (bind-keys global-keymap "S-M-C-Up" '(run-shell-command "amixer -c 0 set PCM 2dB+")) (bind-keys global-keymap "S-M-C-Down" '(run-shell-command "amixer -c 0 set PCM 2dB-")) (bind-keys global-keymap "S-M-C-Right" '(run-shell-command "moosic next")) (bind-keys global-keymap "S-M-C-Left" '(run-shell-command "moosic prev")) (bind-keys global-keymap "M-C-ISO_Left_Tab" '(run-shell-command "moosic togglepause")) (bind-keys global-keymap "H-Prior" '(run-shell-command "volctrl Master +2")) (bind-keys global-keymap "H-Next" '(run-shell-command "volctrl Master -2")) (bind-keys global-keymap "H-Home" '(run-shell-command "xmodmap ~/.Xmodmap.dvorak")) (bind-keys global-keymap "H-End" '(run-shell-command "xmodmap ~/.Xmodmap.qwerty")) ;;;;; Window Keymaps (custom-set-keymap (quote window-keymap) (quote (keymap ))) (bind-keys window-keymap "H-Space" 'move-window-interactively) ;; Keyboard "bump into next obstacle" movement (bind-keys window-keymap "H-Down" 'pack-window-down) (bind-keys window-keymap "H-Right" 'pack-window-right) (bind-keys window-keymap "H-Up" 'pack-window-up) (bind-keys window-keymap "H-Left" 'pack-window-left) ;; Keyboard "bump into next obstacle" resizes (bind-keys window-keymap "H-S-Down" 'grow-window-down) (bind-keys window-keymap "H-S-Right" 'grow-window-right) (bind-keys window-keymap "H-S-Up" 'grow-window-up) (bind-keys window-keymap "H-S-Left" 'grow-window-left) ;;(custom-set-keymap (quote window-keymap) (quote (keymap (move-window-interactively . "M-Button1-Move") (popup-window-menu . "M-Button3-Click") (resize-window-interactively . "M-Button2-Move") (lower-window . "M-C-Down") (raise-window . "M-C-Up") (maximize-window-fullscreen-toggle . "M-C-Right") (maximize-fill-window-toggle . "M-C-t") (toggle-window-sticky . "M-C-s") (set-frame:unframed . "M-C-b") (set-frame:default . "M-C-n") (delete-window . "M-F4")))) (bind-keys window-keymap "M-Button1-Move" 'move-window-interactively) (bind-keys window-keymap "H-Button1-Move" 'move-window-interactively) (bind-keys window-keymap "M-Button2-Click" 'popup-window-menu) (bind-keys window-keymap "H-Button2-Click" 'popup-window-menu) (bind-keys window-keymap "M-Button3-Move" 'resize-window-interactively) (bind-keys window-keymap "H-Button3-Move" 'resize-window-interactively) (bind-keys window-keymap "M-C-Down" 'lower-window) (bind-keys window-keymap "M-H-Down" 'lower-window) (bind-keys window-keymap "M-C-Up" 'raise-window) (bind-keys window-keymap "M-H-Up" 'raise-window) (bind-keys window-keymap "M-C-Right" 'maximize-window-fullscreen-toggle) (bind-keys window-keymap "M-H-Right" 'maximize-window-fullscreen-toggle) (bind-keys window-keymap "M-C-t" 'maximize-fill-window-toggle) (bind-keys window-keymap "H-m" 'maximize-fill-window-toggle) (bind-keys window-keymap "M-C-s" 'toggle-window-sticky) (bind-keys window-keymap "H-s" 'toggle-window-sticky) (bind-keys window-keymap "M-C-b" 'set-frame:unframed) (bind-keys window-keymap "H-b" 'set-frame:unframed) (bind-keys window-keymap "M-C-n" 'set-frame:default) (bind-keys window-keymap "H-n" 'set-frame:default) (bind-keys window-keymap "M-F4" 'delete-window) (bind-keys window-keymap "H-x" 'delete-window) ;(bind-keys window-keymap "H-." (lambda () (print-debug "Hi there.\n"))) (bind-keys window-keymap "H-." (lambda (w) (interactive "%W") (resize-by-factor w 1.2))) (bind-keys window-keymap "H-," (lambda (w) (interactive "%W") (resize-by-factor w (/ 1 1.2)))) ;(bind-keys window-keymap "M-." (lambda (w) (interactive "%W") (resize-by-factor w 1.2))) ;(bind-keys window-keymap "M-," (lambda (w) (interactive "%W") (resize-by-factor w (/ 1 1.2)))) ;; lets me rewrite key events before they're sent to apps (define-match-window-setter 'keymap-trans (lambda (w prop value) (declare (unused prop)) (let ((keymap (or (window-get w 'keymap) (window-put w 'keymap (copy-sequence window-keymap))))) (mapcar (lambda (pair) ; pair of from and to keys (bind-keys keymap (car pair) (lambda () (interactive) (synthesize-event (lookup-event (cadr pair)) (input-focus))))) value)))) ;; remap some keys: (add-window-matcher 'WM_CLASS "Xchat/xchat" '(keymap-trans . (("C-f" "Right") ("C-l" "C-f")))) (add-window-matcher 'WM_CLASS "Dillo" '(keymap-trans . (("M-Left" "BackSpace") ("M-Right" "S-BackSpace")))) (add-window-matcher 'WM_NAME "VIM" '(keymap-trans . (("Button4-Click" "Up") ("Button5-Click" "Down")))) (require 'tab-keymap) (require 'my-keymap-local)