;; -*- mode: sawfish; -*- (require 'rep.regexp) (require 'sawfish.wm.commands.grow-pack) (require 'sawfish.wm.commands.shrink-yank) (require 'sawfish.wm.commands.x-cycle) (require 'sawfish.wm.ext.match-window) (require 'sawfish.wm.util.display-window) (require 'sawfish.wm.util.prompt) (require 'sawfish.wm.util.window-order) (require 'sawfish.wm.util.stacking) (define oni:window-packing-keymap (make-keymap)) (define oni:window-growing-keymap (make-keymap)) (define oni:window-shrinking-keymap (make-keymap)) (define oni:window-yanking-keymap (make-keymap)) (define oni:window-management-keymap (make-keymap)) (define oni:extended-keymap (make-keymap)) (defun oni:emacs-main-window-p (window) "Check wether or not WINDOW is Emacs' main window." (let ((name (window-name window))) (and (string-match "^emacs: " name) (not (string= "emacs: *Sauron*" name))))) (defun oni:place-emacs-windows () "Place Emacs' main, sauron and optionally speedbar windows the way I like them." (let ((main-window (car (filter-windows oni:emacs-main-window-p))) (sauron-window (get-window-by-name "emacs: *Sauron*")) (speedbar-window (get-window-by-name "^Speedbar " #:regex t))) (move-window-to main-window 0 0) (move-window-to sauron-window 0 0) (set-window-type sauron-window 'transient) (pack-window-down sauron-window) (grow-window-right sauron-window) (when speedbar-window (move-window-to speedbar-window 0 0) (set-window-type speedbar-window 'transient) (yank-window-right main-window) (grow-window-down speedbar-window)) (grow-window-down main-window) (grow-window-right main-window))) (define-command 'oni:place-emacs-windows oni:place-emacs-windows) (defun oni:run-or-raise (command #!key id name class role) "Either run COMMAND, or if a window with class CLASS is found, raise it." (let* ((windows (filter (lambda (x) (and (or (not id) (equal (window-id x) id)) (or (not name (equal (window-name x) name))) (or (not class) (equal (window-class x) class)) (or (not role) (equal (window-role x) role)))) (window-order))) (first (car windows)) (w (if (equal first (input-focus)) (last windows) first))) (if w (display-window w) (call-command `(run-shell-command ,command))))) (setq custom-show-symbols t) (setq default-frame-style 'naquadah) (setq default-font (get-font-typed "Xft" "Monaco-10")) (setq grow-is-maximize nil) (setq prompt-color (cons (get-color "#eeeeec") (get-color "#111113"))) (setq user-apps-menu '(("Emacs" (system "emacsclient -c &")) ("Terminal" (system "urxvt &")))) (bind-keys oni:window-packing-keymap "p" 'pack-window-up "n" 'pack-window-down "b" 'pack-window-left "f" 'pack-window-right) (bind-keys oni:window-growing-keymap "p" 'grow-window-up "n" 'grow-window-down "b" 'grow-window-left "f" 'grow-window-right) (bind-keys oni:window-shrinking-keymap "p" 'shrink-window-up "n" 'shrink-window-down "b" 'shrink-window-left "f" 'shrink-window-right) (bind-keys oni:window-yanking-keymap "p" 'yank-window-up "n" 'yank-window-down "b" 'yank-window-left "f" 'yank-window-right) (bind-keys oni:window-management-keymap "M" 'maximize-window-toggle "p" oni:window-packing-keymap "g" oni:window-growing-keymap "s" oni:window-shrinking-keymap "y" oni:window-yanking-keymap "E" 'oni:place-emacs-windows) (bind-keys global-keymap "XF86AudioPlay" '(run-shell-command "mpc toggle") "XF86AudioStop" '(run-shell-command "mpc stop") "XF86AudioMute" '(run-shell-command "amixer sset Master toggle") "XF86AudioLowerVolume" '(run-shell-command "mpc volume -5") "XF86AudioRaiseVolume" '(run-shell-command "mpc volume +5") "XF86AudioPrev" '(run-shell-command "mpc prev") "XF86AudioNext" '(run-shell-command "mpc next")) (bind-keys oni:extended-keymap "w" oni:window-management-keymap "Super-b" 'popup-window-list-menu) ;; (ungrab-keymap global-keymap) (bind-keys global-keymap "C-M-l" '(run-shell-command "i3lock -c \"#000000\"") "C-Super-B" 'shrink-window-left "C-Super-F" 'shrink-window-right "C-Super-N" 'shrink-window-down "C-Super-P" 'shrink-window-up "C-Super-TAB" 'cycle-class "C-Super-`" 'popup-window-menu "C-Super-b" 'grow-window-left "C-Super-f" 'grow-window-right "C-Super-n" 'grow-window-down "C-Super-p" 'grow-window-up "Menu" 'popup-root-menu "Super-!" '(run-shell-command (prompt-for-string "Run: ")) "Super-:" 'call-command "Super-B" 'yank-window-left "Super-C" '(run-shell-command "urxvt") "Super-E" '(run-shell-command (getenv "EDITOR")) "Super-F" 'yank-window-right "Super-M" 'maximize-window-toggle "Super-N" 'yank-window-down "Super-P" 'yank-window-up "Super-TAB" 'cycle-windows "Super-W" '(run-shell-command (getenv "BROWSER")) "Super-`" 'popup-root-menu "Super-b" 'pack-window-left "Super-c" '(oni:run-or-raise "urxvt" #:class "URxvt") "Super-e" '(oni:run-or-raise (getenv "EDITOR") #:class "Emacs") "Super-f" 'pack-window-right "Super-n" 'pack-window-down "Super-p" 'pack-window-up "Super-w" '(oni:run-or-raise (getenv "BROWSER") #:class "Conkeror") "Super-x" oni:extended-keymap ) ;; (grab-keymap global-keymap) (add-window-matcher '((WM_CLASS . "^(Firefox|Conkeror)/Navigator$")) '((position . north-east) (maximized . all)))