From pbrochard at common-lisp.net Mon Feb 18 22:05:34 2008 From: pbrochard at common-lisp.net (Philippe Brochard) Date: Mon, 18 Feb 2008 23:05:34 +0100 Subject: [clfswm-announce] Major update of clfswm Message-ID: <87zltxdioh.fsf@free.fr> Hi all, After some exchange with Cyrille Thouvenin I started to rewrite some parts of clfswm. The main major change is that there is no more references to workspaces, all is a group. There is a root group and there childs. A child can be a group or an application window. Here is the old data structure: -------------------------------------------------- (defstruct workspace number group-list) (defstruct group x y width height window-list fullscreenp) (defparameter *workspace-list* nil) -------------------------------------------------- Here is the new one: -------------------------------------------------- (defclass group name number x y w h layout window gc child ...) -simplified- (defparameter *root-group* nil "Root of the root - ie the root group") (defparameter *current-root* nil "The current fullscreen maximized child") (defparameter *current-child* nil "The current child with the focus") -------------------------------------------------- Now using clfswm is like walking throw a tree of groups and windows. Here is the current keybinding to navigate throw this tree: Alt-Tab: circulate throw childs of *current-child* if it is a group. Alt-Left/Right: circulate throw brother childs (ie: this is like workspaces) Alt-Up: select the first child. Alt-Down: select the father of *current-child* Alt-Enter: Make the current selected child the current root (ie maximize it) Alt+Shift-Enter: Make the father of current root the current root (ie unmaximize the current child) There is no workspace but the same effect is obtened by circulating throw brothers childs. The advantages: - you can have workspace in any level. - there is no need for the pager: _you_are_in_the_pager_!!! You can find some screenshots here for a better idea: http://common-lisp.net/project/clfswm/temp/ Others changes are: * group/window coordinates are in float number between 0 (left) and 1 (right) so we can zoom them. Each group have its own window. * each group can have its own layout: no-layout: groups have there size, windows are maximized in the father group maximize-layout: groups and windows are maximized tile-layout: groups and windows are tiled tile-left/right/...: tile like in larswm/dwm... ... and so on - it's very easy to add a new layout. * a group is named so you can tell where you want to map a new window. * Each time a new window is created each group can do something with it (nothing, absorbe this window, copy this window, open a new group and map the window in it, open it in the group named toto... This is a more general process than the previous control-o (open next window in a new workspace)) * Chained key binding. Key binding are grouped by action and there is a little window to present possibles choices (there is no more a lot of keys to remember). * Currently I'm trying to have a different focus policy by groups (I don't know if I'll integrate this by default). Ouf, here it is :) It's a great change but the code is more simple (for example there is no more duplicated code with the second mode and the pager because there is no more pager :) I'll commited all this changes. So don't be too surprised by the new cvs content! Have fun, Philippe -- Philippe Brochard http://hocwp.free.fr From pbrochard at common-lisp.net Sun Feb 24 21:14:15 2008 From: pbrochard at common-lisp.net (Philippe Brochard) Date: Sun, 24 Feb 2008 22:14:15 +0100 Subject: [clfswm-announce] Let's go for the next CLFSWM version Message-ID: <87ablq2h20.fsf@free.fr> Hi all, As I said in the last mail, I've done a lot of rework on CLFSWM to change its internal structure. Now the code is much simple and there is no more needs for the pager. If you look at the code and want to walk throw the group tree, don't crash your head on a recurcif algorithm. You can simply use the with-all-* macros. Here are some examples: -------------------------------------------------- ;; Walk throw all childs (with-all-childs (*root-group* child) (typecase child (xlib:window (print (xlib:wm-name child))) (group (print (group-number child))))) ;; Walk throw all groups (with-all-group (*root-group* group) (print (group-number group))) ;; Walk throw all windows (with-all-windows (*root-group* window) (print (wm-name xlib:window))) ;; Walk throw all childs - First form is applied on windows and the ;; second on groups (with-all-groups-windows (*root-group* child) (print (xlib:wm-name child)) (print (group-number child))) -------------------------------------------------- Also there is less keybinding, just press 'm' in the second mode to open a menu. All is not already there (like pack, resize, the mouse...) but I use this version already so there is nothing that prevent to have it in the CVS. Philippe -- Philippe Brochard http://hocwp.free.fr From pbrochard at common-lisp.net Sun Feb 24 21:18:18 2008 From: pbrochard at common-lisp.net (Philippe Brochard) Date: Sun, 24 Feb 2008 22:18:18 +0100 Subject: [clfswm-announce] CLFSWM wiki opened Message-ID: <8763we2gv9.fsf@free.fr> Hi all, I've set up a wiki about CLFSWM here: http://hocwp.free.fr/clfswm-wiki/ Feel free to enhance it, share your ideas or your feeling about clfswm. There is a page for free discution if you find it more convenient than the mailing list. PS: Also, the devel mailing list is the prefered way to discuss about CLFSWM in general. Have fun, Philippe -- Philippe Brochard http://hocwp.free.fr