Re: [Sawfish] Patch to save memory and speed up StyleTab

[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

On Sun, 20 Apr 2014 13:20:40 +0200
wrote fuchur <flohtransporter@xxxxxxxxx>:

>>looks good, I'm gonna test a bit more before commiting.

Here i have more for testing. I have completes cabinets gui.
Patches "10-tab-tiler-add.patch 11-tab-tiler-add.patch" apply after all
other patches from this thread. Cabinet also needs
cabinet-missing.png in "/usr/share/sawfish/images" (the default images
folder from sawfish) please add this icon.

Add:

(require 'sawfish.wm.state.maximize)
(require 'sawfish.wm.tabs.tabgroup)
(require 'sawfish.wm.ext.window-history)

in your ~/.sawfish/rc, why see below. Now cabinet works.

Bugs: (i have now idea why)

Without

(require 'sawfish.wm.state.maximize)
(require 'sawfish.wm.tabs.tabgroup)
(require 'sawfish.wm.ext.window-history)

in your ~/.sawfish/rc this key-commands not work:

maximize-window-toggle maximize-window-fullscreen-toggle
maximize-window-horizontally-toggle maximize-window-vertically-toggle
maximize-window-fullxinerama-toggle maximize-fill-window
maximize-fill-window-horizontally maximize-fill-window-vertically
tab-release-window tab-move-to-end tab-move-to-beginning
tab-move-to-right tab-move-to-left
window-history-save-position window-history-save-dimensions
window-history-save-attributes window-history-forget

if you have a new/clean "~/.sawfish/" folder. Cabinet can only call
key-commands which you can call from sawfish-client.

In events i have disable the re-exit hook see comment in the file.


- -- 
Regards,
Fuchur

GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53  C116 E5BC 70D5 B8D7 B2B0
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iEYEARECAAYFAlNmNvIACgkQ5bxw1bjXsrDnYQCfduoswUIyExYJIJx2REDZarFd
XKYAnAmC7/7w3ZB5bTY77nVag+cQLM8i
=Q+JY
-----END PGP SIGNATURE-----
diff -urNad sawfish.orgi/lisp/sawfish/wm/autoload.jl sawfish/lisp/sawfish/wm/autoload.jl
--- sawfish.orgi/lisp/sawfish/wm/autoload.jl
+++ sawfish/lisp/sawfish/wm/autoload.jl
@@ -126,6 +126,8 @@
 (autoload-command 'slide-group-right 'sawfish.wm.commands.slide-window)
 (autoload-command 'slide-group-up 'sawfish.wm.commands.slide-window)
 (autoload-command 'slide-group-down 'sawfish.wm.commands.slide-window)
+(defgroup cabinet "Cabinet" :group focus :require sawfish.wm.ext.cabinet)
+(autoload-command 'cabinet-switch 'sawfish.wm.ext.cabinet)
 (defgroup gpsy "Grow, Pack, Shrink & Yank" :group move :require sawfish.wm..commands.grow-pack)
 (defgroup cycle "Window Cycling" :group focus :require sawfish.wm.commands..x-cycle)
 (defgroup shade-hover "Shade Hover" :group focus :require sawfish.wm.ext.shade-hover)
diff -urNad sawfish.orgi/lisp/sawfish/wm/ext/cabinet.jl sawfish/lisp/sawfish/wm/ext/cabinet.jl
--- sawfish.orgi/lisp/sawfish/wm/ext/cabinet.jl
+++ sawfish/lisp/sawfish/wm/ext/cabinet.jl
@@ -1,716 +1,956 @@
-;; cabinet.jl 1.1 -- A tool for window display,search and manipulation 
-;; Time-stamp: <2012-01-16 12:51:02 hqwrong>
-
+;; cabinet.jl
 
 ;; Copyright (C) 2011, 2012 hqwrong <hq.wrong@xxxxxxxxx>
 
+;; This file is part of sawfish.
 
-     ;; This program is free software: you can redistribute it and/or modify
-     ;; it under the terms of the GNU General Public License as published by
-     ;; the Free Software Foundation, either version 3 of the License, or (at
-     ;; your option) any later version.
-
-     ;; This program is distributed in the hope that it will be useful, but
-     ;; WITHOUT ANY WARRANTY; without even the implied warranty of
-     ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     ;; General Public License for more details.
-
-     ;; You should have received a copy of the GNU General Public License
-     ;; along with this program.  If not, see `http://www.gnu.org/licenses/'.
-
-;;
-;;; Commentary:
-
-;; Note:
-;;  The words "window" and "application" mean same
-;;  thing,they are used interchangeablly. The word "item"
-;;  means the item displayed on Cabinet, which corresponding
-;;  to an application. The words "selected item" means the
-;;  first item on Cabinet. The words "selected window" means
-;;  the window corresponding to the selected item.
-
-;; ** Start up
-;;   Cabinet required `hqw-util.jl', it should have been published along
-;; with Cabinet. To separate them apart, because hqw-util.jl's
-;; independence, you may find it useful at other occasions.
-
-;;   Put `hqw-util.jl' and `cabinet.jl' into your load directory,and 
-
-;;   (require 'cabinet)
-
-;;   Use command `cabinet-switch' to start Cabinet.
-;; To bind it to "W-s",copy the following line to your rc file.
-
-;; (bind-keys global-keymap "W-s" 'cabinet-switch)
-
-;; ** Cabinet Features.
-;;   Cabinet has a similar interface with iswitch,it also adds
-;; some own features, like:
-
-;; 1) Support window icons to be shown
-;;    Actually,this is my main motive to write Cabinet. For
-;; People are apt to distinguish from images instead of
-;; text.
-
-;; 2) Support cycling among workspaces
-;;   Most times the reason you create another workspace is
-;; to make a bunch of applications distinguished from
-;; others. It's a bad idear to mix them together to choose
-;; from. The better one is only let you have applications of
-;; current workspace,and enable you to cycle among
-;; workspaces.
-;;   Though, Cabinet afford you a choice: To toggle between
-;; workspace-mode -- to just show windows of current workspace --
-;; and all-mode -- to show all the windows. When in
-;; workspace mode, the tag on split line is something like
-;; 2/3, which means the largest workspace id is 3, and now
-;; you are in workspace of id 2. When in all mode, the tag
-;; should be "ALL".
-;; Notice to make you cycle through workspaces,you should
-;; set workspace boundary to 'wrap-around,put this in your
-;; rc file:
-
-;; (setq workspace-boundary-mode 'wrap-around)
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or (at
+;; your option) any later version.
 
-;; 3) Distinguish windows for display from windows for
-;; manipulation.
-;;   Some applications, most time you are not inclined to
-;; select them via Cabinet, for you already have a hot key
-;; for them or other reasons, but somehow you just want to
-;; see them there: being displayed on Cabinet. You may see a
-;; split line on Cabinet, the items below it are windows
-;; that you just want to display. This feature makes Cabinet
-;; could somehow functions like a panel.
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
 
-;; 4) Use forground color instead of tag to indicate window
-;; status.
-;;   Because the same reason for enabling icons. Because it
-;; saves a charater's space.
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see `http://www.gnu.org/licenses/'.
 
-;; 5) Enable users to manipulate a bunch of windows.
-;; Use "Super-Spc" to mark the selected window, and use
-;; procedure `with-marked-wl', you can manipulate
-;; them. The marks will be cleared out after you quit
-;; from Cabinet. Cabinet affords a procedure to tile marked
-;; windows horizontally .
 
-;; 6) Item format
-;;   Item format is  like this :
-;;       icon + window name + <window class> + viewport id + workspace id
-;;   Variable `cabinet-item-text' controls what to append to icon.
-;;   You are welcomed to reset it.
+(define-structure sawfish.wm.ext.cabinet
+  
+    (export cabinet-switch
+            ;; 
+            cabinet-keymap-complete
+            cabinet-item-text
+            ;; you'll need following procedures only when
+            ;; you want to extend cabinet-keymap
+            with-update-on-workspace
+            with-selected
+            with-marked-wl
+            with-exit-and-clear-mark
+            with-update-on-input
+            with-new-wlist
+            with-draw)
+    
+    (open rep
+          rep.data
+          rep.system
+          rep.regexp
+          rep.lang.math
+          rep.io.timers
+          sawfish.wm.util.events
+          sawfish.wm.prg.compton
+          sawfish.wm.tabs.tabgroup
+          sawfish.wm.state.shading
+          sawfish.wm.state.iconify
+          sawfish.wm.stacking
+          sawfish.wm.util.workarea
+          sawfish.wm.viewport
+          sawfish.wm.state.maximize
+          sawfish.wm.util.display-window
+          sawfish.wm.custom
+          sawfish.wm.commands
+          sawfish.wm.colors
+          sawfish.wm.events
+          sawfish.wm.fonts
+          sawfish.wm.images
+          sawfish.wm.misc
+          sawfish.wm.util.x
+          sawfish.wm.windows
+          sawfish.wm.workspace)
 
-;; ** Cabinet Keymap
-;;   I made the default keymap(cabinet-keymap) according to my
-;; favour, So it's recommended to create yours. The easiest
-;; way to get started will be to copy the default keymap
-;; binding from the cabinet.jl, and modify it.
-;; Most key bindings are obvious, while some need extra explanation.
-;; Here is a list:
-;;           "Super-v"    toggle workspace-mode and all-mode
-;;           "Super-s"    cycle windows
-;;           "Super-r"    reversely cycle windows
-;;           "Super-S"     cycle workspaces.(Notice 'S' is capital)
-;;           "Super-R"     reversely cycle workspaces.
-;;           "Super-z"     toggle iconify property of selected window.
-;;           "Super-SPC"   mark selected window
-;;           "Super-x"     exchange windows-for-display and windows-for-manipulation
-;;           "Super-g"    Same with "RET",but will restore stack order.
-;;           "Super-t"   tile horizontally marked windows
-;;           "Super-T"   tile vertically marked windows
 
-;; ** For ones who want to extend cabinet keymap
-;; You may notice, in keymap definition, there are a bunch of
-;; procedures like `with-draw', `with-new-wlist' and so on. Yes,
-;; it's comfusing and ugly, but it's flexible, it enables
-;; you to extend cabinet-keymap at will. Anyway,I've tried
-;; to make doc string clear to alleviate you aversion.:-)
+  (defgroup cabinet "Cabinet"
+    :group focus
+    :require sawfish.wm.ext.cabinet)
 
-;; ** Version list
-;; Cabinet 1.0 2011.11
-;; Cabinet 1.1 2011.12.16  fixed a bug
+  (defgroup filter "Filter"
+    :group (focus cabinet))
+  
+  (defgroup bindings "Keybindings"
+    :group (focus cabinet))
 
-;; Enjoy!!
+  (defcustom cabinet:margin (cons 10 10)
+    "Margin to the border of cabinet."
+    :group (focus cabinet)
+    :type (pair (number 1 50 10 1) (number 1 50 10 1)))
+  
+  (defcustom cabinet:item-margin 6
+    "Margin between items."
+    :group (focus cabinet)
+    :range (1 . 50)
+    :type number)
+  
+  (defcustom cabinet:input-line-margin 25
+    "Margin between input line and the first item."
+    :group (focus cabinet)
+    :range (1 . 100)
+    :type number)
+  
+  (defcustom cabinet:icon-size 24
+    "Icon size."
+    :group (focus cabinet)
+    :range (8 . 128)
+    :type number)
+  
+  (defcustom cabinet:workspace-mode-on-initial nil
+    "Display only windows from current workspace."
+    :group (focus cabinet)
+    :type boolean)
+  
+  (defcustom cabinet:display-cabinet-on-active nil
+    "Display cabinet on active monitor."
+    :group (focus cabinet)
+    :type boolean)
 
-(define-structure sawfish.wm.ext.cabinet 
+  (defcustom cabinet:cycle-as-start nil
+    "Cycle overhead when start cabinet-switch, like x-cycle."
+    :group (focus cabinet)
+    :type boolean)
   
-      (export cabinet-switch
-              ;; 
-              cabinet-keymap
-              cabinet-item-text
-              ;; you'll need following procedures only when
-              ;; you want to extend cabinet-keymap
-              with-update-on-workspace
-              with-selected
-              with-marked-wl
-              with-exit-and-clear-mark
-              with-update-on-input
-              with-new-wlist
-              with-draw)
+  (defcustom cabinet:manipulation-on-selected 'Raise 
+    "Action if browse across cabinet."
+    :group (focus cabinet)
+    :type (choice Raise Focus None))
+  
+  (defcustom cabinet:raise-window-timeout 200
+    "Delay in milliseconds until a window gets raised if browse across cabinet. \\bottom"
+    :group (focus cabinet)
+    :type (range (1 . 1000)))
 
-      (open rep
-            rep.data
-            rep.system
-            rep.regexp
-            rep.lang.math
-            sawfish.wm.state.shading
-            sawfish.wm.state.iconify
-            sawfish.wm.stacking
-            sawfish.wm.viewport
-            sawfish.wm.state.maximize
-            sawfish.wm.util.display-window
-            sawfish.wm.custom
-            sawfish.wm.commands
-            sawfish.wm.colors
-            sawfish.wm.events
-            sawfish.wm.fonts
-            sawfish.wm.images
-            sawfish.wm.misc
-            sawfish.wm.util.x
-            sawfish.wm.windows
-            sawfish.wm.workspace
-	    sawfish.wm.util.events)
+  (defcustom cabinet:command-repeat-timeout 100
+    "Delay in milliseconds until a window keybinding gets repeats. \\bottom"
+    :group (focus cabinet)
+    :type (range (100 . 1000)))
 
-   ;; (mapc require '( rep
-   ;;       rep.system
-   ;;       rep.regexp
-   ;;       sawfish.wm.state.iconify
-   ;;       sawfish.wm.stacking
-   ;;       sawfish.wm.viewport
-   ;;       sawfish.wm.state.maximize
-   ;;       sawfish.wm.custom
-   ;;       sawfish.wm.commands
-   ;;       sawfish.wm.colors
-   ;;       sawfish.wm.events
-   ;;       sawfish.wm.fonts
-   ;;       sawfish.wm.images
-   ;;       sawfish.wm.misc
-   ;;       sawfish.wm.util.x
-   ;;       sawfish.wm.windows
-   ;;       sawfish.wm.workspace))
+  (defcustom cabinet:default-item-forground (get-color "#FFFFFF")
+    "Font color."
+    :group (focus cabinet)
+    :type color)
+  
+  (defcustom cabinet:background (get-color "#000000")
+    "Background color."
+    :group (focus cabinet)
+    :type color)
+  
+  (defcustom cabinet:forground-input (get-color "#FFFF00")
+    "Input text color."
+    :group (focus cabinet)
+    :type color)
+  
+  (defcustom cabinet:split-line-forground (get-color "#B22222")
+    "Split line color."
+    :group (focus cabinet)
+    :type color)
+  
+  (defcustom cabinet:maximized-item-forground (get-color "#FFA500")
+    "Maximized windows color."
+    :group (focus cabinet)
+    :type color)
+  
+  (defcustom cabinet:iconified-item-forground (get-color "#6D6D6D")
+    "Iconified windows color."
+    :group (focus cabinet)
+    :type color)
+  
+  (defcustom cabinet:shaded-item-forground (get-color "#0000FF")
+    "Shaded windows color."
+    :group (focus cabinet)
+    :type color)
+  
+  (defcustom cabinet:filter-out-for-manipulation (list "^Conky$" "^Gkrellm$")
+    nil
+    :group (focus cabinet filter)
+    :widget-flags (expand-horizontally expand-vertically)
+    :type* `(list string ,(_ "Windows displayed below the split line.")))
+  
+  (defcustom cabinet:filter-out-from-display (list "^Gdesklets-daemon$" "^Xfce4-panel$" "^Mate-panel$"
+                                                   "^Xfdesktop$" "^x-caja-desktop$" "^plasma-desktop$")
+    nil
+    :group (focus cabinet filter)
+    :widget-flags (expand-horizontally expand-vertically)
+    :type* `(list string ,(_ "Windows removed from cabinet.")))
+  
+  (defcustom cabinet:cycle "Super-TAB"
+    "Cycle through windows."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :group (focus cabinet bindings))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; variables welcome to change ;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-   (defgroup cabinet "Cabinet"
-      :group focus
-      :require cabinet)
+  (defcustom cabinet:reversely-cycle "C-TAB"
+    "Reversely cycle through windows."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :group (focus cabinet bindings))
 
-   (defcustom cabinet-x-margin 10
-      "The horizontal margin of cabinet"
-      :type number
-      :group (focus cabinet))
-   (defcustom cabinet-y-margin 10
-      "The vertically margin of cabinet"
-      :group (focus cabinet)
-      :type number)
-   (defcustom cabinet-item-margin 6
-      " The margin between item and item."
-      :group (focus cabinet)
-      :type number)
-   (defcustom cycle-as-start
-      t
-      "whether cycle overhead,when start cabinet-switch.
-Just like x-cycle"
-      :group (focus cabinet)
-      :type boolean)
+  (defcustom cabinet:restore-order "ESC"
+    "Exit with restore stack order."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :group (focus cabinet bindings))
 
-   (defcustom workspace-mode-on-initial
-      t
-      "whether to show windows in current workspace.
-nil, means to show windows of all workspaces."
-      :group (focus cabinet)
-      :type boolean)
-   
-   (defcustom cabinet-input-line-margin
-      25
-      "The margin between input line and the first item"
-      :group (focus cabinet)
-      :type number)
+  (defcustom cabinet:toggle-workspace-mode "Super-a"
+    "Toggle windows from current or all workspaces."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :group (focus cabinet bindings))
 
-   (defvar cabinet-icon-size '(32 . 32)
-      "Each icon size of window shown on cabinet"
-      )
-   (defvar cabinet-input-forground (get-color "yellow")
-      "Forground color of your input" )
+  (defcustom cabinet:exchange-manipulation "Super-q"
+    "Toggle windows for display and for manipulation."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :group (focus cabinet bindings))
 
-   (defvar cabinet-split-line-forground (get-color "firebrick"))
+  (defcustom cabinet:cycle-workspaces "Super-x"
+    "Cycle through workspaces."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :group (focus cabinet bindings))
 
-   (defvar iconified-item-forground (get-color "gray"))
+  (defcustom cabinet:cycle-reversely-workspaces "Super-y"
+    "Reversely cycle through workspaces."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :group (focus cabinet bindings))
 
-   (defvar default-item-forground (get-color "white"))
+  (defcustom cabinet:advance-user-keybindings nil
+    "Advance user keymap."
+    :group (focus cabinet bindings)
+    :after-set (lambda () (search-bad-key))
+    :type boolean)
 
-   (defvar maximized-item-forground (get-color "orange"))
+  (defcustom cabinet:mark-selected "Super-SPC"
+    "Marked window as selected."
+    :type event
+    :after-set (lambda () (search-bad-key))
+    :depends cabinet:advance-user-keybindings
+    :group (focus cabinet bindings))
 
-   (defvar shaded-item-forground (get-color "blue"))
+  (defcustom cabinet:advance-keybindings '(("Super-d" delete-window t none)
+                                           ("Super-i" toggle-window-iconified t none)
+                                           ("Super-m" maximize-window-toggle t none)
+                                           ("Super-s" toggle-window-shaded t none)
+                                           ("Super-f" maximize-window-fullscreen-toggle t none)
+                                           ("Super-t" tab-add-maked-windows t none)
+                                           ("C-d" delete-window t close)
+                                           ("C-i" toggle-window-iconified t close)
+                                           ("C-m" maximize-window-toggle t close)
+                                           ("C-s" toggle-window-shaded t close)
+                                           ("C-f" maximize-window-fullscreen-toggle t close)
+                                           ("C-t" tab-add-maked-windows t close)
+                                           ("M-d" delete-window t go-to-next)
+                                           ("M-i" toggle-window-iconified t go-to-next)
+                                           ("M-m" maximize-window-toggle t go-to-next)
+                                           ("M-s" toggle-window-shaded t go-to-next)
+                                           ("M-f" maximize-window-fullscreen-toggle t go-to-next)
+                                           ("M-t" tab-add-maked-windows t go-to-next))
+    nil
+    :type* `(alist (event ,(_ "Key:"))
+                   ((h-and (symbol 
+                            delete-window maximize-window-toggle toggle-window-iconified toggle-window-shaded toggle-window-sticky
+                            maximize-window-fullscreen-toggle maximize-window-horizontally-toggle maximize-window-vertically-toggle
+                            maximize-window-fullxinerama-toggle maximize-full-vertical-left-toggle maximize-full-vertical-right-toggle
+                            tab-add-maked-windows tab-release-window tab-move-to-end tab-move-to-beginning tab-move-to-right tab-move-to-left
+                            move-window-to-center move-window-to-top-left move-window-to-next-workspace move-window-to-previous-workspace
+                            toggle-fixed-postion toggle-window-never-focus toggle-window-ignored toggle-task-list-skip toggle-window-cycle-skip
+                            toggle-window-list-skip toggle-desktop send-to-next-head send-to-previous-head
+                            raise-window lower-window raise-window-depth lower-window-depth raise-lower-window
+                            raise-window-and-transients raise-lower-window-and-transients delete-window-safely destroy-window
+                            window-history-save-position window-history-save-dimensions window-history-save-attributes window-history-forget  
+                            iconify-window uniconify-window shade-window unshade-window make-window-sticky make-window-unsticky
+                            make-window-ignored make-window-not-ignored               
+                            maximize-fill-window maximize-fill-window-horizontally maximize-fill-window-vertically 
+                            ;; tab/titelbar-toggle tab/titelbar-to-top tab/titelbar-to-bottom tab/titelbar-to-right tab/titelbar-to-left 
+                            ;; move-window-center move-window-up move-window-down 
+                            ;; move-window-right move-window-left move-window-next move-window-previous 
+                            ;; shrink-window-up shrink-window-down shrink-window-left shrink-window-right 
+                            ;; yank-window-up yank-window-down yank-window-left yank-window-right
+                            ;; size-window-add-column size-window-subtract-column size-window-add-row size-window-subtract-row 
+                            ;; grow-window-up grow-window-down grow-window-left grow-window-right
+                            ;; pack-window-up pack-window-down pack-window-right pack-window-left 
+                            ;; double-window-size halve-window-size
+                            ;; send-to-next-workspace send-to-previous-workspace send-to-workspace-left
+                            ;; send-to-workspace-right send-to-workspace-up send-to-workspace-down
+                            ;; maximize-window-fullscreen maximize-window-fullxinerama  
+                            )
+                           (label "After executed cabinet:")
+                           (choice none close go-to-next)) ,(_ "Event")))
+    :widget-flags (expand-vertically)
+    :after-set (lambda () (search-bad-key))
+    :depends cabinet:advance-user-keybindings
+    :group (focus cabinet bindings))
 
-   (defvar cabinet-background (get-color "black"))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; end defcustom
 
-   
+  (define (do-when-tabbed w do)
+    "Action when W is tabbed."
+    (when (window-tabbed-p w)
+      (tab-refresh-group w do)
+      (window-opacity w)))
 
-   (defvar cabinet-filter-out-for-manipulation-list
-      '(
-        "^Conky$"
-        )
-      "The matching windows are only for display.
-You can see their items below split line.")
+  (define (window-tabbed-foreground-p w)
+    "Returns t if W is a foreground tab"
+    (if (window-tabbed-p w)
+        (eq w (nth 0 (tab-group-windows-stacking-order w)))))
 
-   (defvar cabinet-filter-out-for-display-list
-      '(
-        "^\.gnome-desktop$"
-        "Gnome-panel"
-        "^gmc$"
-        "^panel$")
-   
-      "The matching windows are filtered out,they
-will not be shown on cabinet.")
+  (define (tabbgroup-is-shaded-p w)
+    "Returns t if tabbgroup from W is shaded"
+    (let ((shaded 't))
+      (when (window-tabbed-p w)
+        (mapcar (lambda (w)
+                  (if (not (window-get w 'shaded)) (setq shaded nil))) (tab-group-windows w))
+        shaded)))
 
-   (defvar manipulation-on-selected
-      raise-window
-      "what to do on selected window, each time draw/refresh
-   Cabinet. 
-It must be set to a procedure with one argument. ")
-   
-   (define (cabinet-item-text w)
-      "The text part shown on cabinet item"
-      (concat (when (window-get w 'cabinet-marked)
-                 " **")
+  (define (cabinet-item-text w)
+    "The text part shown on cabinet item"
+    ;; if we remove a window we temporary need this if
+    (if (not (numberp (window-id w)))
+        "Window is gone" 
+      (concat (when (window-get w 'marked)
+                " »»")
+              (when (window-tabbed-p w)
+                (if (window-tabbed-foreground-p w)
+                    (if (eq cabinet:manipulation-on-selected 'None)
+                        (format nil " [%s%s]" (tab-window-group-index w) 'â??)
+                      (format nil " [%s]" (tab-window-group-index w)))
+                  (format nil " [%s]" (tab-window-group-index w))))
               "  "
               (window-name w)
-              " <"
+              "  ["
               (window-class-name w 1)
-              ">"
-              (format nil
-                      " %s"
-                      (window-viewport w)
-                      )
-              (format nil
-                      " %s"
-                      (window-get w 'workspaces))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; End @ usr variables ;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-   (define input-line-height (font-height default-font))
-   (define cabinet-font-height input-line-height)
-
-   (define wlist-for-manipulation          
-      nil)
-
-   (define wlist-for-display
-      nil)
-
-   (define wlist-for-cabinet
-      nil)
-
-   (define cabinet-window nil)
-
-   (define cabinet-orin-wlist)
-   (define cabinet-orin-focus)
-   (define cabinet-input "")
-   (define cabinet-orin-workspace)
-   (define workspace-mode)
-   (define cabinet-filter-for-display-func)
-   (define cabinet-filter-for-manipulation-func)
+              "] "
+              (when (or (> (car (window-viewport w)) 0)
+                        (> (cdr (window-viewport w)) 0))
+                (format nil " %s" (window-viewport w)))
+              (when (window-get w 'workspaces)
+                (format nil " %s" (window-get w 'workspaces)))
+              ;;(when (window-sticky-p w)
+              ;;  (format nil " â??"))
+              (if (and (window-maximized-vertically-p w)
+                       (not (window-maximized-horizontally-p w)))
+                  (format nil " â??"))
+              (if (and (window-maximized-horizontally-p w)
+                       (not (window-maximized-vertically-p w)))
+                  (format nil " â??"))
+              (when (window-maximized-p w)
+                (if (or (tabbgroup-is-shaded-p w)
+                        (and (not (window-tabbed-p w))
+                             (window-shaded-p w)))
+                    (format nil " â?¾")))
+              (when (window-get w 'marked)
+                " ««"))))
 
-   ;; item-format package
-   (define (cabinet-item-format w)
-      (define (cabinet-item-text-format w)
-         (cons (cabinet-item-text w)
-               (cond
-                ((window-iconified-p w) iconified-item-forground)
-                ((window-maximized-p w) maximized-item-forground)
-                ((window-shaded-p w) shaded-item-forground )
-                (t  default-item-forground)))
-         )
+  (define input-line-height (font-height default-font))
+  (define cabinet-font-height input-line-height)
+  (define wlist-for-manipulation nil)
+  (define wlist-for-display nil)
+  (define wlist-for-cabinet nil)
+  (define cabinet-window nil)
+  (define cabinet-orin-wlist)
+  (define cabinet-orin-focus)
+  (define cabinet-input "")
+  (define cabinet-orin-workspace)
+  (define workspace-mode)
+  (define cabinet-filter-for-display-func)
+  (define cabinet-filter-for-manipulation-func)
+  (define cabinet-raise-timer nil)
+  (define command-timer nil)
+  (define bad-key nil)
+  (define focus-by-tab nil)
 
-      (let (
-            (item (cons (window-icon-image w)
-                        (cabinet-item-text-format w))))
-                     
-         (lambda (tag)
-            (cond
-             ((eq tag 'icon) (car item))
-             ((eq tag 'text) (cadr item))
-             ((eq tag 'forground) (cdr (cdr item)))))))
+  ;; item-format package
+  (define (cabinet-item-text-format w)
+    (cons (cabinet-item-text w)
+          (cond
+           ((window-iconified-p w) cabinet:iconified-item-forground)
+           ((window-maximized-p w) cabinet:maximized-item-forground)
+           ((if (or (tabbgroup-is-shaded-p w)
+                    (and (not (window-tabbed-p w))
+                         (window-shaded-p w)))
+                cabinet:shaded-item-forground))
+           (t cabinet:default-item-forground))))
 
-   (define (make-item icon text forground)
+  (define (cabinet-item-format w)
+    (let ((item (cons (if (window-icon-image w)
+                          (window-icon-image w)
+                        (require 'rep.io.files)
+                        (if (file-exists-p (concat (car (cdr image-load-path)) "/" "cabinet-missing.png"))
+                            (make-image (concat (cdr image-load-path) "cabinet-missing.png"))))
+                      (cabinet-item-text-format w))))
       (lambda (tag)
-         (cond
-          ((eq tag 'icon) icon)
-          ((eq tag 'text) text)
-          ((eq tag 'forground) forground))))
-   (define (get-item-icon item) (item 'icon))
-   (define (get-item-text item) (item 'text))
-   (define (get-item-forground item) (item 'forground))
-   ;; end @ item format package 
-
-   (define (cabinet-filter filter-list)
-      (lambda (window)
-         (let loop ((fow-nrl filter-list))
-              (cond
-               ((null fow-nrl) t)
-               ((or (string-match (car fow-nrl) 
-                                  (window-name window)
-                                  0 nil)
-                    (string-match (car fow-nrl) 
-                                  (window-class-name window 1)
-                                  0 nil))
-                nil)
-               (t (loop (cdr fow-nrl)))))))
-
-   (define (cabinet-split-line)
-      (make-item nil
-                 (format nil 
-                         "===================%s========================="
-                         (if workspace-mode
-                               (format nil
-                                       " %s/%s "
-                                       current-workspace
-                                       (cdr (workspace-limits)))
-                            "ALL"))
-                 cabinet-split-line-forground))
-
-   (define (draw-items wl input-line)
-      (when (x-window-p cabinet-window)
-         (x-destroy-window cabinet-window)
-         (setq cabinet-window nil))
-
-      (let* (
-             (wl-size (length wl))
+        (cond
+         ((eq tag 'icon) (car item))
+         ((eq tag 'text) (cadr item))
+         ((eq tag 'forground) (cdr (cdr item)))))))
 
-             (cabinet-items wl)
+  (define (make-item icon text forground)
+    (lambda (tag)
+      (cond
+       ((eq tag 'icon) icon)
+       ((eq tag 'text) text)
+       ((eq tag 'forground) forground))))
+  (define (get-item-icon item) (item 'icon))
+  (define (get-item-text item) (item 'text))
+  (define (get-item-forground item) (item 'forground))
+  ;; end @ item format package 
 
-             (item-height (max (cdr cabinet-icon-size)
-                               cabinet-font-height))
-             (wx (+ (* 2 cabinet-x-margin)
-                    (car cabinet-icon-size)
-                    (apply max
-                           (mapcar text-width
-                                   (cons input-line
-                                         (mapcar get-item-text
-                                                 cabinet-items))))))
+  (define (cabinet-filter filter-list)
+    (lambda (window)
+      (let loop ((fow-nrl filter-list))
+        (cond
+         ((null fow-nrl) t)
+         ((or (string-match (car fow-nrl) 
+                            (window-name window)
+                            0 nil)
+              (string-match (car fow-nrl) 
+                            (window-class-name window 1)
+                            0 nil))
+          nil)
+         (t (loop (cdr fow-nrl)))))))
+  
+  (define (cabinet-split-line)
+    (make-item nil
+               (format nil "===================%s========================="
+                       (if workspace-mode
+                           (format nil " %s/%s "
+                                   current-workspace
+                                   (cdr (workspace-limits)))
+                         "ALL"))
+               cabinet:split-line-forground))
 
-             (wy (+ (* 2 cabinet-y-margin)
-                    (* wl-size item-height)
-                    (* (- wl-size 1) cabinet-item-margin)
-                    cabinet-input-line-margin
-                    input-line-height))
-             (win-size (cons wx wy)))
-         (define (event-handler type xw)
-            (define (cabinet-draw-text str pos foreground)
-               (let ((gc (x-create-gc xw
-                                      `((foreground . ,foreground)))))
-                  (x-draw-string xw gc pos str)
-                  ;; (x-destroy-gc gc)
-                  ))
-            (x-clear-window wx)
-            ;; draw input line
-            (cabinet-draw-text input-line
-                               (cons cabinet-x-margin (+ cabinet-y-margin
+  (define (draw-items wl input-line)
+    (when (x-window-p cabinet-window)
+      (x-destroy-window cabinet-window)
+      (setq cabinet-window nil))
+    (let* ((wl-size (length wl))
+           (cabinet-items wl)
+           (item-height (max cabinet:icon-size
+                             cabinet-font-height))
+           (wx (+ (* 2 (car cabinet:margin))
+                  cabinet:icon-size
+                  (apply max
+                         (mapcar text-width
+                                 (cons input-line
+                                       (mapcar get-item-text
+                                               cabinet-items))))))
+           (wy (+ (* 2 (cdr cabinet:margin))
+                  (* wl-size item-height)
+                  (* (- wl-size 1) cabinet:item-margin)
+                  cabinet:input-line-margin
+                  input-line-height))
+           (win-size (cons wx wy)))
+      (define (event-handler type xw)
+        (define (cabinet-draw-text str pos foreground)
+          (let ((gc (x-create-gc xw
+                                 `((foreground . ,foreground)))))
+            (x-draw-string xw gc pos str)
+            ;; (x-destroy-gc gc)
+            ))
+        (x-clear-window wx type)
+        ;; draw input line
+        (cabinet-draw-text input-line
+                           (cons (car cabinet:margin) (+ (cdr cabinet:margin)
                                                          cabinet-font-height))
-                               cabinet-input-forground)
-         
-            ;; draw item text
-            (let ((item-count 0)
-                  (item-height-with-margin (+ item-height
-                                              cabinet-item-margin))
-                  (input-height-with-margin (+ input-line-height
-                                               cabinet-input-line-margin)))
-               (mapc (lambda (item)
-                     
-                        (let* (
-                               (icon (get-item-icon item))
-                               (text (get-item-text item))
-                               (item-forground (get-item-forground item))
-                               (icon-x (+ cabinet-x-margin))
-                               (icon-y (+ cabinet-y-margin
-                                          input-height-with-margin
-                                          (* item-count
-                                             item-height-with-margin)))
-                               (text-x (+ icon-x
-                                          (car cabinet-icon-size)))
-                               (text-y (+ icon-y
-                                          (quotient cabinet-font-height 2)
-                                          (quotient (cdr cabinet-icon-size)
-                                                    3))))
-                           (when icon
-                              (x-draw-image icon xw
-                                            (cons icon-x icon-y)
-                                            cabinet-icon-size))
-                           (cabinet-draw-text text
-                                              (cons text-x text-y)
-                                              item-forground
-                                              ))
-                        (setq item-count (+ 1 item-count)))
-                     cabinet-items))) ;; end of event-handler
+                           cabinet:forground-input)
+        ;; draw item text
+        (let ((item-count 0)
+              (item-height-with-margin (+ item-height
+                                          cabinet:item-margin))
+              (input-height-with-margin (+ input-line-height
+                                           cabinet:input-line-margin)))
+          (mapc (lambda (item)
+                  (let* ((icon (get-item-icon item))
+                         (text (get-item-text item))
+                         (item-forground (get-item-forground item))
+                         (icon-x (+ (car cabinet:margin)))
+                         (icon-y (+ (cdr cabinet:margin)
+                                    input-height-with-margin
+                                    (* item-count
+                                       item-height-with-margin)))
+                         (text-x (+ icon-x
+                                    cabinet:icon-size))
+                         (text-y (+ icon-y
+                                    (quotient cabinet-font-height 2)
+                                    (quotient cabinet:icon-size
+                                              3))))
+                    (when icon
+                      (x-draw-image icon xw
+                                    (cons icon-x icon-y)
+                                    (cons cabinet:icon-size cabinet:icon-size)))
+                    (cabinet-draw-text text
+                                       (cons text-x text-y)
+                                       item-forground))
+                  (setq item-count (+ 1 item-count)))
+                cabinet-items))) ;; end of event-handler
+      (setq cabinet-window
+            (let ((head (if cabinet:display-cabinet-on-active (current-head) '0)))
+              (x-create-window `(,(+ (car (head-offset head))
+                                     (- (quotient (car (head-dimensions head)) 2)
+                                        (quotient wx 2)))
+                                 .
+                                 ,(+ (cdr (head-offset head))
+                                     (- (quotient (cdr (head-dimensions head)) 2)
+                                        (quotient wy 2))))
+                               win-size
+                               1
+                               `((background . ,cabinet:background))
+                               event-handler)))
+      (x-map-window cabinet-window)
+      cabinet-window))
 
-         (setq cabinet-window
-               (x-create-window `(,(- (quotient (screen-width) 2)
-                                      (quotient wx 2))
-                                  .
-                                  ,(- (quotient (screen-height) 2)
-                                      (quotient wy 2)))
-                                win-size
-                                1
-                                `(
-                                  (background . ,cabinet-background)
-                                  )
-                                event-handler
-                                ))
-         (x-map-window cabinet-window)
-         cabinet-window))
+  (define (display-bad-key)
+    (display-message (concat "Cabinet:" "\n" "\n" bad-key "\n" "\nIs duplicate." "\nDisable cabinet.")
+                     `((background . ,(get-color "Red")))))
 
-   ;; keymap package
-   (define (cabinet-switch-to-next)
-      (when (not (null wlist-for-manipulation))
-         (setq wlist-for-manipulation
-               (append (cdr wlist-for-manipulation)
-                       (list (car wlist-for-manipulation))))))
+  (define (search-bad-key)
+    (setq bad-key nil)
+    (let ((key-list (list cabinet:cycle cabinet:reversely-cycle cabinet:restore-order cabinet:toggle-workspace-mode
+                          cabinet:exchange-manipulation cabinet:cycle-workspaces cabinet:cycle-reversely-workspaces)) key rest-list)
+      (when cabinet:advance-user-keybindings
+        (setq key-list (append key-list (list cabinet:mark-selected)))
+        (setq key-list (append key-list 
+                               (mapcar (lambda (w)
+                                         (car w))
+                                       cabinet:advance-keybindings))))
+      (mapcar (lambda ()
+                (setq rest-list (cdr key-list))
+                (setq key (car key-list))
+                (when (not (x-keysym-name (car (lookup-event key))))
+                  (setq bad-key key)
+                  (display-message (concat "Cabinet:" "\n" "\n" bad-key "\n" "\nIs not a valid x-keysym-name." "\nDisable cabinets.")
+                                   `((background . ,(get-color "Red")))))
+                (when (member key rest-list)
+                  (setq bad-key key)
+                  (display-bad-key))
+                (setq key-list (cdr key-list)))
+              key-list)))
+  
+  ;; keymap package
+  (define (command-delay-timer)
+    (setq command-timer
+          (make-timer (lambda ()
+                        (setq command-timer nil))
+                      (quotient cabinet:command-repeat-timeout 1000) (mod cabinet:command-repeat-timeout 1000))))
 
-   (define (cabinet-switch-to-previous)
-      (when (not (null wlist-for-manipulation))
-         (setq wlist-for-manipulation
-               (let ((rl (reverse wlist-for-manipulation)))
-                  (list* (car rl) (reverse (cdr rl)))))))
+  (define (update-cabinet-interface-add)
+    (when (x-window-p cabinet-window)
+      (setq wlist-for-manipulation
+            (filter cabinet-filter-for-manipulation-func
+                    (filter cabinet-filter-for-display-func
+                            (stacking-order))))
+      (setq wlist-for-display (filter (lambda (win)
+                                        (not (cabinet-filter-for-manipulation-func win)))
+                                      (stacking-order)))
+      (if workspace-mode
+          (update-on-workspace))
+      (draw-cabinet)))
 
-   (define (toggle-iconify)
-      (let ((w (car wlist-for-manipulation)))
-         (if (window-get w 'iconified)
-               (uniconify-window w)
-            (iconify-window w))))
+  (define (update-cabinet-interface-remove)
+    (when (x-window-p cabinet-window)
+      (let ((old-manipulation wlist-for-manipulation)
+            (old-display wlist-for-display)
+            new-manipulation new-display)
+        (setq new-manipulation
+              (filter cabinet-filter-for-manipulation-func
+                      (filter cabinet-filter-for-display-func
+                              (stacking-order))))
+        (setq new-display (filter (lambda (win)
+                                    (not (cabinet-filter-for-manipulation-func win)))
+                                  (stacking-order)))
+        (mapcar (lambda (w)
+                  (if (not (member w new-manipulation))
+                      (setq wlist-for-manipulation (remove w old-manipulation))))
+                old-manipulation)
+        (mapcar (lambda (w)
+                  (if (not (member w new-display))
+                      (setq wlist-for-manipulation (remove w old-display))))
+                old-display)
+        (if workspace-mode
+            (update-on-workspace))
+        (draw-cabinet))))
 
-   (define (erase-input)
-      (setq cabinet-input ""))
+  (define (update-cabinet-interface #!optional next)
+    (when (x-window-p cabinet-window)
+      (when (not (null wlist-for-manipulation))
+        (if (member next wlist-for-manipulation)
+            (cabinet-switch-to-next)))
+      (if workspace-mode
+          (update-on-workspace))
+      (draw-cabinet)))
 
-   (define (with-draw cmd)  
-      "If your cmd will change Cabinet's
+  (define (cabinet-switch-to-next)
+    (when cabinet-raise-timer
+      (delete-timer cabinet-raise-timer)
+      (setq cabinet-raise-timer nil))
+    (when (not (null wlist-for-manipulation))
+      (setq wlist-for-manipulation
+            (append (cdr wlist-for-manipulation)
+                    (list (car wlist-for-manipulation))))))
+  
+  (define (cabinet-switch-to-previous)
+    (when cabinet-raise-timer
+      (delete-timer cabinet-raise-timer)
+      (setq cabinet-raise-timer nil))
+    (when (not (null wlist-for-manipulation))
+      (setq wlist-for-manipulation
+            (let ((rl (reverse wlist-for-manipulation)))
+              (list* (car rl) (reverse (cdr rl)))))))
+  
+  (define (erase-input)
+    (setq cabinet-input ""))
+  
+  (define (with-draw cmd)  
+    "If your cmd will change Cabinet's
 apperances,then add it."
-      (lambda ()
-         (cmd)
-         (draw-cabinet)))
-
-   (define (with-new-wlist cmd)
-      " If your cmd makes the number of items 
+    (lambda ()
+      (cmd)
+      (draw-cabinet)))
+  
+  (define (with-new-wlist cmd)
+    "If your cmd the number of items 
 grow, then add it"
-      (lambda ()
-         (cmd)
-         (setq wlist-for-manipulation
-               (filter cabinet-filter-for-manipulation-func
-                       (filter cabinet-filter-for-display-func
-                               (stacking-order))))
-         (setq wlist-for-display
-               (filter (lambda (win)
-                          (not (cabinet-filter-for-manipulation-func win)))
-                       (filter cabinet-filter-for-display-func
-                               (stacking-order))))))
-
-   (define (with-update-on-input cmd)
-      " It will filter items  on input after
+    (lambda ()
+      (cmd)
+      (setq wlist-for-manipulation
+            (filter cabinet-filter-for-manipulation-func
+                    (filter cabinet-filter-for-display-func
+                            (stacking-order))))
+      (setq wlist-for-display (filter (lambda (win)
+                                  (not (cabinet-filter-for-manipulation-func win)))
+                                (stacking-order)))))
+  
+  (define (with-update-on-input cmd)
+    " It will filter items on input after
 execution of cmd, add it when you feel proper."
-      (lambda ()  
-         (cmd)
-         (cabinet-update-on-input)))
-
-   (define (cabinet-update-on-input)
-      "Same with `with-update-on-input',except that it's
+    (lambda ()  
+      (cmd)
+      (cabinet-update-on-input)))
+  
+  (define (cabinet-update-on-input)
+    "Same with `with-update-on-input',except that it's
 a procedure with no argument."
-      (setq wlist-for-manipulation
-            (if (not (null wlist-for-manipulation))
-                  (filter (lambda (w)
-                             (string-match cabinet-input
-                                           (concat
-                                            (window-name w)
-                                            (window-class-name w ))
-                                           0 t))
-                          wlist-for-manipulation))))
-
-   (define (with-exit-and-clear-mark cmd)
-      " Use it, when you decide to quit Cabinet after
+    (setq wlist-for-manipulation
+          (if (not (null wlist-for-manipulation))
+              (filter (lambda (w)
+                        (string-match cabinet-input
+                                      (concat
+                                       (window-name w)
+                                       (window-class-name w))
+                                      0 t))
+                      wlist-for-manipulation))))
+  
+  (define (with-exit-and-clear-mark cmd)
+    " Use it, when you decide to quit Cabinet after
 your cmd's execution."
-      (lambda ()
-         (cmd)
-         (mapc (lambda (w)
-                  (window-remprop w 'cabinet-marked))
-               cabinet-orin-wlist)
-         (event-exit-wait)))
+    (lambda ()
+      (cmd)
+      (mapc (lambda (w)
+              (when (window-get w 'marked)
+                (window-remprop w 'marked)
+                (call-marked w)))
+            cabinet-orin-wlist)
+      (event-exit-wait)))
 
-   (define (with-marked-wl cmd)
-      "The marked window will be passed to cmd as a list."
-      (lambda ()
-         (cmd (filter-windows (lambda (w)
-                                 (window-get w
-                                             'cabinet-marked))))))
-   (define (with-selected cmd)
-      "The selected window will be passed to cmd as an argument."
-      (lambda ()
-         (cmd (car wlist-for-manipulation))))
+  (define (with-marked-wl cmd)
+    "The marked windows will be passed to cmd as a list."
+    (lambda ()
+      (cmd (filter-windows (lambda (w)
+                             (window-get w
+                                         'marked))))))
+  
+  (define (with-selected cmd)
+    "The selected window will be passed to cmd as an argument."
+    (lambda ()
+      (cmd (car wlist-for-manipulation))))
+  
+  (define (workspace-prev)
+    (cycle-workspace -1))
+  
+  (define (workspace-next)
+    (cycle-workspace 1))
+  
+  (define (cycle-workspace count)
+    (with-draw
+     (lambda ()
+       ((with-update-on-input (with-new-wlist (lambda () t))))
+       (if workspace-mode
+           (next-workspace count)
+         (setq workspace-mode t)
+         (next-workspace count))
+       (update-on-workspace))))
+  
+  (define (toggle-workspace-mode)
+    (with-draw
+     (lambda ()
+       ((with-update-on-input (with-new-wlist (lambda () t))))
+       (if workspace-mode
+           (setq workspace-mode (not workspace-mode))
+         (setq workspace-mode t)
+         (update-on-workspace)))))
+  
+  (define (with-update-on-workspace cmd)
+    "It filters items for current workspace windows.
+add it, when your command changed workspace"
+    (lambda ()
+      (cmd)
+      (update-on-workspace)))
+  
+  (define (update-on-workspace)
+    " Same with `with-update-on-workspace',except that
+this is a procedure with no argument."
+    (setq wlist-for-manipulation
+          (filter (lambda (w)
+                    (let ((ww (window-get w 'workspaces)))
+                      (or (memq current-workspace ww)
+                          (eq ww nil)))) 
+                  wlist-for-manipulation)))
+  
+  (define (call-marked cmd)
+    "Call marked hook if window marked"
+    (call-window-hook 'window-state-change-hook cmd (list '(marked))))
 
-   (define (cycle-workspace count)
-      (with-draw
-       (lambda ()
-          ((with-update-on-input (with-new-wlist (lambda () t))))
-          (if workspace-mode
-                (next-workspace count)
-             (setq workspace-mode t))
-          (update-on-workspace))))
+  (defvar move-window-to-next-workspace
+    (lambda (w)
+      (let ((nw (+ (car (window-get w 'workspaces)) 1)))
+        (send-to-next-workspace w nw))))
 
-   (define (with-update-on-workspace cmd)
-      "It filters items for
-current workspace windows.
-add it, when your command changed workspace"
-      (lambda ()
-         (cmd)
-         (update-on-workspace)))
+  (defvar move-window-to-previous-workspace
+    (lambda (w)
+      (let ((nw (- (car (window-get w 'workspaces)) 1)))
+        (send-to-next-workspace w nw))))
 
-   (define (update-on-workspace)
-      " Same with `with-update-on-workspace',except that
-this is a procedure with no argument."
-      (when (eq workspace-mode t)
-         (setq wlist-for-manipulation
-               (filter (lambda (w)
-                          (let (
-                                (ww (window-get w 'workspaces)))
-                             (or (memq current-workspace ww)
-                                 (eq ww nil)))) 
-                       wlist-for-manipulation))))
+  (defvar move-window-to-top-left
+    (lambda (w)
+    (let ((dims (window-frame-dimensions w))
+          (h-off (cons 0 0))
+          (screen (calculate-workarea #:window w #:head '0)))
+      (move-window-to w
+                      (clamp* (car h-off)
+                              (car dims) (nth 0 screen) (nth 2 screen))
+                      (clamp* (cdr h-off)
+                              (cdr dims) (nth 1 screen) (nth 3 screen)))
+      (call-window-hook 'after-move-hook w))))
 
-   (define cabinet-keymap
-      (bind-keys (make-keymap)
-                 "C-u" (with-draw
-                        (with-update-on-input
-                         (with-update-on-workspace
-                          (with-new-wlist erase-input))))
+  (defvar move-window-to-center
+    (lambda (w)
+    (let ((dims (window-frame-dimensions w))
+          (h-dims (current-head-dimensions w))
+          (h-off (current-head-offset w))
+          (screen (calculate-workarea #:window w #:head (current-head w))))
+      (move-window-to w
+                      (clamp* (+ (car h-off)
+                                 (quotient (- (car h-dims) (car dims)) 2))
+                              (car dims) (nth 0 screen) (nth 2 screen))
+                      (clamp* (+ (cdr h-off)
+                                 (quotient (- (cdr h-dims) (cdr dims)) 2))
+                              (cdr dims) (nth 1 screen) (nth 3 screen)))
+      (call-window-hook 'after-move-hook w))))
+  
+  (defvar tab-add-maked-windows
+    (lambda ()
+      (let* ((win (car wlist-for-manipulation))
+             (tabs (remove win (filter-windows (lambda (w) (window-get w 'marked))))))
+        (when (car tabs)
+          (require 'sawfish.wm.tabs.tab)
+          (window-remprop win 'marked)
+          (mapcar (lambda (w)
+                    (window-remprop w 'marked)
+                    (tab-window-add-to-tabgroup w)
+                    (tab-window-add-to-tabgroup win))
+                  tabs)
+            (set-input-focus nil)))))
 
-                 "SPC" (with-draw
-                        (with-update-on-input
-                         (lambda ()
-                            (setq cabinet-input
-                                  (concat cabinet-input " ")))))
-                 "BS" (with-draw
-                       (with-update-on-input
-                        (with-update-on-workspace
-                         (with-new-wlist
-                          (lambda ()
-                             (when (> (length cabinet-input) 0)
-                                (setq cabinet-input
-                                      (substring cabinet-input
-                                                 0
-                                                 (1- (length cabinet-input))))
-                                ))))))
-              
-                 "Super-s" (with-draw cabinet-switch-to-next)
-                 "C-s" (with-draw cabinet-switch-to-next)
-                 "Super-r" (with-draw cabinet-switch-to-previous)
-                 "C-r" (with-draw cabinet-switch-to-previous)
-                 "Super-w" (with-selected
-                            (lambda (w)
-                               (delete-window w)
-                               (setq wlist-for-manipulation (cdr wlist-for-manipulation))
-                               (draw-cabinet)))
-                 "Super-z" (with-draw toggle-iconify)
-                 "Super-C-z" (with-draw (lambda ()
-                                           (toggle-iconify)
-                                           (cabinet-switch-to-next)))
-                 "RET" (with-exit-and-clear-mark
-                        (with-selected
-                         (lambda (w)
-                           (display-window w))))
-                 "Super-g" (with-exit-and-clear-mark (lambda ()
-                                                        (select-workspace cabinet-orin-workspace)
-                                                        (restack-windows cabinet-orin-wlist)
-                                                        (set-input-focus cabinet-orin-focus)))
-                 "Super-x" (with-draw
-                            (with-update-on-input
-                             (lambda ()
-                                (let (
-                                      (tmp wlist-for-manipulation))
-                                   (setq wlist-for-manipulation wlist-for-display
-                                         wlist-for-display tmp)))))
-                 "Super-SPC" (with-draw
-                              (with-selected
-                               (lambda (w)
-                                  (window-put w
-                                              'cabinet-marked
-                                              (not
-						(window-get w 'cabinet-marked))))))
-                 "Super-S" (cycle-workspace 1)
-                 "Super-R" (cycle-workspace -1)
-                 "Super-v" (with-draw
-                            (lambda ()
-                               ((with-update-on-input
-                                 (with-new-wlist
-                                  (lambda () t))))
-                               (setq workspace-mode (not workspace-mode))))
-                ;; "Right" (with-draw
-                 ;;          (with-selected
-                 ;;           (lambda (w)
-                 ;;              (send-to-next-workspace w 1))))
-                 ;; "Left" (with-draw
-                 ;;         (with-selected
-                 ;;          (lambda (w)
-                 ;;             (send-to-next-workspace w -1))))
-                 ))
+  (define (run-cmd-and-do cmd do)
+    (when (not command-timer)
+      (command-delay-timer)
+      (let ((win (car wlist-for-manipulation))
+            (next (car (cdr wlist-for-manipulation))))
+        (if (eq cmd 'tab-add-maked-windows)
+            (tab-add-maked-windows)
+          (if (and (filter-windows (lambda (w) (window-get w 'marked)))
+                   cabinet:advance-user-keybindings)
+              (mapcar (lambda (x)
+                        (cmd x))
+                      (filter-windows (lambda (w) (window-get w 'marked))))
+            (cmd win)))
+        (when (string= do "close")
+          (mapc (lambda (w)
+                  (when (window-get w 'marked)
+                    (window-remprop w 'marked)
+                    (call-marked w)))
+                cabinet-orin-wlist)
+          (event-exit-wait)
+          (x-destroy-window cabinet-window)
+          (display-window win))
+        
+        (when (string= do "none")
+          (mapc (lambda (w)
+                  (when (window-get w 'marked)
+                    (window-remprop w 'marked)
+                    (call-marked w)))
+                cabinet-orin-wlist)
+          (update-cabinet-interface))
+        
+        (when (string= do "go-to-next")
+          (mapc (lambda (w)
+                  (when (window-get w 'marked)
+                    (window-remprop w 'marked)
+                    (call-marked w)))
+                cabinet-orin-wlist)
+          (update-cabinet-interface next)))))
 
-   ;; end @ keymap package
+  (define (cabinet-keymap-complete)
+    (let ((keymap-complete))
+      (if bad-key
+          (bind-keys (make-keymap) nil)
+        (if (and cabinet:advance-user-keybindings
+                 (car cabinet:advance-keybindings))
+            (setq keymap-complete (append (cabinet-keymap-base) (cabinet-keymap-advance)))
+          (setq keymap-complete (cabinet-keymap-base)))
+        keymap-complete)))
 
-   (define (draw-cabinet)
-      (let (
-            (selected-w (car wlist-for-manipulation)))
-         (when (not (null wlist-for-manipulation))
-            (manipulation-on-selected selected-w))
+  (define (cabinet-keymap-advance)
+    (let ((keybind-list cabinet:advance-keybindings)
+          keymap-list tmp)
+      (mapcar (lambda (w)
+                (setq tmp (list (car w) (list run-cmd-and-do (nth 1 w) (prin1-to-string (nth 3 w)))))
+                (setq keymap-list (append keymap-list (cdr (bind-keys (make-keymap) (nth 0 tmp) (nth 1 tmp))))))
+              keybind-list)
+      keymap-list))
 
-         (draw-items (append (mapcar cabinet-item-format wlist-for-manipulation)
-                             (list (cabinet-split-line))
-                             (mapcar cabinet-item-format wlist-for-display))
-                     (concat cabinet-input "_"))
-         ))
-         
-   (defvar cabinet-handler
-      `(
-        (,(lambda (key) (= 1 (length key)))
-         .
-         ,(lambda (key)
-             (setq cabinet-input (concat cabinet-input key))
-             (cabinet-update-on-input)
-             (draw-cabinet)))))
+  (define (cabinet-keymap-base)
+    (bind-keys (make-keymap)
+               "RET" (with-exit-and-clear-mark
+                      (with-selected
+                       (lambda (w)
+                         (display-window w))))
+               "KP_Enter" (with-exit-and-clear-mark
+                           (with-selected
+                            (lambda (w)
+                              (display-window w))))
+               "SPC" (with-draw
+                      (with-update-on-input
+                       (lambda ()
+                         (setq cabinet-input
+                               (concat cabinet-input " ")))))
+               "BS" (with-draw
+                     (with-update-on-input
+                      (with-update-on-workspace
+                       (with-new-wlist
+                        (lambda ()
+                          (when (> (length cabinet-input) 0)
+                            (setq cabinet-input
+                                  (substring cabinet-input
+                                             0
+                                             (1- (length cabinet-input))))))))))
+               cabinet:cycle (with-draw cabinet-switch-to-next)
+               cabinet:reversely-cycle (with-draw cabinet-switch-to-previous)
+               cabinet:restore-order (with-exit-and-clear-mark 
+                                      (lambda ()
+                                        (select-workspace cabinet-orin-workspace)
+                                        (restack-windows cabinet-orin-wlist)
+                                        (set-input-focus cabinet-orin-focus)
+                                        (when (and focus-by-tab 
+                                                   (numberp (window-id focus-by-tab)))
+                                          (do-when-tabbed focus-by-tab 'focus)
+                                          (setq focus-by-tab nil))))
+               cabinet:exchange-manipulation (with-draw
+                                              (with-update-on-input
+                                               (lambda ()
+                                                 (let ((tmp wlist-for-manipulation))
+                                                   (setq wlist-for-manipulation wlist-for-display
+                                                         wlist-for-display tmp)))))
+               cabinet:toggle-workspace-mode (toggle-workspace-mode)
+               cabinet:cycle-workspaces (workspace-next)
+               cabinet:cycle-reversely-workspaces (workspace-prev)
+               cabinet:mark-selected (when cabinet:advance-user-keybindings
+                                       (with-draw
+                                        (with-selected
+                                         (lambda (w)
+                                           (window-put w 'marked
+                                                       (not (window-get w 'marked)))
+                                           (call-marked w)))))))
+  ;; end @ keymap package
+  (define (draw-cabinet)
+    (let ((w (car wlist-for-manipulation)))
+      (when (not (null wlist-for-manipulation))
+        (when (eq cabinet:manipulation-on-selected 'Raise)
+          (setq cabinet-raise-timer
+                (make-timer (lambda ()
+                              (raise-window w)
+                              (do-when-tabbed w 'raise))
+                            (quotient cabinet:raise-window-timeout 1000) (mod cabinet:raise-window-timeout 1000))))
+        (when (eq cabinet:manipulation-on-selected 'Focus)
+          (setq cabinet-raise-timer
+                (make-timer (lambda ()
+                              (raise-window w)
+                              (set-input-focus w))
+                            (quotient cabinet:raise-window-timeout 1000) (mod cabinet:raise-window-timeout 1000))))
+        (when (eq cabinet:manipulation-on-selected 'None) 
+          (set-input-focus nil)))
+      (draw-items (append (mapcar cabinet-item-format wlist-for-manipulation)
+                          (list (cabinet-split-line))
+                          (mapcar cabinet-item-format wlist-for-display))
+                  (concat cabinet-input "_"))))
+  
+  (defvar cabinet-handler
+    `((,(lambda (key) (= 1 (length key)))
+       .
+       ,(lambda (key)
+          (setq cabinet-input (concat cabinet-input key))
+          (cabinet-update-on-input)
+          (draw-cabinet)))))
 
-   (define (cabinet-switch)
-      "The Main function."
+  (define (unbound-check)
+    (if bad-key
+        (progn (display-bad-key)
+               nil)
+      (display-message nil)
+      't))
 
+  (define (cabinet-switch)
+    "Start cabinet switch."
+    (if bad-key
+        (display-bad-key)
+      (when (and (input-focus) 
+                 (window-tabbed-p (input-focus))
+                 (eq cabinet:manipulation-on-selected 'Raise))
+          (set-input-focus nil)
+          (setq focus-by-tab (input-focus)))
       (setq cabinet-orin-wlist (stacking-order)
             cabinet-orin-focus (input-focus)
-
             cabinet-input ""
             cabinet-orin-workspace current-workspace
-            workspace-mode workspace-mode-on-initial
+            workspace-mode cabinet:workspace-mode-on-initial
             cabinet-filter-for-display-func
-            (cabinet-filter cabinet-filter-out-for-display-list)
+            (cabinet-filter cabinet:filter-out-from-display)
             cabinet-filter-for-manipulation-func
-            (cabinet-filter cabinet-filter-out-for-manipulation-list)
+            (cabinet-filter cabinet:filter-out-for-manipulation)
             wlist-for-cabinet (filter cabinet-filter-for-display-func
                                       (stacking-order))
-
             wlist-for-manipulation (filter cabinet-filter-for-manipulation-func
                                            wlist-for-cabinet)
             wlist-for-display (filter (lambda (win)
-                                         (not (cabinet-filter-for-manipulation-func win)))
-                                      wlist-for-cabinet)
-            )
-    
-  
+                                        (not (cabinet-filter-for-manipulation-func win)))
+                                      wlist-for-cabinet))
       (when workspace-mode
-         (update-on-workspace))
-   
-      (when cycle-as-start
-         (cabinet-switch-to-next))
-  
+        (update-on-workspace))
+      (when cabinet:cycle-as-start
+        (cabinet-switch-to-next))
       (draw-cabinet)
+      (event-wait-for #:keymap (cabinet-keymap-complete)
+                      #:handler cabinet-handler
+                      #:loop-on-unbound (unbound-check))
+      (x-destroy-window cabinet-window)))
 
-      (event-wait-for #:keymap cabinet-keymap
-                    #:handler cabinet-handler
-                    #:loop-on-unbound t)
-      (x-destroy-window cabinet-window))
-   (define-command 'cabinet-switch cabinet-switch)
-   )
+  (search-bad-key)
+
+  (unless batch-mode
+    (add-hook 'tab-group-windows-hook update-cabinet-interface)
+    (add-hook 'before-add-window-hook update-cabinet-interface-add)
+    (add-hook 'destroy-notify-hook update-cabinet-interface-remove))
+
+  (define-command 'cabinet-switch cabinet-switch))
diff -urNad sawfish.orgi/lisp/sawfish/wm/keymaps.jl sawfish/lisp/sawfish/wm/keymaps.jl
--- sawfish.orgi/lisp/sawfish/wm/keymaps.jl
+++ sawfish/lisp/sawfish/wm/keymaps.jl
@@ -87,7 +87,9 @@
   (defcustom global-keymap (bind-keys (make-keymap)
 				      "W-Left" 'previous-workspace
 				      "W-Right" 'next-workspace
-				      "W-Tab" 'cycle-windows)
+                      "W-Tab" 'cycle-windows
+                      "Super-Tab" 'cabinet-switch
+                      "C-Tab" 'cabinet-switch)
     "Keymap active anywhere."
     :group bindings
     :type keymap
diff -urNad sawfish.orgi/lisp/sawfish/wm/tabs/tab.jl sawfish/lisp/sawfish/wm/tabs/tab.jl
--- sawfish.orgi/lisp/sawfish/wm/tabs/tab.jl
+++ sawfish/lisp/sawfish/wm/tabs/tab.jl
@@ -26,6 +26,7 @@
             tabbar-left-margin-transient
             tabbar-right-margin
             tabbar-right-margin-transient
+            tab-window-add-to-tabgroup
             set-tab-adjustments)
 
     (open rep
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
+++ sawfish/lisp/sawfish/wm/tabs/tabgroup.jl
@@ -28,6 +28,11 @@
             tab-release-window
             tab-raise-left-window
             tab-raise-right-window
+            tab-move-to-beginning
+            tab-move-to-end
+            tab-move-to-right
+            tab-move-to-left
+            tab-window-group-index
             tab-find-window
             tab-rank
             tab-group-window-list
@@ -102,7 +107,7 @@
             (equal (aref (nth 2 (get-x-property w '_NET_WM_WINDOW_TYPE)) 0) '_NET_WM_WINDOW_TYPE_NORMAL))))
 
   (define (window-tabbed-p w)
-    (window-get w 'tabbed))
+        (window-get w 'tabbed))
 
   (define-record-type :tab-group
     (tab-build-group p d wl)
@@ -577,13 +582,13 @@
                     (window-put w 'never-iconify t))
                   (window-put w 'tabbed t)) wins)
         (call-hook 'tab-group-windows-hook (list (tab-group-windows win)))
-        (raise-window win)
+        ;;(raise-window win)
         (setq all-wins nil))
       (setq tab-refresh-lock t)
       (when (window-tabbed-p win)
         (tab-refresh-group win 'move)
         (tab-refresh-group win 'frame)
-        (set-input-focus (nth 0 (tab-group-windows-stacking-order win)))
+        ;;(set-input-focus (nth 0 (tab-group-windows-stacking-order win)))
         (when clicked-frame
           (move-cursor-in-tabbar (input-focus))
           (setq clicked-frame nil)))
@@ -600,7 +605,7 @@
               tabbar-left-margin)))
       (if (not (eq (window-get win 'current-frame-style) (nth 0 (frame-style-tabbars-support win))))
           (warp-cursor (+ (car (window-position win)) start-right (nth 4 tab-pos-list) (quotient (nth 6 tab-pos-list) 2))
-                       (+ (quotient (- (cdr (window-frame-dimensions win)) (cdr (window-dimensions win)) 2) 2) (cdr (window-position win))))
+                       (+ (quotient (- (cdr (window-frame-dimensions win)) (cdr (window-dimensions win)) 4) 2) (cdr (window-position win))))
         (let ((current-pos 
                (if (window-get win 'title-position)
                    (window-get win 'title-position)
diff -urNad sawfish.orgi/lisp/sawfish/wm/util/events.jl sawfish/lisp/sawfish/wm/util/events.jl
--- sawfish.orgi/lisp/sawfish/wm/util/events.jl
+++ sawfish/lisp/sawfish/wm/util/events.jl
@@ -1,87 +1,89 @@
-;; hqw-util.jl 1.0 -- A bunch of util functions for sawfish
+;; events.jl
 
-;; Time-stamp: <2011-12-15 10:23:36 hqwrong>
 ;; Copyright (C) 2011, hqwrong <hq.wrong@xxxxxxxxx>
 
-;; Permission is granted to copy, distribute and/or modify this
-;; document under the terms of the GNU Free Documentation License,
-;; Version 1.3 or any later version published by the Free Software
-;; Foundation.
+;; This file is part of sawfish.
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License                                                                                      
+;; along with this program.  If not, see `http://www.gnu.org/licenses/'. 
+
 
-;;
-;;; Commentary:
 (define-structure sawfish.wm.util.events
 
-      (export event-wait-for
-              event-exit-wait)
+    (export event-wait-for
+            event-exit-wait)
 
-      (open rep
-            rep.data
-            rep.system
-            rep.regexp
-            rep.lang.math
-            sawfish.wm.state.shading
-            sawfish.wm.state.iconify
-            sawfish.wm.stacking
-            sawfish.wm.viewport
-            sawfish.wm.state.maximize
-            sawfish.wm.custom
-            sawfish.wm.commands
-            sawfish.wm.colors
-            sawfish.wm.events
-            sawfish.wm.fonts
-            sawfish.wm.images
-            sawfish.wm.misc
-            sawfish.wm.util.x
-            sawfish.wm.windows
-            sawfish.wm.workspace)
+    (open rep
+          rep.data
+          rep.system
+          rep.regexp
+          sawfish.wm.misc
+          sawfish.wm.events
+          sawfish.wm.commands)
 
-(define (event-wait-for #!key
-                      (keymap '(keymap))
-                      loop-on-unbound
-                      handler
-                      exit-hook)
-   "wait-for an event.
-	`keymap' is used as the override keymap during `recursive-edit'
+  (define (event-wait-for #!key
+                          (keymap '(keymap))
+                          loop-on-unbound
+                          handler
+                          exit-hook)
+    "wait-for an event.
+`keymap' is used as the override keymap during `recursive-edit'
         
-        `handler' is a list of cons cell,as (predict
+`handler' is a list of cons cell,as (predict
 . procedure), when the key event has no bound in keymap, then the
 key name is passed to each predict by order.Once eval to t ,then
 the associated procedure is called with key as argument,then
 re-enter in `recursive-edit'.Otherwise,if loop-on-unbound is nil,
 exit loop.
 
-        `exit-hook' ,if setted,will be called with key's name as argument,
+`exit-hook' ,if setted,will be called with key's name as argument,
 after exit from loop."
    
-   (call-with-keyboard-grabbed
-    (lambda ()
+    (call-with-keyboard-grabbed
+     (lambda ()
        (let ((override-keymap keymap)
              (re-exit (lambda ()
-                         (throw 're-exit
-                                (event-name (current-event)))))
+                        (throw 're-exit
+                               (event-name (current-event)))))
              (key nil))
-          (add-hook 'unbound-key-hook re-exit)
-          (while (catch 'event-exit
-                    (setq key
-                          (catch 're-exit
-                             (recursive-edit)))
-                    (when handler
-                       (do ((l handler (cdr handler)))
-                             ((null l) t)
-                          (let* ((cell (car l))
-                                 (pred (car cell))
-                                 (proc (cdr cell)))
-                             (when (pred key)
-                                (proc key)
-                                (throw 'event-exit t)))))
-                    (when (not loop-on-unbound)
-                       (throw 'event-exit nil))
-                    t)
-             t)
-          (when exit-hook
-             (exit-hook key))))))
+         ;; XXX No idea what this hook do, here i only got
+         ;; XXX a error messages if i click on an frame part:
+         ;; XXX
+         ;; XXX Sawfish error: 
+         ;; XXX No catcher for throw: re-exit
+         ;; XXX
+         ;; XXX Disable this hook untill someone fix this.
+         ;;(add-hook 'unbound-key-hook re-exit)
+         (while (catch 'event-exit
+                  (setq key
+                        (catch 're-exit
+                          (recursive-edit)))
+                  (when handler
+                     (do ((l handler (cdr handler)))
+                        ((null l) t)
+                        (let* ((cell (car l))
+                               (pred (car cell))
+                               (proc (cdr cell)))
+                          (when (pred key)
+                            (proc key)
+                            (throw 'event-exit t)))))
+                  (when (not loop-on-unbound)
+                    (throw 'event-exit nil))
+                  t)
+           t)
+         (when exit-hook
+           (exit-hook key))))))
 
-(define (event-exit-wait)
-   "You'll find it useful,when you're using `event-wait-for'"
-   (throw 'event-exit)))
+  (define (event-exit-wait)
+    "You'll find it useful,when you're using `event-wait-for'"
+    (throw 'event-exit)))
diff -urNad sawfish.orgi/po/de.po sawfish/po/de.po
--- sawfish.orgi/po/de.po
+++ sawfish/po/de.po
@@ -14,13 +14,13 @@
 # Christopher Roy Bratusek <nano@xxxxxxxxxxxxx>, 2011.
 # Christian Kirbach <Christian.Kirbach@xxxxxxxxxxxxxx>, 2009, 2010, 2011.
 # Hendrik Richter <hendrikr@xxxxxxxxx>, 2005.
-# fuchur <flohtransporter@xxxxxxxxx>, 2013.
+# fuchur <flohtransporter@xxxxxxxxx>, 2013, 2014.
 msgid ""
 msgstr ""
 "Project-Id-Version: Sawfish WM\n"
 "Report-Msgid-Bugs-To: http://sawfish.tuxfamily.org/flyspray/\n";
 "POT-Creation-Date: 2011-06-23 11:00+0200\n"
-"PO-Revision-Date: 2013-10-09 18:01+0200\n"
+"PO-Revision-Date: 2014-05-02 19:21+0200\n"
 "Last-Translator: fuchur <flohtransporter@xxxxxxxxx>\n"
 "Language-Team: German <me@home>\n"
 "MIME-Version: 1.0\n"
@@ -6055,42 +6055,585 @@
 msgstr "Cabinet"
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
-msgid "The horizontal margin of cabinet"
-msgstr "Abstand des Menüs zum seitlichen Rand von Cabinet"
+msgid "Keybindings"
+msgstr "Tastenkombinationen"
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
-msgid "The vertically margin of cabinet"
-msgstr "Abstand des Menüs zum oberen Rand von Cabinet"
+msgid "Margin to the border of cabinet."
+msgstr "Abstand des Menüs zum Rand von Cabinet."
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
-msgid " The margin between item and item."
-msgstr "Abstand zwischen den Menüeinträgen von Cabinet"
+msgid "Margin between items."
+msgstr "Abstand zwischen den Menüeinträgen von Cabinet."
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
-msgid ""
-"whether cycle overhead,when start cabinet-switch.\n"
-"Just like x-cycle"
-msgstr "Das verhalten von Cabinet wird dem von x-cycle nachempfunden."
+msgid "Margin between input line and the first item."
+msgstr ""
+"Abstand zwischen der Eingabeaufforderung und dem ersten Menüeintrag von "
+"Cabinet."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Icon size."
+msgstr "Icon Grö�e."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Display only windows from current workspace."
+msgstr "Nur Fenster der aktuellen Arbeitsfläche anzeigen."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Display cabinet on active monitor."
+msgstr "Cabinet auf dem aktiven Monitor anzeigen."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Cycle overhead when start cabinet-switch, like x-cycle."
+msgstr ""
+"Beim aufrufen von Cabinet zum nächsten Menüeintrag springen, wie beim x-cycle."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Action if browse across cabinet."
+msgstr "Verhalten der Fenstern beim blättern in Cabinet."
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
 msgid ""
-"whether to show windows in current workspace.\n"
-"nil, means to show windows of all workspaces."
-msgstr "Cabinet nur auf Fenster der aktuellen Arbeitsfläche anzeigen."
+"Delay in milliseconds until a window gets raised if browse across cabinet.. "
+"\\bottom"
+msgstr "Verzögerung bis ein Fenster beim blättern angehoben wird.. \\bottom"
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
-msgid "The margin between input line and the first item"
+msgid "Delay in milliseconds until a window keybinding gets repeats. \\bottom"
 msgstr ""
-"Abstand zwischen der Eingabeaufforderung und dem ersten Menüeintrag von "
-"Cabinet"
+"Verzögerung der Tastatureingabe bis ein Fensterereignisse wiederholt wird. \\bottom"
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
-msgid "Cabinet switch"
-msgstr "Cabinet Fensterleiste"
+msgid "Font color."
+msgstr "Farbe der Schrift."
 
 #. ../lisp/sawfish/wm/ext/cabinet.jl
-msgid "The Main function."
-msgstr "Die Hauptfunktion von Cabinet."
+msgid "Background color."
+msgstr "Farbe des Hintergrunds."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Input text color."
+msgstr "Farbe der Eingabeaufforderung."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Split line color."
+msgstr "Farbe der Trennlinie."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Maximized windows color."
+msgstr "Farbe bei maximierten Fenstern."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Iconified windows color."
+msgstr "Farbe bei minimierten Fenstern."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Shaded windows color."
+msgstr "Farbe bei eingerollten Fenstern."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Windows displayed below the split line."
+msgstr "Fenster die unterhalb der Trennlinie angezeigt werden."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Windows removed from cabinet."
+msgstr "Fenster die nicht in Cabinet angezeigt werden."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Cycle through windows."
+msgstr "Durch die Fenster blättern."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Reversely cycle through windows."
+msgstr "Rückwärts durch die Fenster blättern."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Exit with restore stack order."
+msgstr "Beenden und Reihenfolge der Fenster wiederherstellen."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Toggle windows from current or all workspaces."
+msgstr ""
+"Umschalten zwischen Fenstern von der aktuellen und allen Arbeitsflächen."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Toggle windows for display and for manipulation."
+msgstr ""
+"Umschalten zwischen Fenstern die ausgewählt werden können und jenen die nur "
+"angezeigt werden."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Cycle through workspaces."
+msgstr "Durch die Arbeitsflächen blättern."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Reversely cycle through workspaces."
+msgstr "Rückwärts durch die Arbeitsflächen blättern."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Advance user keymap."
+msgstr "Tastenkombinationen für Fortgeschrittene Benutzer."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Marked window as selected."
+msgstr "Fenster als ausgewählt markieren."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "After executed cabinet:"
+msgstr "Nachdem ausgeführt Cabinet:"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Cabinet:"
+msgstr "Cabinet:"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "\nIs duplicate."
+msgstr "\nIst doppelt."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "\nDisable cabinet."
+msgstr "\nCabinet ausgeschaltet."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "\nIs not a valid x-keysym-name."
+msgstr "\nIst kein zulässiger »x-keysym-name«."
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "Raise"
+msgstr "Anheben"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "go-to-next"
+msgstr "Zu nächste gehen"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "delete-window"
+msgstr "Fenster »Löschen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-iconified"
+msgstr "Fenster »Minimieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-toggle"
+msgstr "Fenster »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-shaded"
+msgstr "Fenster »Einrollen« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-sticky"
+msgstr "Fenster »Anheften« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-full-toggle"
+msgstr "Fenster auf Xinerama Vollbild »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-full-vertical-left-toggle"
+msgstr "Fenster auf der Linken halben Bildschirmgrö�e »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-full-vertical-right-toggle"
+msgstr "Fenster auf der Rechten halben Bildschirmgrö�e »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-fill-window-toggle"
+msgstr "Fenster füllend »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-fill-window-horizontally-toggle"
+msgstr "Fenster horizontal »Füllend Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-fill-window-vertically-toggle"
+msgstr "Fenster vertikal »Füllend Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-fullscreen-toggle"
+msgstr "Fenster auf Vollbild »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-horizontally-toggle"
+msgstr "Fenster Horizontal »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-vertically-toggle"
+msgstr "Fenster Vertikal »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-fullxinerama-toggle"
+msgstr "Fenster auf Xinerama Vollbild »Maximieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-fixed-postion"
+msgstr "Fenster »Feste Position« an/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-never-focus"
+msgstr "Fenster »Nie fokussieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-ignored"
+msgstr "Fenster »Ignorieren« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-task-list-skip"
+msgstr "Fenster »In Taskliste überspringen« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-cycle-skip"
+msgstr "Fenster »Beim durchlaufen überspringen« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-list-skip"
+msgstr "Fenster »In der Fensterliste überspringen« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-window-sticky-viewport"
+msgstr "Fenster auf Sichtfeld »Anheften« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "toggle-desktop"
+msgstr "Desktop »Anzeigen« ein/aus"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "send-to-next-head"
+msgstr "Fenster zum nächsten Monitor »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "send-to-previous-head"
+msgstr "Fenster zum vorherigen Monitor »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-to-center"
+msgstr "Fenster in die Mitte des Bildschirms »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-to-top-left"
+msgstr "Fenster nach oben links auf der Arbeitsfläche »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-down"
+msgstr "Fenster aufs Sichtfeld nach unten »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-right"
+msgstr "Fenster aufs rechte Sichtfeld »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-left"
+msgstr "Fenster aufs linke Sichtfeld »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-next"
+msgstr "Fenster ins nächstes Sichtfeld »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-previous"
+msgstr "Fenster ins vorherige Sichtfeld »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab-add-maked-windows"
+msgstr "Markierte Fenster als Reiter »Hinzufügen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab-release-window"
+msgstr "Reiter aus Reiterleiste »Lösen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab-move-to-end"
+msgstr "Reiter ans Ende der Reiterleiste »Schieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab-move-to-beginning"
+msgstr "Reiter an den Anfang der Reiterleiste »Schieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab-move-to-right"
+msgstr "Reiter nach Rechts in der Reiterleiste »Schieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab-move-to-left"
+msgstr "Reiter nach Links in der Reiterleiste »Schieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab/titelbar-toggle"
+msgstr "Titelleiste zum gegenüber liegendem Fensterrand »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab/titelbar-to-top"
+msgstr "Titelleiste zum Oberen Fensterrand »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab/titelbar-to-bottom"
+msgstr "Titelleiste zum Unterem Fensterrand »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab/titelbar-to-right"
+msgstr "Titelleiste zum Rechten Fensterrand »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "tab/titelbar-to-left"
+msgstr "Titelleiste zum Linken Fensterrand »Verschieben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "raise-window"
+msgstr "Fenster »Anheben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "lower-window"
+msgstr "Fenster »Absenken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "raise-single-window"
+msgstr "Einzelnes Fenster »Anheben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "raise-lower-single-window"
+msgstr "Einzelnes Fenster »Absenken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "raise-window-depth"
+msgstr "Fenster Tiefe »Anheben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "raise-lower-window"
+msgstr "Fenster »Anheben/Absenken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "lower-window-depth"
+msgstr "Fenster Tiefe »Absenken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "raise-window-and-transients"
+msgstr "Fenster und Dialoge »Anheben«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "raise-lower-window-and-transients"
+msgstr "Fenster und Dialoge »Anheben/Absenken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "shrink-window-up"
+msgstr "Fenster nach oben »Schrumpfen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "shrink-window-down"
+msgstr "Fenster nach unten »Schrumpfen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "shrink-window-left"
+msgstr "Fenster nach links »Schrumpfen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "shrink-window-right"
+msgstr "Fenster nach rechts »Schrumpfen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "yank-window-up"
+msgstr "Fenster nach oben »Zerren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "yank-window-down"
+msgstr "Fenster nach unten »Zerren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "yank-window-left"
+msgstr "Fenster nach links »Zerren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "yank-window-right"
+msgstr "Fenster nach rechts »Zerren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "size-window-add-column"
+msgstr "Fenster um eine Spalte »Vergrö�ern«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "size-window-subtract-column"
+msgstr "Fenster um eine Spalte »Verkleinern«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "size-window-add-row"
+msgstr "Fenster um eine Zeile »Vergrö�ern«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "size-window-subtract-row"
+msgstr "Fenster um eine Zeile »Verkleinern«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "grow-window-up"
+msgstr "Fenster nach oben »Ausweiten«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "grow-window-down"
+msgstr "Fenster nach unten »Ausweiten«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "grow-window-left"
+msgstr "Fenster nach links »Ausweiten«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "grow-window-right"
+msgstr "Fenster nach rechts »Ausweiten«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "pack-window-up"
+msgstr "Fenster nach oben »Packen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "pack-window-down"
+msgstr "Fenster nach unten »Packen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "pack-window-right"
+msgstr "Fenster nach rechts »Packen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "pack-window-left"
+msgstr "Fenster nach links »Packen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "double-window-size"
+msgstr "Fenstergrö�e »Verdoppeln«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "halve-window-size"
+msgstr "Fenstergrö�e »Halbieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "delete-window-safely"
+msgstr "Fenster »Sicher löschen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "destroy-window"
+msgstr "Fenster »Zerstören«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "window-history-save-position"
+msgstr "Fensterchronik Position »Speichern«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "window-history-save-dimensions"
+msgstr "Fensterchronik Ma�e »Speichern«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "window-history-save-attributes"
+msgstr "Fensterchronik Attribute »Speichern«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "window-history-forget"
+msgstr "Fensterchronik »Vergessen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "iconify-window"
+msgstr "Fenster »Minimieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "uniconify-window"
+msgstr "Fenster »Wiederherstellen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "shade-window"
+msgstr "Fenster »Einrollen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "unshade-window"
+msgstr "Fenster »Ausrollen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "make-window-ignored"
+msgstr "Fenster »Ignorieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "make-window-not-ignored"
+msgstr "Fenster »Nicht ignorieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "make-window-sticky"
+msgstr "Fenster »Anheften«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "make-window-unsticky"
+msgstr "Fenster »Anheften« ausschalten"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-to-next-workspace"
+msgstr "Fenster auf nächste Arbeitsfläche »Schicken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "move-window-to-previous-workspace"
+msgstr "Fenster auf vorherige Arbeitsfläche »Schicken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "send-to-workspace-left"
+msgstr "Fenster auf linke Arbeitsfläche »Schicken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "send-to-workspace-right"
+msgstr "Fenster auf rechte Arbeitsfläche »Schicken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "send-to-workspace-up"
+msgstr "Fenster auf obere Arbeitsfläche »Schicken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "send-to-workspace-down"
+msgstr "Fenster auf untere Arbeitsfläche »Schicken«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-discard"
+msgstr "Fenster »Maximiert« verwerfen"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-fill-window"
+msgstr "Fenster »Füllend Maximieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-fill-window-horizontally"
+msgstr "Fenster horizontal »Füllend Maximiere«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-fill-window-vertically"
+msgstr "Fenster vertikal »Füllend Maximiere«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "unmaximize-window"
+msgstr "Fenster »Unmaximieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-fullscreen"
+msgstr "Fenster auf Vollbild »Maximieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-fullxinerama"
+msgstr "Fenster auf Xinerama Vollbild »Maximieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-horizontally"
+msgstr "Fenster horizontal »Maximieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "maximize-window-vertically"
+msgstr "Fenster vertikal »Maximieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "copy-to-next-workspace"
+msgstr "Fenster auf nächste Arbeitsfläche »Kopieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "copy-to-previous-workspace"
+msgstr "Fenster auf vorherige Arbeitsfläche »Kopieren«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "focus-desktop"
+msgstr "Arbeitsfläche »Anzeigen«"
+
+#. ../lisp/sawfish/wm/ext/cabinet.jl
+msgid "hide-desktop"
+msgstr "Arbeitsfläche »Verbergen«"
 
 #. ../lisp/sawfish/wm/ext/auto-raise.jl
 msgid "Auto-Raise"

Attachment: cabinet-missing.png
Description: image/apple-ios-png

Attachment: Bildschirmfoto - 04.05.2014 - 14:24:05.png
Description: image/apple-ios-png

Attachment: Bildschirmfoto - 04.05.2014 - 14:24:20.png
Description: image/apple-ios-png

Attachment: Bildschirmfoto - 04.05.2014 - 14:24:34.png
Description: image/apple-ios-png



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/