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/ |