; iconification following the "group" hint ;;File: icon-groups.gwm -- iconify-window manage groups ;;Author: colas@mirsa.inria.fr (Colas NAHABOO) -- Bull Research FRANCE ;;Revision: 1.2 -- Jan 30 1990 ;;State: Exp ;;GWM Version: 1.4 ; do not manage some groups and manage groups starting iconified (if (not (boundp 'iconify-window-redefined-for-groups)) (setq opening (+ opening '((if (and window-group (= window-status 'window)) (with (leader (# 0 window-group)) (if (member (atom window-client-class) icon-groups.excluded) (## 'no-group wob t) (if (and (not (= leader window)) (not window-is-transient-for) (with (window leader) (and window-starts-iconic (= 'icon (window-wm-state))))) (: window-starts-iconic t))))))))) (defaults-to icon-groups.excluded ()) ; iconifies a whole group in a single icon (if (not (boundp 'iconify-window-redefined-for-groups)) (progn (: iconify-window-redefined-for-groups iconify-window) (de iconify-window () (if window-group ; we are in a group (if (= window-window (# 0 window-group)) ; leader (if (= window-status 'window) ; iconify leader (if (# 'no-group window) (iconify-window-redefined-for-groups) (progn (for window window-group (if window-is-mapped (progn (register-group-member window) (unmap-window)))) (raise-and-map-window window-icon)) ) ; de-iconify leader (progn (raise-and-map-window window-window) (for w window-group (if (is-group-member w) (raise-and-map-window w))) (unmap-window window-icon) (clear-group-members window-group) )) ; member (if (= window-status 'window) ; iconify member (if (# 'no-group window) (iconify-window-redefined-for-groups) (progn (setq window-wm-state-icon (with (window (# 0 window-group)) (raise-and-map-window window-icon) window-icon)) (register-group-member window) (unmap-window window)) ) ; de-iconify member ; (not possible normally) (iconify-window-redefined-for-groups))) ; window do not belong to a group (iconify-window-redefined-for-groups))))) ; not to map back withdrawn windows, we maintain a 'group property for mapped ; windows of the group (de register-group-member (w) (## 'group w t)) (de is-group-member (w) (# 'group w)) (de clear-group-members (l) (for w l (## 'group w ()))) (de raise-and-map-window (w) (with (window w) (raise-window) (map-window))) ;; iconify all the group except this window (defun iconify-other-windows () (with (leader (# 0 window-group) current window) (for window window-group (if (= window current) () (= window leader) (iconify-window-redefined-for-groups) (= 'window window-status) (iconify-window))))) ;; inconify all group, even if clicked on a son (defun iconify-all-windows () (for window window-group (if (= 'window window-status) (iconify-window) ))) ;; sets entries in the window menu (## 0 window-pop-items '(multi-item-make ("Group" (iconify-all-windows)) ("Iconify" (iconify-window)) ("Others" (iconify-other-windows)) ))