Cool wm
it won't replace my patched dwm (I miss a top bar
, but if there was a way to hide dzen and show it with keypressesthat would work for me
), but it's simplicity is very appealing !
keep up the good work
I don't see that much of a resource uasge difference... maybe that's because dwm is so light already :s
Last edited by el mariachi (2011-08-20 12:26:50)
Offline
Thanks for adding it to github, and really cool that you've begun xcb porting, that rocks!
Imho, you should change the name away from catwm, like you've allready talked about, as I believe you're not allowed to use a copyighted name without consent from the author...
@el mariachi, i've not tryed this new revision yet, but the last rev i tried used a little under half the ram of dwm and much smaller filesize, but to get accurate memory usage, then please use ps_mem.py to test with...
Offline
'snip'
It's great to see that you've picked up on the wm. However, I do believe that you need to retain mention of catwm in your license, as it is a fork and still contains a lot of code from the original project.
Cheers for that ?
Here's the relevant part.)
Offline
@el mariachi I never found dwm to be that light and it seemed to be more complicated than I need with the tagging etc so this wm with a few additions/revisions works fine for me.
@ mhertz Thanks for that
I've added the date I started changing catwm to the files on github so I think I have that covered now.
Cheers
You're just jealous because the voices only talk to me.
Offline
There is another CatWM?! It's such a good name
It's funny that you said DWM isn't that light haha it really shows that we're playing in a whole different league with these WM's xD
I must say this may in fact replace DWM for me.. just one or two things I miss from DWM and that's it
Last edited by el mariachi (2011-08-20 23:07:00)
Offline ?
What you have right now looks fine. I hate to seem like a licensing Nazi, but I felt that credit should be given to pyknite. Wonderful job on the wm by the way.
Cheers!
Offline
@el mariachi there's not much to change for a top panel just a few lines in the tile() function
void tile() { client *c; int n = 0; int x = 0; // If only one window if(head != NULL && head->next == NULL) { XMoveResizeWindow(dis,head->win,0,PANEL_HEIGHT,sw-BORDER_WIDTH,sh-BORDER_WIDTH); } else if(head != NULL) { switch(mode) { case 0: /* Horizontal */ // Master window XMoveResizeWindow(dis,head->win,0,PANEL_HEIGHT,sw-BORDER_WIDTH,master_size - BORDER_WIDTH); // Stack for(c=head->next;c;c=c->next) ++n; for(c=head->next;c;c=c->next) { XMoveResizeWindow(dis,c->win,x,PANEL_HEIGHT+master_size + BORDER_WIDTH,(sw/n) - BORDER_WIDTH,sh-master_size - (2 * BORDER_WIDTH)); x += sw/n; } break; case 1: /* Fullscreen */ for(c=head;c;c=c->next) { XMoveResizeWindow(dis,c->win,0,PANEL_HEIGHT,sw-2*BORDER_WIDTH,sh-2*BORDER_WIDTH); } break; case 2: /* Vertical */ // Master window XMoveResizeWindow(dis,head->win,0,PANEL_HEIGHT,master_size - BORDER_WIDTH,sh - BORDER_WIDTH); // Stack for(c=head->next;c;c=c->next) ++n; x = PANEL_HEIGHT; for(c=head->next;c;c=c->next) { XMoveResizeWindow(dis,c->win,master_size + BORDER_WIDTH,x,sw-master_size-(2*BORDER_WIDTH),(sh/n) - BORDER_WIDTH); x += sh/n; } break; default: break; } } }
and start your conky|dzen or whatever you want to use up the top
You're just jealous because the voices only talk to me.?
@mhertz: only 300kb of ram cool
next to the monsterous 30mb of xorg and the biblic 300mb of chromium xD
Last edited by el mariachi (2011-08-21 09:41:27)?
Yes.
The easiest way to fix it would be to grab the files from github and then change the tile() function so everything is there.
You could try to just add
#define BORDER_WIDTH 2 #define PANEL_HEIGHT 20
to config.h but I don't know what else you're missing.
edit: I've updated the window manager el mariachi and host it on github so will be working from that
Last edited by moetunes (2011-08-21 10:01:19)
You're just jealous because the voices only talk to me...
Last edited by el mariachi (2011-08-21 10:37:30)..
Basically all I've been doing is adding things to the window manager that would let me configure it like I wanted. As I mainly use a pent3 700mhz laptop with 256mB ram I appreciate a light wm but catwm needed some more options for me so I added them. I fixed a bad window error crashing the wm, fixed numlock being on stopping the keyboard shortcuts from working and added an option to focus the window the mouse moves to if the option is set in the config file without adding much to the resources used at all. Adding an option for a top panel in the config would only be an extra few lines of code and the c file is still under 800 lines so I'd be happy to add it.
Cheers
edit: updated git with an option in the config for the panel to be at the top - added 6 lines of code
Last edited by moetunes (2011-08-21 11:17:21)
You're just jealous because the voices only talk to me.
Offline
Not that the name matters when the code is good, but personally, i've always hated the name catwm and the "cute" in "cute and tiny wm", so i'm glad you changed it...
The new name imho is great!
Btw, i'm still using musca as my only vm, but I love dminiwm as an automatic tiler, and have just set up arch with dminiwm for my father, which wanted automatic-tiling...
Offline
@moetunes
Sorry mate, the relevant gpl section i posted earlier for you, where from gpl-v2, whereas catwm is licensed under gpl-v3...
Relevant part from gpl-v.
The "meaning" is the same, though, so no probs...
Offline
I modified it so that it installs as catwm in my system
to each his own
not that dminiwm has anything wrong ..
Moe: thanks for the panel mate (again). I think I'm fairly happy with it. Taggin in dwm helps, but this flies
Offline
I modified it so that it installs as catwm in my system
to each his ownto each his own
not that dminiwm has anything wrong ..not that dminiwm has anything wrong ..
HAHA, cool! Yeah, it's probably just me being a little weird here!
CU, Martin.
Offline
I've got the xcb port up and running with numerical keyboard shortcuts at
github if anyone wants a try of it.
I'll make a post about it once I've got the readme properly sorted.
Cheers
Last edited by moetunes (2011-08-25 03:36:07)
You're just jealous because the voices only talk to me.
Offline
will try it later, thanks moe.
@later: humm the keys are not working for me.. tty1 isn't showing any error message and compilation was smooth. I used xev to find out the keycodes. I can't launch anything.
Missing lib?
Last edited by el mariachi (2011-08-25 09:37:10)
Offline
I've fixed up the ghost/zombie window issue and added the grid tiling mode from the xcb port.
For those interested in the code the catwm remove_window function didn't save the desktop if there was just one window. Once that was fixed it was just a matter of going through the desktops in the destroynotify function until the window being destroyed was found.
It's here.
Cheers
Last edited by moetunes (2011-09-07 07:55:35)
You're just jealous because the voices only talk to me.
Offline
There were a couple of bugs with the above fix which are sorted now.
I'm happy that this is now at a stable enough stage for development in new directions.
Cheers
You're just jealous because the voices only talk to me.
Offline
Hey pyknite, you forgot to retain the DWM copyright notice when you forked catwm from DWM. Please add it to honor your predecessors and the law!
Offline
Offline
If you liked catwm, maybe you'll also enjoy dminiwm and snapwm and monsterwm that picked up from catwm
Offline
i did, i tried them all
on osx, slack, freebsd.on osx, slack, freebsd.
they worked fine but i need good xinerama support so i use dwm/xmonad for the momentthey worked fine but i need good xinerama support so i use dwm/xmonad for the moment
Hi, I tried to add some xinerama support a few month ago... I never finished it but if I remember, it was "almost" working (I mean, it detect screens, run the wm on both screens, but the management of window wasn't finished)... Have a look if you're still interested:
#include <X11/Xlib.h> #include <X11/keysym.h> #include <X11/XF86keysym.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> #include <sys/wait.h> // Screen managed by Xinerama #ifdef XINERAMA #include <X11/extensions/Xinerama.h> #endif // Screen managed by Xrandr #ifdef XRANDR #include <X11/extensions/Xrandr.h> #endif #define TABLENGTH(X) (sizeof(X)/sizeof(*X)) typedef struct client client; struct client { client *next; client *prev; Window w; }; typedef struct view view; struct view { client *head; client *cur; int mode; }; typedef struct monitor monitor; struct monitor { int sw; int sh; int x; int y; view views[10]; }; typedef union { const char** com; const int i; } Arg; struct key { unsigned int mod; KeySym keysym; void (*function)(const Arg arg); const Arg arg; }; // Include configuration file (need struct key) #include "config.h" // Variable static Display *dis; static int bool_quit; static int current_monitor; static monitor *monitors; static int monitors_count; static int screen; static Window root; // Events array static void (*events[LASTEvent])(XEvent *e) = { [KeyPress] = keypress, [MapRequest] = maprequest, [DestroyNotify] = destroynotify, [ConfigureNotify] = configurenotify, [ConfigureRequest] = configurerequest, }; void setup() { // Install a signal sigchld(0); monitors_count = 0; current_monitor = 0; update_monitors(); screen = DefaultScreen(dis); root = RootWindow(dis,screen); // For exiting bool_quit = 0; grabkeys(); // To catch maprequest,destroynotify, xrandr events,... XSelectInput(dis,root,StructureNotifyMask|SubstructureNotifyMask|SubstructureRedirectMask|PropertyChangeMask); } void update_monitors() { #ifdef XINERAMA if(XineramaIsActive(dis)) { int i,count=0; XineramaScreenInfo *info = NULL; // Get numbers of monitors and some info if(!(info = XineramaQueryScreens(dis, &count))) die("Error XineramaQueryScreens!"); // Update if(count == monitors_count) { for(i=0;i<count;++i) { monitors[i].sw = info[i].width; monitors[i].sh = info[i].height; monitors[i].x = info[i].x_org; monitors[i].y = info[i].y_org; } } // More monitors else if(count > monitors_count) { if(!(monitors = (monitor*)realloc(monitors,count*sizeof(monitor)))) die("Error realloc!"); // Update monitors info (only new monitors) for(i=count-(count-monitors_count);i<count;++i) { monitors[i].sw = info[i].width; monitors[i].sh = info[i].height; monitors[i].x = info[i].x_org; monitors[i].y = info[i].y_org; monitors[i].current =monitors[i].head = NULL; } } // Less monitors (realloc client to first monitor) else if(count < monitors_count) { if(!(monitors = (monitor*)realloc(monitors,count*sizeof(monitor)))) die("Error realloc!"); } // Updatge monitors_count monitors_count = count; XFree(info); } #endif #ifdef XRANDR die("XRANDR extensensions not yet implemented!"); #endif }
Offline