From f346c58a928443bdc99a70ad141f1d01733c368d Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Tue, 13 Aug 2013 23:05:06 +0200 Subject: Initial commit of my sawfish configuration in vcsh --- .sawfish/rc | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 .sawfish/rc diff --git a/.sawfish/rc b/.sawfish/rc new file mode 100644 index 0000000..5f7da7c --- /dev/null +++ b/.sawfish/rc @@ -0,0 +1,186 @@ +;; -*- 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)) +(define my-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))))) + +(define (send-cz window #!optional arg) + (synthesize-event "C-z" window)) +(define-command 'send-cz send-cz #:spec "%W\nP") + +(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) + +(bind-keys my-keymap + "C" '(run-shell-command "urxvt") + "C-b" 'popup-window-list-menu + "E" '(run-shell-command (getenv "EDITOR")) + "W" '(run-shell-command (getenv "BROWSER")) + "c" '(oni:run-or-raise "urxvt" #:class "URxvt") + "e" '(oni:run-or-raise (getenv "EDITOR") #:class "Emacs") + "w" '(oni:run-or-raise (getenv "BROWSER") #:class "Conkeror") + "z" 'send-cz) + +;; (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-F" 'yank-window-right + "Super-M" 'maximize-window-toggle + "Super-N" 'yank-window-down + "Super-P" 'yank-window-up + "Super-TAB" 'cycle-windows + "Super-`" 'popup-root-menu + "Super-b" 'pack-window-left + "Super-f" 'pack-window-right + "Super-n" 'pack-window-down + "Super-p" 'pack-window-up + "Super-x" oni:extended-keymap + "C-z" my-keymap + ) +;; (grab-keymap global-keymap) + +(add-window-matcher '((WM_CLASS . "^(Firefox|Conkeror)/Navigator$")) + '((position . north-east) + (maximized . all))) + +(define (term-window-position w) + (- (screen-width) (window-width w) 1680)) + +(add-hook 'place-window-hook + (lambda (w) + (case (intern (window-class w)) + ((URxvt) + (resize-window-with-hints w 79 24) + (move-window-to w (term-window-position w) 0) + (grow-window-down w) + t) + ((Emacs) + (resize-window-with-hints w 101 24) + (move-window-to w 0 0) + (grow-window-down w) + t)))) -- cgit v1.2.3-54-g00ecf