config/sawfish/rc

151 lines
4.4 KiB
Plaintext
Raw Normal View History

(require 'sawfish.wm.defaults)
;;; Programs to run on startup
(system "setxkbmap dvorak")
(system "setxkbmap -option compose:caps")
(system "xscreensaver &")
(system "lxpanel &")
;;; Custom functions
(defun launch-app (app)
(case app
('chrome (system "google-chrome --disable-gpu-compositing &"))
('term-code (system "gnome-terminal -t Code &"))
('term-quick (system "gnome-terminal -t Quick &"))
('term-std (system "gnome-terminal &")) ))
; Note that the documentation for 'insert-workspace' is wrong, and we insert
; *after* the provided value, not before
(defun launch-app-in-new-workspace (app)
(progn
(select-workspace (insert-workspace (cdr (workspace-limits))))
(launch-app app) ))
(defun send-to-new-workspace ()
(progn
(set 'space current-workspace)
(set 'window (input-focus))
(move-window-to-workspace
window
space
(insert-workspace (cdr (workspace-limits)))
t )
(select-workspace (cdr (workspace-limits))) ))
(defun send-workspace-to-top ()
(move-workspace current-workspace (- (cdr (workspace-limits)) current-workspace)) )
(defun configure-basic-terminal (window)
(progn
(resize-window-to window 1350 800)
(move-window-to window (- (screen-width) 1355) (- (screen-height) 855)) ))
(defun configure-quick-terminal (window)
(move-window-to window 1811 0) )
(defun configure-code-terminal (window)
(progn
(resize-window-to window 1600 1024)
(move-window-to window (- (screen-width) 1605) (- (screen-height) 1074)) ))
(defun build-new-workspace ()
(progn
(launch-app-in-new-workspace 'chrome)
(launch-app 'term-code)))
(defun destroy-workspace ()
(progn
(mapcar
(lambda (win)
(if (not (equal "panel" win)) (destroy-window win)) )
(workspace-windows) )
(remove-workspace)
(previous-workspace 1) ))
;;; Keybinds
(define apps-keymap (make-keymap))
(bind-keys apps-keymap
"t" '(launch-app 'term-std)
"q" '(launch-app 'term-quick)
"o" '(launch-app 'term-code)
"c" '(launch-app 'chrome) )
(unbind-keys global-keymap
"W-Left"
"W-Right"
"M-Up"
"M-Down")
; Workspace bindings
(bind-keys global-keymap
"M-C-Delete" 'restart
"Super-Left" '(previous-workspace 1)
"Super-Right" '(next-workspace 1)
"Super-Up" '(select-workspace (cdr (workspace-limits))) ; top of stack
"Super-Down" '(select-workspace (car (workspace-limits))) ; bottom of stack
"Super-Next" 'move-workspace-forwards
"Super-Prior" 'move-workspace-backwards
"Super-Shift-Next" send-workspace-to-top
"Super-End" destroy-workspace
"M-F1" '(select-workspace 0)
"M-F2" '(select-workspace 1)
"M-F3" '(select-workspace 2)
"M-F4" '(select-workspace 3)
"M-F5" '(select-workspace 4)
"M-F6" '(select-workspace 5)
"M-F7" '(select-workspace 6)
"M-F8" '(select-workspace 7)
)
; Window-specific workspace bindings
(bind-keys window-keymap
"Super-Shift-Left" 'send-to-previous-workspace
"Super-Shift-Right" 'send-to-next-workspace
"Super-Shift-Up" send-to-new-workspace )
; General bindings
(bind-keys global-keymap
"M-TAB" 'cycle-windows
"M-Shift-TAB" 'cycle-windows-backward
"Super-l" '(system "xscreensaver-command -lock")
"Super-x" apps-keymap
"Super-n" build-new-workspace
)
; Mouse bindings
(bind-keys root-window-keymap
"Button4-Click1" '(previous-workspace 1)
"Button5-Click1" '(next-workspace 1) )
; Given a list of paired letter-command items, returns a new list of paired
; letter-function items, where each anonymous function calls the passed
; function with the original string as its argument
; 'function' should be a function, 'map' should be a list of strings
;
; This is currently unused, because my needs changed, but it's an excellent idea.
(defun funcmap (function map)
(mapcar
(lambda (item)
(if (= (length item) 1)
item
(lambda () (function item)) ))
map) )
;;; Custom variables
(set 'lock-first-workspace nil)
;;; Hooks
(add-hook 'idle-hook delete-empty-workspaces)
(add-hook 'after-add-window-hook
(lambda (window)
(if (string-match "Terminal" (window-name window)) (configure-basic-terminal window))
(if (string-match "Quick" (window-name window)) (configure-quick-terminal window))
(if (string-match "Code" (window-name window)) (configure-code-terminal window))
))