Cleaned up dwm to satisfy linter, added f7 as shortcut to emacs
This commit is contained in:
parent
346b5d2655
commit
71b8162345
|
@ -1,4 +1,5 @@
|
||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include "dwm.h"
|
||||||
|
|
||||||
/* appearance */
|
/* appearance */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
|
@ -15,15 +16,11 @@ static const char col_gray3[] = "#bbbbbb";
|
||||||
static const char col_gray4[] = "#eeeeee";
|
static const char col_gray4[] = "#eeeeee";
|
||||||
static const char col_cyan[] = "#005577";
|
static const char col_cyan[] = "#005577";
|
||||||
static const char col_red[] = "#ff0000";
|
static const char col_red[] = "#ff0000";
|
||||||
|
|
||||||
static const char *colors[][3] = {
|
static const char *colors[][3] = {
|
||||||
/* fg bg border */
|
/* fg bg border */
|
||||||
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
|
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
|
||||||
[SchemeSel] = { col_gray4, col_red, col_red },
|
[SchemeSel] = { col_gray4, col_red, col_red },
|
||||||
//[SchemeStatus] = { col_gray3, col_gray1, "#000000" }, // Statusbar right {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeTagsSel] = { col_gray4, col_cyan, "#000000" }, // Tagbar left selected {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeTagsNorm] = { col_gray3, col_gray1, "#000000" }, // Tagbar left unselected {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeInfoSel] = { col_gray4, col_cyan, "#000000" }, // infobar middle selected {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeInfoNorm] = { col_gray3, col_gray1, "#000000" }, // infobar middle unselected {text,background,not used but cannot be empty}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* tagging */
|
/* tagging */
|
||||||
|
@ -65,6 +62,7 @@ static const Layout layouts[] = {
|
||||||
/* commands */
|
/* commands */
|
||||||
static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, "-F", NULL };
|
static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, "-F", NULL };
|
||||||
static const char *termcmd[] = { "dwm_terminal_emulator", NULL };
|
static const char *termcmd[] = { "dwm_terminal_emulator", NULL };
|
||||||
|
static const char *emacscmd[] = { "emacs", NULL };
|
||||||
|
|
||||||
static Key keys[] = {
|
static Key keys[] = {
|
||||||
/* modifier key function argument */
|
/* modifier key function argument */
|
||||||
|
@ -105,6 +103,7 @@ static Key keys[] = {
|
||||||
TAGKEYS( XK_3, 2)
|
TAGKEYS( XK_3, 2)
|
||||||
TAGKEYS( XK_4, 3)
|
TAGKEYS( XK_4, 3)
|
||||||
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
|
{ 0, XK_F7, spawn, {.v = emacscmd} },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* button definitions */
|
/* button definitions */
|
||||||
|
@ -123,3 +122,4 @@ static const Button buttons[] = {
|
||||||
{ ClkTagBar, MODKEY, Button1, tag, {0} },
|
{ ClkTagBar, MODKEY, Button1, tag, {0} },
|
||||||
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
12
dwm/config.h
12
dwm/config.h
|
@ -1,4 +1,5 @@
|
||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include "dwm.h"
|
||||||
|
|
||||||
/* appearance */
|
/* appearance */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
|
@ -15,15 +16,11 @@ static const char col_gray3[] = "#bbbbbb";
|
||||||
static const char col_gray4[] = "#eeeeee";
|
static const char col_gray4[] = "#eeeeee";
|
||||||
static const char col_cyan[] = "#005577";
|
static const char col_cyan[] = "#005577";
|
||||||
static const char col_red[] = "#ff0000";
|
static const char col_red[] = "#ff0000";
|
||||||
|
|
||||||
static const char *colors[][3] = {
|
static const char *colors[][3] = {
|
||||||
/* fg bg border */
|
/* fg bg border */
|
||||||
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
|
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
|
||||||
[SchemeSel] = { col_gray4, col_red, col_red },
|
[SchemeSel] = { col_gray4, col_red, col_red },
|
||||||
//[SchemeStatus] = { col_gray3, col_gray1, "#000000" }, // Statusbar right {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeTagsSel] = { col_gray4, col_cyan, "#000000" }, // Tagbar left selected {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeTagsNorm] = { col_gray3, col_gray1, "#000000" }, // Tagbar left unselected {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeInfoSel] = { col_gray4, col_cyan, "#000000" }, // infobar middle selected {text,background,not used but cannot be empty}
|
|
||||||
//[SchemeInfoNorm] = { col_gray3, col_gray1, "#000000" }, // infobar middle unselected {text,background,not used but cannot be empty}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* tagging */
|
/* tagging */
|
||||||
|
@ -35,7 +32,7 @@ static const Rule rules[] = {
|
||||||
/* WM_NAME(STRING) = title */
|
/* WM_NAME(STRING) = title */
|
||||||
/* class instance title tags mask isfloating monitor */
|
/* class instance title tags mask isfloating monitor */
|
||||||
{ "Gimp", NULL, NULL, 0, 0, -1 },
|
{ "Gimp", NULL, NULL, 0, 0, -1 },
|
||||||
//{ "Firefox", NULL, NULL, 1 << 8, 0, -1 },
|
{ "hot-babe", NULL, NULL, 0, 1, -1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* layout(s) */
|
/* layout(s) */
|
||||||
|
@ -65,6 +62,7 @@ static const Layout layouts[] = {
|
||||||
/* commands */
|
/* commands */
|
||||||
static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, "-F", NULL };
|
static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, "-F", NULL };
|
||||||
static const char *termcmd[] = { "dwm_terminal_emulator", NULL };
|
static const char *termcmd[] = { "dwm_terminal_emulator", NULL };
|
||||||
|
static const char *emacscmd[] = { "emacs", NULL };
|
||||||
|
|
||||||
static Key keys[] = {
|
static Key keys[] = {
|
||||||
/* modifier key function argument */
|
/* modifier key function argument */
|
||||||
|
@ -105,6 +103,7 @@ static Key keys[] = {
|
||||||
TAGKEYS( XK_3, 2)
|
TAGKEYS( XK_3, 2)
|
||||||
TAGKEYS( XK_4, 3)
|
TAGKEYS( XK_4, 3)
|
||||||
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
|
{ 0, XK_F7, spawn, {.v = emacscmd} },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* button definitions */
|
/* button definitions */
|
||||||
|
@ -123,3 +122,4 @@ static const Button buttons[] = {
|
||||||
{ ClkTagBar, MODKEY, Button1, tag, {0} },
|
{ ClkTagBar, MODKEY, Button1, tag, {0} },
|
||||||
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,10 @@
|
||||||
|
#ifndef DRW_H
|
||||||
|
#define DRW_H
|
||||||
|
|
||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xft/Xft.h>
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Cursor cursor;
|
Cursor cursor;
|
||||||
|
@ -56,3 +62,5 @@ int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned in
|
||||||
|
|
||||||
/* Map functions */
|
/* Map functions */
|
||||||
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
|
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
262
dwm/dwm.c
262
dwm/dwm.c
|
@ -20,6 +20,7 @@
|
||||||
*
|
*
|
||||||
* To understand everything else, start reading main().
|
* To understand everything else, start reading main().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
@ -43,234 +44,9 @@
|
||||||
|
|
||||||
#include "drw.h"
|
#include "drw.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
#include "dwm.h"
|
||||||
|
|
||||||
/* macros */
|
|
||||||
#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
|
|
||||||
#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
|
|
||||||
#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \
|
|
||||||
* MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy)))
|
|
||||||
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
|
|
||||||
#define LENGTH(X) (sizeof X / sizeof X[0])
|
|
||||||
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
|
||||||
#define WIDTH(X) ((X)->w + 2 * (X)->bw)
|
|
||||||
#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
|
|
||||||
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
|
||||||
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
|
||||||
|
|
||||||
/* enums */
|
|
||||||
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
|
|
||||||
enum { SchemeNorm, SchemeSel }; /* color schemes */
|
|
||||||
enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
|
|
||||||
NetWMFullscreen, NetActiveWindow, NetWMWindowType,
|
|
||||||
NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
|
|
||||||
enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
|
|
||||||
enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
|
|
||||||
ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
int i;
|
|
||||||
unsigned int ui;
|
|
||||||
float f;
|
|
||||||
const void *v;
|
|
||||||
} Arg;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned int click;
|
|
||||||
unsigned int mask;
|
|
||||||
unsigned int button;
|
|
||||||
void (*func)(const Arg *arg);
|
|
||||||
const Arg arg;
|
|
||||||
} Button;
|
|
||||||
|
|
||||||
typedef struct Monitor Monitor;
|
|
||||||
typedef struct Client Client;
|
|
||||||
struct Client {
|
|
||||||
char name[256];
|
|
||||||
float mina, maxa;
|
|
||||||
int x, y, w, h;
|
|
||||||
int oldx, oldy, oldw, oldh;
|
|
||||||
int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid;
|
|
||||||
int bw, oldbw;
|
|
||||||
unsigned int tags;
|
|
||||||
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
|
||||||
Client *next;
|
|
||||||
Client *snext;
|
|
||||||
Monitor *mon;
|
|
||||||
Window win;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned int mod;
|
|
||||||
KeySym keysym;
|
|
||||||
void (*func)(const Arg *);
|
|
||||||
const Arg arg;
|
|
||||||
} Key;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char *symbol;
|
|
||||||
void (*arrange)(Monitor *);
|
|
||||||
} Layout;
|
|
||||||
|
|
||||||
struct Monitor {
|
|
||||||
char ltsymbol[16];
|
|
||||||
float mfact;
|
|
||||||
int nmaster;
|
|
||||||
int num;
|
|
||||||
int by; /* bar geometry */
|
|
||||||
int mx, my, mw, mh; /* screen size */
|
|
||||||
int wx, wy, ww, wh; /* window area */
|
|
||||||
unsigned int seltags;
|
|
||||||
unsigned int sellt;
|
|
||||||
unsigned int tagset[2];
|
|
||||||
int showbar;
|
|
||||||
int topbar;
|
|
||||||
Client *clients;
|
|
||||||
Client *sel;
|
|
||||||
Client *stack;
|
|
||||||
Monitor *next;
|
|
||||||
Window barwin;
|
|
||||||
const Layout *lt[2];
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char *class;
|
|
||||||
const char *instance;
|
|
||||||
const char *title;
|
|
||||||
unsigned int tags;
|
|
||||||
int isfloating;
|
|
||||||
int monitor;
|
|
||||||
} Rule;
|
|
||||||
|
|
||||||
/* function declarations */
|
|
||||||
static void applyrules(Client *c);
|
|
||||||
static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
|
|
||||||
static void arrange(Monitor *m);
|
|
||||||
static void arrangemon(Monitor *m);
|
|
||||||
static void attach(Client *c);
|
|
||||||
static void attachstack(Client *c);
|
|
||||||
static void buttonpress(XEvent *e);
|
|
||||||
static void checkotherwm(void);
|
|
||||||
static void cleanup(void);
|
|
||||||
static void cleanupmon(Monitor *mon);
|
|
||||||
static void clientmessage(XEvent *e);
|
|
||||||
static void configure(Client *c);
|
|
||||||
static void configurenotify(XEvent *e);
|
|
||||||
static void configurerequest(XEvent *e);
|
|
||||||
static Monitor *createmon(void);
|
|
||||||
static void destroynotify(XEvent *e);
|
|
||||||
static void detach(Client *c);
|
|
||||||
static void detachstack(Client *c);
|
|
||||||
static Monitor *dirtomon(int dir);
|
|
||||||
static void drawbar(Monitor *m);
|
|
||||||
static void drawbars(void);
|
|
||||||
static void enternotify(XEvent *e);
|
|
||||||
static void expose(XEvent *e);
|
|
||||||
static void focus(Client *c);
|
|
||||||
static void focusin(XEvent *e);
|
|
||||||
static void focusmon(const Arg *arg);
|
|
||||||
static void focusstack(const Arg *arg);
|
|
||||||
static Atom getatomprop(Client *c, Atom prop);
|
|
||||||
static int getrootptr(int *x, int *y);
|
|
||||||
static long getstate(Window w);
|
|
||||||
static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
|
|
||||||
static void grabbuttons(Client *c, int focused);
|
|
||||||
static void grabkeys(void);
|
|
||||||
static void incnmaster(const Arg *arg);
|
|
||||||
static void keypress(XEvent *e);
|
|
||||||
static void killclient(const Arg *arg);
|
|
||||||
static void manage(Window w, XWindowAttributes *wa);
|
|
||||||
static void mappingnotify(XEvent *e);
|
|
||||||
static void maprequest(XEvent *e);
|
|
||||||
static void monocle(Monitor *m);
|
|
||||||
static void motionnotify(XEvent *e);
|
|
||||||
static void movemouse(const Arg *arg);
|
|
||||||
static Client *nexttiled(Client *c);
|
|
||||||
static void pop(Client *c);
|
|
||||||
static void propertynotify(XEvent *e);
|
|
||||||
static void quit(const Arg *arg);
|
|
||||||
static Monitor *recttomon(int x, int y, int w, int h);
|
|
||||||
static void resize(Client *c, int x, int y, int w, int h, int interact);
|
|
||||||
static void resizeclient(Client *c, int x, int y, int w, int h);
|
|
||||||
static void resizemouse(const Arg *arg);
|
|
||||||
static void restack(Monitor *m);
|
|
||||||
static void run(void);
|
|
||||||
static void scan(void);
|
|
||||||
static int sendevent(Client *c, Atom proto);
|
|
||||||
static void sendmon(Client *c, Monitor *m);
|
|
||||||
static void setclientstate(Client *c, long state);
|
|
||||||
static void setfocus(Client *c);
|
|
||||||
static void setfullscreen(Client *c, int fullscreen);
|
|
||||||
static void setlayout(const Arg *arg);
|
|
||||||
static void setmfact(const Arg *arg);
|
|
||||||
static void setup(void);
|
|
||||||
static void seturgent(Client *c, int urg);
|
|
||||||
static void showhide(Client *c);
|
|
||||||
static void sigchld(int unused);
|
|
||||||
static void spawn(const Arg *arg);
|
|
||||||
static void tag(const Arg *arg);
|
|
||||||
static void tagmon(const Arg *arg);
|
|
||||||
static void tile(Monitor *m);
|
|
||||||
static void togglebar(const Arg *arg);
|
|
||||||
static void togglefloating(const Arg *arg);
|
|
||||||
static void togglefullscreen(const Arg *arg);
|
|
||||||
static void toggletag(const Arg *arg);
|
|
||||||
static void toggleview(const Arg *arg);
|
|
||||||
static void unfocus(Client *c, int setfocus);
|
|
||||||
static void unmanage(Client *c, int destroyed);
|
|
||||||
static void unmapnotify(XEvent *e);
|
|
||||||
static void updatebarpos(Monitor *m);
|
|
||||||
static void updatebars(void);
|
|
||||||
static void updateclientlist(void);
|
|
||||||
static int updategeom(void);
|
|
||||||
static void updatenumlockmask(void);
|
|
||||||
static void updatesizehints(Client *c);
|
|
||||||
static void updatestatus(void);
|
|
||||||
static void updatetitle(Client *c);
|
|
||||||
static void updatewindowtype(Client *c);
|
|
||||||
static void updatewmhints(Client *c);
|
|
||||||
static void view(const Arg *arg);
|
|
||||||
static Client *wintoclient(Window w);
|
|
||||||
static Monitor *wintomon(Window w);
|
|
||||||
static int xerror(Display *dpy, XErrorEvent *ee);
|
|
||||||
static int xerrordummy(Display *dpy, XErrorEvent *ee);
|
|
||||||
static int xerrorstart(Display *dpy, XErrorEvent *ee);
|
|
||||||
static void zoom(const Arg *arg);
|
|
||||||
|
|
||||||
/* variables */
|
|
||||||
static const char broken[] = "broken";
|
|
||||||
static char stext[256];
|
|
||||||
static int screen;
|
|
||||||
static int sw, sh; /* X display screen geometry width, height */
|
|
||||||
static int bh; /* bar height */
|
|
||||||
static int lrpad; /* sum of left and right padding for text */
|
|
||||||
static int (*xerrorxlib)(Display *, XErrorEvent *);
|
|
||||||
static unsigned int numlockmask = 0;
|
|
||||||
static void (*handler[LASTEvent]) (XEvent *) = {
|
|
||||||
[ButtonPress] = buttonpress,
|
|
||||||
[ClientMessage] = clientmessage,
|
|
||||||
[ConfigureRequest] = configurerequest,
|
|
||||||
[ConfigureNotify] = configurenotify,
|
|
||||||
[DestroyNotify] = destroynotify,
|
|
||||||
[EnterNotify] = enternotify,
|
|
||||||
[Expose] = expose,
|
|
||||||
[FocusIn] = focusin,
|
|
||||||
[KeyPress] = keypress,
|
|
||||||
[MappingNotify] = mappingnotify,
|
|
||||||
[MapRequest] = maprequest,
|
|
||||||
[MotionNotify] = motionnotify,
|
|
||||||
[PropertyNotify] = propertynotify,
|
|
||||||
[UnmapNotify] = unmapnotify
|
|
||||||
};
|
|
||||||
static Atom wmatom[WMLast], netatom[NetLast];
|
|
||||||
static int running = 1;
|
|
||||||
static Cur *cursor[CurLast];
|
|
||||||
static Clr **scheme;
|
|
||||||
static Display *dpy;
|
|
||||||
static Drw *drw;
|
|
||||||
static Monitor *mons
|
|
||||||
|
|
||||||
, *selmon;
|
|
||||||
static Window root, wmcheckwin;
|
|
||||||
|
|
||||||
/* configuration, allows nested code to access above variables */
|
/* configuration, allows nested code to access above variables */
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -439,11 +215,11 @@ buttonpress(XEvent *e)
|
||||||
i = x = 0;
|
i = x = 0;
|
||||||
do
|
do
|
||||||
x += TEXTW(tags[i]);
|
x += TEXTW(tags[i]);
|
||||||
while (ev->x >= x && ++i < LENGTH(tags));
|
while ((unsigned int)ev->x >= x && ++i < LENGTH(tags));
|
||||||
if (i < LENGTH(tags)) {
|
if (i < LENGTH(tags)) {
|
||||||
click = ClkTagBar;
|
click = ClkTagBar;
|
||||||
arg.ui = 1 << i;
|
arg.ui = 1 << i;
|
||||||
} else if (ev->x < x + TEXTW(selmon->ltsymbol))
|
} else if ((unsigned int)ev->x < x + TEXTW(selmon->ltsymbol))
|
||||||
click = ClkLtSymbol;
|
click = ClkLtSymbol;
|
||||||
else if (ev->x > selmon->ww - (int)TEXTW(stext))
|
else if (ev->x > selmon->ww - (int)TEXTW(stext))
|
||||||
click = ClkStatusText;
|
click = ClkStatusText;
|
||||||
|
@ -525,8 +301,8 @@ clientmessage(XEvent *e)
|
||||||
if (!c)
|
if (!c)
|
||||||
return;
|
return;
|
||||||
if (cme->message_type == netatom[NetWMState]) {
|
if (cme->message_type == netatom[NetWMState]) {
|
||||||
if (cme->data.l[1] == netatom[NetWMFullscreen]
|
if ((unsigned long)cme->data.l[1] == netatom[NetWMFullscreen]
|
||||||
|| cme->data.l[2] == netatom[NetWMFullscreen])
|
|| (unsigned long) cme->data.l[2] == netatom[NetWMFullscreen])
|
||||||
setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */
|
setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */
|
||||||
|| (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
|
|| (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
|
||||||
} else if (cme->message_type == netatom[NetActiveWindow]) {
|
} else if (cme->message_type == netatom[NetActiveWindow]) {
|
||||||
|
@ -713,7 +489,7 @@ drawbar(Monitor *m)
|
||||||
|
|
||||||
/* draw status first so it can be overdrawn by tags later */
|
/* draw status first so it can be overdrawn by tags later */
|
||||||
//if (m == selmon || 1) { /* status is only drawn on selected monitor */
|
//if (m == selmon || 1) { /* status is only drawn on selected monitor */
|
||||||
if (m->num == 0) {
|
if (m->num == 1) {
|
||||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
|
tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
|
||||||
drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
|
drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
|
||||||
|
@ -1173,16 +949,16 @@ movemouse(const Arg *arg)
|
||||||
|
|
||||||
nx = ocx + (ev.xmotion.x - x);
|
nx = ocx + (ev.xmotion.x - x);
|
||||||
ny = ocy + (ev.xmotion.y - y);
|
ny = ocy + (ev.xmotion.y - y);
|
||||||
if (abs(selmon->wx - nx) < snap)
|
if ((unsigned int)abs(selmon->wx - nx) < snap)
|
||||||
nx = selmon->wx;
|
nx = selmon->wx;
|
||||||
else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
|
else if ((unsigned int)abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
|
||||||
nx = selmon->wx + selmon->ww - WIDTH(c);
|
nx = selmon->wx + selmon->ww - WIDTH(c);
|
||||||
if (abs(selmon->wy - ny) < snap)
|
if ((unsigned int)abs(selmon->wy - ny) < snap)
|
||||||
ny = selmon->wy;
|
ny = selmon->wy;
|
||||||
else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
|
else if ((unsigned int)abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
|
||||||
ny = selmon->wy + selmon->wh - HEIGHT(c);
|
ny = selmon->wy + selmon->wh - HEIGHT(c);
|
||||||
if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
|
if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
|
||||||
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
|
&& ((unsigned int)abs(nx - c->x) > snap || (unsigned int)abs(ny - c->y) > snap))
|
||||||
togglefloating(NULL);
|
togglefloating(NULL);
|
||||||
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
|
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
|
||||||
resize(c, nx, ny, c->w, c->h, 1);
|
resize(c, nx, ny, c->w, c->h, 1);
|
||||||
|
@ -1331,7 +1107,7 @@ resizemouse(const Arg *arg)
|
||||||
&& c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
|
&& c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
|
||||||
{
|
{
|
||||||
if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
|
if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
|
||||||
&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
|
&& ((unsigned int)abs(nw - c->w) > snap || (unsigned int)abs(nh - c->h) > snap))
|
||||||
togglefloating(NULL);
|
togglefloating(NULL);
|
||||||
}
|
}
|
||||||
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
|
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
|
||||||
|
@ -1534,7 +1310,7 @@ setmfact(const Arg *arg)
|
||||||
void
|
void
|
||||||
setup(void)
|
setup(void)
|
||||||
{
|
{
|
||||||
int i;
|
unsigned long i;
|
||||||
XSetWindowAttributes wa;
|
XSetWindowAttributes wa;
|
||||||
Atom utf8string;
|
Atom utf8string;
|
||||||
|
|
||||||
|
@ -1673,7 +1449,8 @@ tagmon(const Arg *arg)
|
||||||
void
|
void
|
||||||
tile(Monitor *m)
|
tile(Monitor *m)
|
||||||
{
|
{
|
||||||
unsigned int i, n, h, mw, my, ty;
|
unsigned int h, mw, my, ty;
|
||||||
|
int n, i;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
||||||
|
@ -1688,12 +1465,12 @@ tile(Monitor *m)
|
||||||
if (i < m->nmaster) {
|
if (i < m->nmaster) {
|
||||||
h = (m->wh - my) / (MIN(n, m->nmaster) - i);
|
h = (m->wh - my) / (MIN(n, m->nmaster) - i);
|
||||||
resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
|
resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
|
||||||
if (my + HEIGHT(c) < m->wh)
|
if (my + HEIGHT(c) < (unsigned int)m->wh)
|
||||||
my += HEIGHT(c);
|
my += HEIGHT(c);
|
||||||
} else {
|
} else {
|
||||||
h = (m->wh - ty) / (n - i);
|
h = (m->wh - ty) / (n - i);
|
||||||
resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
|
resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
|
||||||
if (ty + HEIGHT(c) < m->wh)
|
if (ty + HEIGHT(c) < (unsigned int)m->wh)
|
||||||
ty += HEIGHT(c);
|
ty += HEIGHT(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1942,7 +1719,8 @@ updategeom(void)
|
||||||
void
|
void
|
||||||
updatenumlockmask(void)
|
updatenumlockmask(void)
|
||||||
{
|
{
|
||||||
unsigned int i, j;
|
unsigned int i;
|
||||||
|
int j;
|
||||||
XModifierKeymap *modmap;
|
XModifierKeymap *modmap;
|
||||||
|
|
||||||
numlockmask = 0;
|
numlockmask = 0;
|
||||||
|
|
|
@ -0,0 +1,238 @@
|
||||||
|
#ifndef DWM_H
|
||||||
|
#define DWM_H
|
||||||
|
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
#include "drw.h"
|
||||||
|
|
||||||
|
// These were originally in dwm.c, but my linter hated this (for good reason)
|
||||||
|
// Including them here instead
|
||||||
|
|
||||||
|
/* macros */
|
||||||
|
#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
|
||||||
|
#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
|
||||||
|
#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \
|
||||||
|
* MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy)))
|
||||||
|
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
|
||||||
|
#define LENGTH(X) (sizeof X / sizeof X[0])
|
||||||
|
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
||||||
|
#define WIDTH(X) ((X)->w + 2 * (X)->bw)
|
||||||
|
#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
|
||||||
|
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
||||||
|
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
||||||
|
|
||||||
|
/* enums */
|
||||||
|
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
|
||||||
|
enum { SchemeNorm, SchemeSel }; /* color schemes */
|
||||||
|
enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
|
||||||
|
NetWMFullscreen, NetActiveWindow, NetWMWindowType,
|
||||||
|
NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
|
||||||
|
enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
|
||||||
|
enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
|
||||||
|
ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
int i;
|
||||||
|
unsigned int ui;
|
||||||
|
float f;
|
||||||
|
const void *v;
|
||||||
|
} Arg;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned int click;
|
||||||
|
unsigned int mask;
|
||||||
|
unsigned int button;
|
||||||
|
void (*func)(const Arg *arg);
|
||||||
|
const Arg arg;
|
||||||
|
} Button;
|
||||||
|
|
||||||
|
typedef struct Monitor Monitor;
|
||||||
|
typedef struct Client Client;
|
||||||
|
struct Client {
|
||||||
|
char name[256];
|
||||||
|
float mina, maxa;
|
||||||
|
int x, y, w, h;
|
||||||
|
int oldx, oldy, oldw, oldh;
|
||||||
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid;
|
||||||
|
int bw, oldbw;
|
||||||
|
unsigned int tags;
|
||||||
|
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
||||||
|
Client *next;
|
||||||
|
Client *snext;
|
||||||
|
Monitor *mon;
|
||||||
|
Window win;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned int mod;
|
||||||
|
KeySym keysym;
|
||||||
|
void (*func)(const Arg *);
|
||||||
|
const Arg arg;
|
||||||
|
} Key;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char *symbol;
|
||||||
|
void (*arrange)(Monitor *);
|
||||||
|
} Layout;
|
||||||
|
|
||||||
|
struct Monitor {
|
||||||
|
char ltsymbol[16];
|
||||||
|
float mfact;
|
||||||
|
int nmaster;
|
||||||
|
int num;
|
||||||
|
int by; /* bar geometry */
|
||||||
|
int mx, my, mw, mh; /* screen size */
|
||||||
|
int wx, wy, ww, wh; /* window area */
|
||||||
|
unsigned int seltags;
|
||||||
|
unsigned int sellt;
|
||||||
|
unsigned int tagset[2];
|
||||||
|
int showbar;
|
||||||
|
int topbar;
|
||||||
|
Client *clients;
|
||||||
|
Client *sel;
|
||||||
|
Client *stack;
|
||||||
|
Monitor *next;
|
||||||
|
Window barwin;
|
||||||
|
const Layout *lt[2];
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char *class;
|
||||||
|
const char *instance;
|
||||||
|
const char *title;
|
||||||
|
unsigned int tags;
|
||||||
|
int isfloating;
|
||||||
|
int monitor;
|
||||||
|
} Rule;
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
void applyrules(Client *c);
|
||||||
|
int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
|
||||||
|
void arrange(Monitor *m);
|
||||||
|
void arrangemon(Monitor *m);
|
||||||
|
void attach(Client *c);
|
||||||
|
void attachstack(Client *c);
|
||||||
|
void buttonpress(XEvent *e);
|
||||||
|
void checkotherwm(void);
|
||||||
|
void cleanup(void);
|
||||||
|
void cleanupmon(Monitor *mon);
|
||||||
|
void clientmessage(XEvent *e);
|
||||||
|
void configure(Client *c);
|
||||||
|
void configurenotify(XEvent *e);
|
||||||
|
void configurerequest(XEvent *e);
|
||||||
|
Monitor *createmon(void);
|
||||||
|
void destroynotify(XEvent *e);
|
||||||
|
void detach(Client *c);
|
||||||
|
void detachstack(Client *c);
|
||||||
|
Monitor *dirtomon(int dir);
|
||||||
|
void drawbar(Monitor *m);
|
||||||
|
void drawbars(void);
|
||||||
|
void enternotify(XEvent *e);
|
||||||
|
void expose(XEvent *e);
|
||||||
|
void focus(Client *c);
|
||||||
|
void focusin(XEvent *e);
|
||||||
|
void focusmon(const Arg *arg);
|
||||||
|
void focusstack(const Arg *arg);
|
||||||
|
Atom getatomprop(Client *c, Atom prop);
|
||||||
|
int getrootptr(int *x, int *y);
|
||||||
|
long getstate(Window w);
|
||||||
|
int gettextprop(Window w, Atom atom, char *text, unsigned int size);
|
||||||
|
void grabbuttons(Client *c, int focused);
|
||||||
|
void grabkeys(void);
|
||||||
|
void incnmaster(const Arg *arg);
|
||||||
|
void keypress(XEvent *e);
|
||||||
|
void killclient(const Arg *arg);
|
||||||
|
void manage(Window w, XWindowAttributes *wa);
|
||||||
|
void mappingnotify(XEvent *e);
|
||||||
|
void maprequest(XEvent *e);
|
||||||
|
void monocle(Monitor *m);
|
||||||
|
void motionnotify(XEvent *e);
|
||||||
|
void movemouse(const Arg *arg);
|
||||||
|
Client *nexttiled(Client *c);
|
||||||
|
void pop(Client *c);
|
||||||
|
void propertynotify(XEvent *e);
|
||||||
|
void quit(const Arg *arg);
|
||||||
|
Monitor *recttomon(int x, int y, int w, int h);
|
||||||
|
void resize(Client *c, int x, int y, int w, int h, int interact);
|
||||||
|
void resizeclient(Client *c, int x, int y, int w, int h);
|
||||||
|
void resizemouse(const Arg *arg);
|
||||||
|
void restack(Monitor *m);
|
||||||
|
void run(void);
|
||||||
|
void scan(void);
|
||||||
|
int sendevent(Client *c, Atom proto);
|
||||||
|
void sendmon(Client *c, Monitor *m);
|
||||||
|
void setclientstate(Client *c, long state);
|
||||||
|
void setfocus(Client *c);
|
||||||
|
void setfullscreen(Client *c, int fullscreen);
|
||||||
|
void setlayout(const Arg *arg);
|
||||||
|
void setmfact(const Arg *arg);
|
||||||
|
void setup(void);
|
||||||
|
void seturgent(Client *c, int urg);
|
||||||
|
void showhide(Client *c);
|
||||||
|
void sigchld(int unused);
|
||||||
|
void spawn(const Arg *arg);
|
||||||
|
void tag(const Arg *arg);
|
||||||
|
void tagmon(const Arg *arg);
|
||||||
|
void tile(Monitor *m);
|
||||||
|
void togglebar(const Arg *arg);
|
||||||
|
void togglefloating(const Arg *arg);
|
||||||
|
void togglefullscreen(const Arg *arg);
|
||||||
|
void toggletag(const Arg *arg);
|
||||||
|
void toggleview(const Arg *arg);
|
||||||
|
void unfocus(Client *c, int setfocus);
|
||||||
|
void unmanage(Client *c, int destroyed);
|
||||||
|
void unmapnotify(XEvent *e);
|
||||||
|
void updatebarpos(Monitor *m);
|
||||||
|
void updatebars(void);
|
||||||
|
void updateclientlist(void);
|
||||||
|
int updategeom(void);
|
||||||
|
void updatenumlockmask(void);
|
||||||
|
void updatesizehints(Client *c);
|
||||||
|
void updatestatus(void);
|
||||||
|
void updatetitle(Client *c);
|
||||||
|
void updatewindowtype(Client *c);
|
||||||
|
void updatewmhints(Client *c);
|
||||||
|
void view(const Arg *arg);
|
||||||
|
Client *wintoclient(Window w);
|
||||||
|
Monitor *wintomon(Window w);
|
||||||
|
int xerror(Display *dpy, XErrorEvent *ee);
|
||||||
|
int xerrordummy(Display *dpy, XErrorEvent *ee);
|
||||||
|
int xerrorstart(Display *dpy, XErrorEvent *ee);
|
||||||
|
void zoom(const Arg *arg);
|
||||||
|
|
||||||
|
/* variables */
|
||||||
|
const char broken[] = "broken";
|
||||||
|
char stext[256];
|
||||||
|
int screen;
|
||||||
|
int sw, sh; /* X display screen geometry width, height */
|
||||||
|
int bh; /* bar height */
|
||||||
|
int lrpad; /* sum of left and right padding for text */
|
||||||
|
int (*xerrorxlib)(Display *, XErrorEvent *);
|
||||||
|
unsigned int numlockmask = 0;
|
||||||
|
void (*handler[LASTEvent]) (XEvent *) = {
|
||||||
|
[ButtonPress] = buttonpress,
|
||||||
|
[ClientMessage] = clientmessage,
|
||||||
|
[ConfigureRequest] = configurerequest,
|
||||||
|
[ConfigureNotify] = configurenotify,
|
||||||
|
[DestroyNotify] = destroynotify,
|
||||||
|
[EnterNotify] = enternotify,
|
||||||
|
[Expose] = expose,
|
||||||
|
[FocusIn] = focusin,
|
||||||
|
[KeyPress] = keypress,
|
||||||
|
[MappingNotify] = mappingnotify,
|
||||||
|
[MapRequest] = maprequest,
|
||||||
|
[MotionNotify] = motionnotify,
|
||||||
|
[PropertyNotify] = propertynotify,
|
||||||
|
[UnmapNotify] = unmapnotify
|
||||||
|
};
|
||||||
|
Atom wmatom[WMLast], netatom[NetLast];
|
||||||
|
int running = 1;
|
||||||
|
Cur *cursor[CurLast];
|
||||||
|
Clr **scheme;
|
||||||
|
Display *dpy;
|
||||||
|
Drw *drw;
|
||||||
|
Monitor *mons, *selmon;
|
||||||
|
Window root, wmcheckwin;
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue