contrib/clfswm: Move clfswm sources to if there is no write permission on . So anybo...
[clfswm.git] / doc / dot-clfswmrc
blobb0b3f7c675e878584b5fdff047a4fdc909599c2f
1 ;;; -*- lisp -*-
2 ;;;
3 ;;; CLFSWM configuration file example
4 ;;;
5 ;;; Send me your configuration file at pbrochard _at_ common-lisp -dot- net
6 ;;; if you want to share it with others.
8 (in-package :clfswm)
12 ;;;; Uncomment the line above if you need default modifiers (or not)
13 ;;(with-capslock)
14 ;;(with-numlock)
15 ;;(without-capslock)
16 ;;(without-cnumlock)
18 ;;;; Uncomment the line above if you want to enable the notify event compression.
19 ;;;; This variable may be useful to speed up some slow version of CLX
20 ;;;; It is particulary useful with CLISP/MIT-CLX.
21 ;; (setf *have-to-compress-notify* t)
25 ;;; -- Azerty configuration --
26 ;;; For the main mode
27 ;;(defun my-binding ()
28 ;;  (define-main-key ("twosuperior") 'banish-pointer)
29 ;;  (undefine-main-multi-keys (#\t :mod-1) (#\b :mod-1) (#\b :mod-1 :control))
30 ;;  (undefine-main-multi-keys ("1" :mod-1) ("2" :mod-1) ("3" :mod-1)
31 ;;                          ("4" :mod-1) ("5" :mod-1) ("6" :mod-1)
32 ;;                          ("7" :mod-1) ("8" :mod-1) ("9" :mod-1) ("0" :mod-1))
33 ;;  (define-main-key ("ampersand" :mod-1) 'bind-or-jump 1)
34 ;;  (define-main-key ("eacute" :mod-1) 'bind-or-jump 2)
35 ;;  (define-main-key ("quotedbl" :mod-1) 'bind-or-jump 3)
36 ;;  (define-main-key ("quoteright" :mod-1) 'bind-or-jump 4)
37 ;;  (define-main-key ("parenleft" :mod-1) 'bind-or-jump 5)
38 ;;  (define-main-key ("minus" :mod-1) 'bind-or-jump 6)
39 ;;  (define-main-key ("egrave" :mod-1) 'bind-or-jump 7)
40 ;;  (define-main-key ("underscore" :mod-1) 'bind-or-jump 8)
41 ;;  (define-main-key ("ccedilla" :mod-1) 'bind-or-jump 9)
42 ;;  (define-main-key ("agrave" :mod-1) 'bind-or-jump 10)
43 ;;  ;; For the second mode
44 ;;  (undefine-second-multi-keys ("1" :mod-1) ("2" :mod-1) ("3" :mod-1)
45 ;;                            ("4" :mod-1) ("5" :mod-1) ("6" :mod-1)
46 ;;                            ("7" :mod-1) ("8" :mod-1) ("9" :mod-1) ("0" :mod-1))
47 ;;  (define-second-key ("ampersand" :mod-1) 'bind-or-jump 1)
48 ;;  (define-second-key ("eacute" :mod-1) 'bind-or-jump 2)
49 ;;  (define-second-key ("quotedbl" :mod-1) 'bind-or-jump 3)
50 ;;  (define-second-key ("quoteright" :mod-1) 'bind-or-jump 4)
51 ;;  (define-second-key ("parenleft" :mod-1) 'bind-or-jump 5)
52 ;;  (define-second-key ("minus" :mod-1) 'bind-or-jump 6)
53 ;;  (define-second-key ("egrave" :mod-1) 'bind-or-jump 7)
54 ;;  (define-second-key ("underscore" :mod-1) 'bind-or-jump 8)
55 ;;  (define-second-key ("ccedilla" :mod-1) 'bind-or-jump 9)
56 ;;  (define-second-key ("agrave" :mod-1) 'bind-or-jump 10))
58 ;;(add-hook *binding-hook* 'my-binding)
60 ;;(dbg *binding-hook*)
61 ;;;;; -- Azerty configuration end --
65 ;;; Color configuration example
66 ;;;
67 ;;; See in package.lisp for all variables
68 ;;(setf *color-unselected* "Blue")
71 ;;; How to change the default fullscreen size
72 ;;(defun get-fullscreen-size ()
73 ;;  "Return the size of root child (values rx ry rw rh)
74 ;;You can tweak this to what you want"
75 ;;  (values -2 -2 (+ (xlib:screen-width *screen*) 2) (- (xlib:screen-height *screen*) 20)))
78 ;;; Contributed code example
79 ;;; See in the clfswm/contrib directory to find some contributed code
80 ;;; and se load-contrib to load them. For example:
81 ;;(load-contrib "contrib-example.lisp")
85 ;;; Binding example: Undefine Control-F1 and define  Control-F5 as a
86 ;;; new binding in main mode
87 ;;;
88 ;;; See bindings.lisp, bindings-second-mode.lisp and bindings-pager.lisp
89 ;;; for all default bindings definitions.
90 ;;(defun binding-example ()
91 ;;  (undefine-main-key ("F1" :mod-1))
92 ;;  (define-main-key ("F5" :mod-1) 'help-on-clfswm)
93 ;;  ;; Binding example for apwal
94 ;;  (define-second-key (#\Space)
95 ;;      (defun tpm-apwal ()
96 ;;      "Run Apwal"
97 ;;      (do-shell "exec apwal")
98 ;;      (show-all-windows-in-workspace (current-workspace))
99 ;;      (throw 'exit-second-loop nil))))
101 ;;(add-hook *binding-hook* 'binding-example)
105 ;;; Hook example
107 ;;; See in package.lisp and clfswm.lisp, clfswm-second-mode.lisp
108 ;;; for hook examples
109 ;;(setf *key-press-hook* (list (lambda (&rest args) ; function 1
110 ;;                             (format t "Keyp press (before): ~A~%" args)
111 ;;                             (force-output))
112 ;;                           #'handle-key-press ; function 2 (default)
113 ;;                           (lambda (&rest args) ; function 3
114 ;;                             (declare (ignore args))
115 ;;                             (format t "Keyp press (after)~%")
116 ;;                             (force-output))))
121 ;;; A more complex example I use to record my desktop and show
122 ;;; documentation associated to each key press.
123 ;;(defun display-osd (formatter &rest args)
124 ;;  (do-shell "pkill osd_cat")
125 ;;  (do-shell (format nil "echo ~A | osd_cat -d 3 -p bottom -o -60 -f -*-fixed-*-*-*-*-16-*-*-*-*-*-*-1"
126 ;;                  (apply #'format nil formatter args)))
127 ;;  (force-output))
129 ;;(defun documentation-key-from-code (hash-key code state)
130 ;;  (documentation (first (find-key-from-code hash-key code state)) 'function))
133 ;;(defun key-string (hash-key code state)
134 ;;  (let* ((modifiers (xlib:make-state-keys state))
135 ;;       (keysym (keysym->keysym-name (xlib:keycode->keysym *display* code 0)))
136 ;;       (doc (documentation-key-from-code hash-key code state)))
137 ;;    (values (format nil "~:(~{~A+~}~A~) : ~S" modifiers keysym doc)
138 ;;          doc)))
140 ;;(defun display-doc (hash-key code state)
141 ;;  (multiple-value-bind (str doc)
142 ;;      (key-string hash-key code state)
143 ;;    (when doc
144 ;;      (display-osd "~A" str))))
146 ;;(defun display-key-osd-main (&rest event-slots &key code state &allow-other-keys)
147 ;;  (declare (ignore event-slots))
148 ;;  (display-doc *main-keys* code state))
150 ;;(defun display-key-osd-second (&rest event-slots &key code state &allow-other-keys)
151 ;;  (declare (ignore event-slots))
152 ;;  (display-doc *second-keys* code state))
154 ;;;; Define new hook or add to precedent one
155 ;;(if (consp *key-press-hook*)
156 ;;    (push #'display-key-osd-main *key-press-hook*)
157 ;;    (setf *key-press-hook* (list #'display-key-osd-main #'handle-key-press)))
158 ;;(setf *sm-key-press-hook* (list #'display-key-osd-second #'sm-handle-key-press))
161 ;;;;; Display menu functions
162 ;;(defun open-menu (&optional (menu *menu*))
163 ;;  "Open the main menu"
164 ;;  (let ((info-list nil)
165 ;;      (action nil))
166 ;;    (dolist (item (menu-item menu))
167 ;;      (let ((value (menu-item-value item)))
168 ;;      (push (typecase value
169 ;;              (menu (list (list (format nil "~A" (menu-item-key item)) *menu-color-menu-key*)
170 ;;                          (list (format nil ": < ~A >" (menu-doc value)) *menu-color-submenu*)))
171 ;;              (string (list (list (format nil "~A" (menu-item-value item)) *menu-color-comment*)))
172 ;;              (t (list (list (format nil "~A" (menu-item-key item)) *menu-color-key*)
173 ;;                       (format nil ": ~A" (documentation value 'function)))))
174 ;;            info-list)
175 ;;      (when (menu-item-key item)
176 ;;        (define-info-key-fun (list (menu-item-key item) 0)
177 ;;            (lambda (&optional args)
178 ;;              (declare (ignore args))
179 ;;              (setf action value)
180 ;;              (throw 'exit-info-loop nil))))))
181 ;;    (info-mode (nreverse info-list))
182 ;;    (dolist (item (menu-item menu))
183 ;;      (undefine-info-key-fun (list (menu-item-key item) 0)))
184 ;;    (typecase action
185 ;;      (menu
186 ;;       (display-osd "Open Menu: ~A" (menu-doc action)) ;; <- Display here
187 ;;       (open-menu action))
188 ;;      (t (when (fboundp action)
189 ;;         (display-osd "~A" (documentation action 'function)) ;; <- Display here
190 ;;         (funcall action))))))
194 ;;(defun get-fullscreen-size ()
195 ;;  "Return the size of root child (values rx ry rw rh)
196 ;;You can tweak this to what you want"
197 ;;  (values -2 -2 (+ (xlib:screen-width *screen*) 2) (- (xlib:screen-height *screen*) 20)))
199 ;;;;; -- Doc example end --
202 ;;;;; Init hook examples:
203 ;;(defun my-init-hook-1 ()
204 ;;  (dbg 'my-init-hook)
205 ;;  ;;(add-frame (create-frame :name "Default" :layout #'tile-left-layout :data (list '(:tile-size 0.6))) *root-frame*)
206 ;;  (add-frame (create-frame :name "The Gimp" :x 0.6 :y 0 :w 0.3 :h 0.2) *root-frame*)
207 ;;  (add-frame (create-frame :name "Net" :x 0.52 :y 0.3 :w 0.4 :h 0.3) *root-frame*)
208 ;;  (add-frame (create-frame :x 0.4 :y 0 :w 0.2 :h 0.3) (first (frame-child *root-frame*)))
209 ;;  (add-frame (create-frame :x 0.6 :y 0.4 :w 0.4 :h 0.2) (first (frame-child *root-frame*)))
210 ;;  (add-frame (create-frame :x 0.4 :y 0.7 :w 0.2 :h 0.3) (first (frame-child *root-frame*)))
211 ;;  (let ((frame (create-frame :name "The Qiv" :x 0 :y 0.4 :w 0.4 :h 0.2)))
212 ;;    (add-frame frame (first (frame-child *root-frame*)))
213 ;;    (add-frame (create-frame) frame))
214 ;;  (add-frame (create-frame :x 0.1 :y 0.55 :w 0.8 :h 0.43) *root-frame*)
215 ;;  (add-frame (create-frame :x 0.2 :y 0.1 :w 0.6 :h 0.4) (first (frame-child *root-frame*)))
216 ;;  (add-frame (create-frame :x 0.3 :y 0.55 :w 0.4 :h 0.3) (first (frame-child *root-frame*)))
217 ;;  (add-frame (create-frame :x 0.1 :y 0.1 :w 0.3 :h 0.6) (first (frame-child (first (frame-child *root-frame*)))))
218 ;;  (setf *current-child* (first (frame-child *current-root*)))
219 ;;  (setf (frame-layout *current-child*) #'tile-layout))
221 ;;(defun my-init-hook-2 ()
222 ;;  (dbg 'my-init-hook)
223 ;;  (add-frame (create-frame :name "Default" :layout #'tile-left-layout :data (list '(:tile-size 0.6))) *root-frame*)
224 ;;  (setf *current-child* (first (frame-child *current-root*)))
225 ;;  (setf (frame-layout *current-child*) #'tile-layout))
228 ;;(defun my-init-hook-3 ()
229 ;;  (dbg 'my-init-hook)
230 ;;  (add-frame (create-frame :name "plop" :x 0.1 :y 0.4 :w 0.7 :h 0.3) *root-frame*)
231 ;;  (add-frame (create-frame :name "Default" :layout nil :x 0.1 :y 0.5 :w 0.8 :h 0.5)
232 ;;           *root-frame*)
233 ;;  (setf *current-child* (first (frame-child *current-root*)))
234 ;;  (setf (frame-layout *root-frame*) nil))
238 ;;(defun my-init-hook-4 ()
239 ;;  (let ((frame (add-frame (create-frame :name "Default"
240 ;;                                        :layout #'tile-left-layout
241 ;;                                      :x 0.05 :y 0.05 :w 0.9 :h 0.9)
242 ;;                        *root-frame*)))
243 ;;    (setf *current-child* frame)))
246 ;;;;; Use this hook and prevent yourself to create a new frame to emulate
247 ;;;;; the MS Windows desktop style :)
248 ;;(defun my-init-hook-ms-windows-style ()
249 ;;  (setf (frame-managed-type *root-frame*) nil))
252 ;;;;; Here is another example useful with the ROX filer: Only the
253 ;;;;; root frame fullscreen with some space on the left for icons.
254 ;;(defun my-init-hook-rox-filer ()
255 ;;  (setf (frame-layout *root-frame*) #'tile-left-space-layout
256 ;;      (frame-data-slot *root-frame* :tile-size) 0.9))
261 ;;(setf *init-hook* #'my-init-hook-4)  ;; <- choose one in 1 to 4
262 ;;;;(setf *init-hook* nil)
263 ;;;;; Init hook end