| [Sawfish] Re: Add new window as tab patch |
[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]
Hi, On Mon, 26 Mar 2012 04:01:26 +0200 wrote fuchur <flohtransporter@xxxxxxxxx>: >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. > Here is the same patch as above but with some bugfix. Need more tester/ing. -- Regards, Fuchur GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53 C116 E5BC 70D5 B8D7 B2B0
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 14:20:42.000000000 +0200
+++ sawfish/lisp/sawfish/wm/ext/match-window.jl 2012-03-26 03:31:33.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 14:20:42.000000000 +0200
+++ sawfish/lisp/sawfish/wm/ext/window-history.jl 2012-03-26 03:31:33.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 14:20:43.000000000 +0200
+++ sawfish/lisp/sawfish/wm/tabs/tabgroup.jl 2012-03-26 14:12:03.000000000 +0200
@@ -55,6 +55,9 @@
(define oldgroup nil)
(define tab-groups nil)
(define tab-refresh-lock t)
+ (define release-window nil)
+ (define last-unmap-id nil)
+ (define in-tab-group-name nil)
(define (window-tabbed-p w)
(window-get w 'tabbed))
@@ -132,6 +135,8 @@
(define (tab-delete-window-from-tab-groups w)
"Find window's group and remove it."
+ (if (not release-window)
+ (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)
@@ -268,7 +273,9 @@
(when (not (eq index index2))
;; tabgroup to tabgroup
(when (window-tabbed-p w)
- (tab-delete-window-from-tab-groups w))
+ (setq release-window t)
+ (tab-delete-window-from-tab-groups w)
+ (setq release-window nil))
(setq tab-refresh-lock nil)
(if (window-get w 'shaded) (unshade-window w))
(if (window-get win 'shaded) (unshade-window win))
@@ -303,7 +310,9 @@
(define (tab-release-window w)
"Release the window from its group."
+ (setq release-window t)
(tab-delete-window-from-tab-groups w)
+ (setq release-window nil)
(tab-make-new-group w))
(define-command 'tab-release-window tab-release-window #:spec "%f")
@@ -402,7 +411,27 @@
(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 'after-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/ |