| [Sawfish] Add new window as tab patch |
[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]
Hi, Here is a patch to add a new window as tab if have one (the first created if more as one) of the windows the same 'tab-group property". 'tab-group property can set by window-rules and also save in window-history. You can choose between 12 tab-groups. If you know how to grow Tab groups or "automatically" update (maybe by window-names) in window-rules please send a patch. -- Regards, Fuchur GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53 C116 E5BC 70D5 B8D7 B2B0
Attachment:
Bildschirmfoto-Fenster-Regel-Eigenschaften.png
Description: PNG image
diff -urNad sawfish.orgi/lisp/sawfish/wm/ext/match-window.jl sawfish/lisp/sawfish/wm/ext/match-window.jl
--- sawfish.orgi/lisp/sawfish/wm/ext/match-window.jl 2012-03-26 03:20:11.000000000 +0200
+++ sawfish/lisp/sawfish/wm/ext/match-window.jl 2012-03-26 00:52:43.000000000 +0200
@@ -109,6 +109,7 @@
(ignored boolean)
(group ,(lambda ()
`(symbol ,@(delete-if-not symbolp (window-group-ids)))))
+ (tab-group (choice Browser File Games Grafic Mail Office Settings System Term Utilities Video Web))
(ungrouped boolean)
(cycle-skip boolean)
(window-list-skip boolean)
diff -urNad sawfish.orgi/lisp/sawfish/wm/ext/window-history.jl sawfish/lisp/sawfish/wm/ext/window-history.jl
--- sawfish.orgi/lisp/sawfish/wm/ext/window-history.jl 2012-03-26 03:20:11.000000000 +0200
+++ sawfish/lisp/sawfish/wm/ext/window-history.jl 2012-03-26 02:37:57.000000000 +0200
@@ -73,7 +73,7 @@
;; list of states in window-state-change-hook that should be tracked
(defvar window-history-states '(sticky ignored never-focus type maximized
- frame-style cycle-skip
+ frame-style cycle-skip tab-group
window-list-skip title-position))
;; property matched on
diff -urNad sawfish.orgi/lisp/sawfish/wm/tabs/tabgroup.jl sawfish/lisp/sawfish/wm/tabs/tabgroup.jl
--- sawfish.orgi/lisp/sawfish/wm/tabs/tabgroup.jl 2012-03-26 03:20:11.000000000 +0200
+++ sawfish/lisp/sawfish/wm/tabs/tabgroup.jl 2012-03-26 03:26:44.000000000 +0200
@@ -55,6 +55,8 @@
(define oldgroup nil)
(define tab-groups nil)
(define tab-refresh-lock t)
+ (define last-unmap-id nil)
+ (define in-tab-group-name nil)
(define (window-tabbed-p w)
(window-get w 'tabbed))
@@ -132,6 +134,7 @@
(define (tab-delete-window-from-tab-groups w)
"Find window's group and remove it."
+ (remove-from-tab-group w)
(when (window-tabbed-p w)
(tab-delete-window-from-group w (tab-window-group-index w))
(window-put w 'fixed-position nil)
@@ -402,7 +405,28 @@
(tab-refresh-group win 'move)
(tab-refresh-group win 'frame))))
+ (define (unmap-id win)
+ (setq last-unmap-id (window-id win)))
+
+ (define (in-tab-group win)
+ "Add a new window as tab if have one (the first created if more as one)
+of the windows the same 'tab-group property"
+ (when (window-get win 'tab-group)
+ (setq in-tab-group-name (append in-tab-group-name (cons (cons (window-id win) (window-get win 'tab-group)))))
+ (let ((open-win-tabgroup (get-window-by-id (car (rassoc (window-get win 'tab-group) in-tab-group-name)))))
+ (if (and open-win-tabgroup
+ (not (eq win open-win-tabgroup)))
+ (tab-group-window win open-win-tabgroup)))))
+
+ (define (remove-from-tab-group win)
+ "Remove window from in-tab-group-name alist if it have a 'tab-group property"
+ (when (window-get win 'tab-group)
+ (setq in-tab-group-name (remove (assoc last-unmap-id in-tab-group-name) in-tab-group-name))))
+
(unless batch-mode
+;; (add-hook 'place-window-hook in-tab-group)
+ (add-hook 'add-window-hook in-tab-group)
+ (add-hook 'unmap-notify-hook unmap-id)
(add-hook 'window-state-change-hook
(lambda (win args)
(when (window-tabbed-p win)
Attachment:
signature.asc
Description: PGP signature
| Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |