garbeam@0: /* garbeam@0: * (C)opyright MMVI Anselm R. Garbe garbeam@0: * See LICENSE file for license details. garbeam@0: */ garbeam@0: garbeam@32: #include garbeam@2: garbeam@32: /********** CUSTOMIZE **********/ garbeam@0: garbeam@51: #define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" garbeam@78: #define BGCOLOR "#0a2c2d" garbeam@78: #define FGCOLOR "#ddeeee" garbeam@78: #define BORDERCOLOR "#176164" garbeam@78: /* garbeam@51: #define BGCOLOR "#666699" garbeam@59: #define FGCOLOR "#eeeeee" garbeam@51: #define BORDERCOLOR "#9999CC" garbeam@78: */ garbeam@51: #define MASTERW 52 /* percent */ garbeam@51: #define WM_PROTOCOL_DELWIN 1 garbeam@13: garbeam@32: /* tags */ garbeam@59: enum { Tscratch, Tdev, Twww, Twork, TLast }; garbeam@32: garbeam@32: /********** CUSTOMIZE **********/ garbeam@32: garbeam@51: typedef union Arg Arg; garbeam@34: typedef struct DC DC; garbeam@18: typedef struct Client Client; garbeam@32: typedef struct Fnt Fnt; garbeam@18: typedef struct Key Key; garbeam@51: typedef struct Rule Rule; garbeam@49: garbeam@49: union Arg { garbeam@49: const char **argv; garbeam@49: int i; garbeam@49: }; garbeam@18: garbeam@5: /* atoms */ garbeam@13: enum { WMProtocols, WMDelete, WMLast }; garbeam@0: enum { NetSupported, NetWMName, NetLast }; garbeam@0: garbeam@5: /* cursor */ garbeam@0: enum { CurNormal, CurResize, CurMove, CurInput, CurLast }; garbeam@0: garbeam@32: struct Fnt { garbeam@32: XFontStruct *xfont; garbeam@32: XFontSet set; garbeam@32: int ascent; garbeam@32: int descent; garbeam@32: int height; garbeam@32: }; garbeam@32: garbeam@34: struct DC { /* draw context */ garbeam@32: GC gc; garbeam@32: Drawable drawable; garbeam@32: int x, y, w, h; garbeam@32: Fnt font; garbeam@32: unsigned long bg; garbeam@32: unsigned long fg; garbeam@32: unsigned long border; garbeam@32: }; garbeam@32: garbeam@0: struct Client { garbeam@31: char name[256]; garbeam@31: char *tags[TLast]; garbeam@13: int proto; garbeam@20: int x, y, w, h; garbeam@22: int tx, ty, tw, th; garbeam@20: int basew, baseh, incw, inch, maxw, maxh, minw, minh; garbeam@29: int grav; garbeam@29: unsigned int border; garbeam@20: long flags; garbeam@80: Bool isfloat; garbeam@0: Window win; garbeam@0: Window title; garbeam@0: Client *next; garbeam@50: Client *revert; garbeam@0: }; garbeam@0: garbeam@51: struct Rule { garbeam@51: const char *class; garbeam@51: const char *instance; garbeam@51: char *tags[TLast]; garbeam@80: Bool isfloat; garbeam@51: }; garbeam@51: garbeam@8: struct Key { garbeam@8: unsigned long mod; garbeam@8: KeySym keysym; garbeam@49: void (*func)(Arg *arg); garbeam@49: Arg arg; garbeam@8: }; garbeam@8: garbeam@0: extern Display *dpy; garbeam@57: extern Window root, barwin; garbeam@77: extern Atom wmatom[WMLast], netatom[NetLast]; garbeam@0: extern Cursor cursor[CurLast]; garbeam@31: extern Bool running, issel; garbeam@53: extern void (*handler[LASTEvent])(XEvent *); garbeam@53: extern void (*arrange)(Arg *); garbeam@73: extern Key key[]; garbeam@0: garbeam@57: extern int tsel, screen, sx, sy, sw, sh, bx, by, bw, bh, mw; garbeam@57: extern char *tags[TLast], stext[1024]; garbeam@3: garbeam@34: extern DC dc; garbeam@50: extern Client *clients, *sel; garbeam@3: garbeam@5: /* client.c */ garbeam@75: extern void ban(Client *c); garbeam@76: extern void focus(Client *c); garbeam@76: extern void focusnext(Arg *arg); garbeam@76: extern void focusprev(Arg *arg); garbeam@76: extern Client *getclient(Window w); garbeam@76: extern Client *getctitle(Window w); garbeam@76: extern void gravitate(Client *c, Bool invert); garbeam@76: extern void higher(Client *c); garbeam@76: extern void killclient(Arg *arg); garbeam@76: extern void lower(Client *c); garbeam@10: extern void manage(Window w, XWindowAttributes *wa); garbeam@76: extern void maximize(Arg *arg); garbeam@52: extern void resize(Client *c, Bool inc); garbeam@74: extern void setsize(Client *c); garbeam@76: extern void settitle(Client *c); garbeam@76: extern void unmanage(Client *c); garbeam@75: extern void zoom(Arg *arg); garbeam@13: garbeam@33: /* draw.c */ garbeam@75: extern void drawall(); garbeam@74: extern void drawstatus(); garbeam@74: extern void drawtitle(Client *c); garbeam@74: extern unsigned long getcolor(const char *colstr); garbeam@74: extern void setfont(const char *fontstr); garbeam@43: extern unsigned int textw(char *text); garbeam@33: garbeam@75: /* event.c */ garbeam@73: extern void grabkeys(); garbeam@18: garbeam@43: /* main.c */ garbeam@76: extern int getproto(Window w); garbeam@75: extern void quit(Arg *arg); garbeam@76: extern void sendevent(Window w, Atom a, long value); garbeam@75: extern int xerror(Display *dsply, XErrorEvent *ee); garbeam@43: garbeam@75: /* tag.c */ garbeam@76: extern void appendtag(Arg *arg); garbeam@75: extern void dofloat(Arg *arg); garbeam@75: extern void dotile(Arg *arg); garbeam@76: extern Client *getnext(Client *c); garbeam@76: extern void replacetag(Arg *arg); garbeam@76: extern void settags(Client *c); garbeam@73: extern void view(Arg *arg); garbeam@73: garbeam@32: /* util.c */ garbeam@76: extern void *emallocz(unsigned int size); garbeam@75: extern void eprint(const char *errstr, ...); garbeam@49: extern void spawn(Arg *arg);