Introduction
Introduction Statistics Contact Development Disclaimer Help
updating formatting and bindings. - tmuxwm - A window manager utilising only tm…
Log
Files
Refs
README
LICENSE
---
commit 0c9292114ad047eb9cd8596e19bf25b3ca11f25f
parent 54885b726e65161bdd389e6a6bcf67d4fa66d692
Author: Jay Scott <[email protected]>
Date: Sun, 8 Dec 2019 19:38:16 +0000
updating formatting and bindings.
Diffstat:
M Makefile | 4 ++--
M tmuxwm.c | 169 ++++++++++++++++++-----------…
2 files changed, 100 insertions(+), 73 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -1,4 +1,4 @@
-CC = gcc
+CC = gcc
CFLAGS = -lX11
OBJ = tmuxwm.c
NAME = tmuxwm
@@ -11,5 +11,5 @@ tmuxwm: ${OBJ}
clean:
rm -f ${NAME}
-install:
+install:
cp ${NAME} /usr/bin/
diff --git a/tmuxwm.c b/tmuxwm.c
@@ -15,36 +15,33 @@
#include <X11/Xutil.h>
#include <X11/XF86keysym.h>
-typedef struct Bind { KeySym sym; int mod; const char * const *args; } Bind;
-typedef const char * const Arg[];
-
-/* The next ~30 lines could be separated into a "config.h", but this is BMFM
- * code: By Me For Me. So I don't care to separate it for your convenience.
- */
-
-Arg tmux_client = (Arg) { "st", "-e", "tmux", "new-session", NULL };
-
-static Bind bind[] = {
- { XK_Return, Mod4Mask, (Arg) { "tmux", "rename-window", NULL …
- { XK_Tab, Mod4Mask, (Arg) { "tmux", "last-pane", NULL } },
- { XK_space, Mod4Mask, (Arg) { "tmux", "new-window", NULL } },
- { XK_1, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_2, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_3, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_4, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_5, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_6, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_7, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_8, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_9, Mod4Mask, (Arg) { "tmux", "select-window", "-t",…
- { XK_h, Mod4Mask, (Arg) { "tmux", "split-window", "-h", …
- { XK_v, Mod4Mask, (Arg) { "tmux", "split-window", "-v", …
- { XK_w, Mod4Mask, (Arg) { "firefox", NULL} },
- { XK_Menu, 0, (Arg) { "interrobang", NULL } },
+typedef struct Bind { KeySym sym; int mod; const char *const *args; } Bind;
+typedef const char *const Arg[];
+
+Arg tmux_client = (Arg) {"st", "-e", "tmux", "new-session", NULL };
+
+static Bind bind[] =
+{
+ { XK_Return, Mod4Mask, (Arg) {"tmux", "rename-…
+ { XK_Tab, Mod4Mask, (Arg) {"tmux", "last-pa…
+ { XK_space, Mod4Mask, (Arg) {"tmux", "new-win…
+ { XK_1, Mod4Mask, (Arg) {"tmux", "…
+ { XK_2, Mod4Mask, (Arg) {"tmux", "…
+ { XK_3, Mod4Mask, (Arg) {"tmux", "…
+ { XK_4, Mod4Mask, (Arg) {"tmux", "…
+ { XK_5, Mod4Mask, (Arg) {"tmux", "…
+ { XK_6, Mod4Mask, (Arg) {"tmux", "…
+ { XK_7, Mod4Mask, (Arg) {"tmux", "…
+ { XK_8, Mod4Mask, (Arg) {"tmux", "…
+ { XK_9, Mod4Mask, (Arg) {"tmux", "…
+ { XK_h, Mod4Mask, (Arg) {"tmux", "…
+ { XK_v, Mod4Mask, (Arg) {"tmux", "…
+ { XK_f, Mod4Mask, (Arg) {"firefox", NULL }…
+ { XK_p, Mod4Mask, (Arg) {"rofi", "…
+ { XK_z, Mod4Mask, (Arg) {"/home/jay/.bin/battery", …
+ { XK_x, Mod4Mask, (Arg) {"/home/jay/.bin/all-time", NULL }…
};
-/* End of potential "config.h" content
- */
static void buttonpress(XEvent *);
static void configurerequest(XEvent *);
@@ -56,122 +53,152 @@ static void unmapnotify(XEvent *);
static Display *dpy;
static Window root;
static int sw, sh;
-static void (*handler[LASTEvent])(XEvent *) = {
- [ButtonPress] = buttonpress,
- [ConfigureRequest] = configurerequest,
- [EnterNotify] = enternotify,
- [KeyPress] = keypress,
- [MapRequest] = maprequest,
+static void (*handler[LASTEvent])(XEvent *) =
+{
+ [ButtonPress] = buttonpress,
+ [ConfigureRequest] = configurerequest,
+ [EnterNotify] = enternotify,
+ [KeyPress] = keypress,
+ [MapRequest] = maprequest,
};
-static int xerror(Display *d, XErrorEvent *e) {
+static int xerror(Display *d, XErrorEvent *e)
+{
char msg[256];
+
XGetErrorText(d, e->error_code, msg, sizeof(msg));
- fprintf(stderr,"[X11 %d:%d] %s\n", e->request_code, e->error_code, msg…
+ fprintf(stderr, "[X11 %d:%d] %s\n", e->request_code, e->error_code, ms…
}
-static inline int spawn(Arg args) {
- if (fork() != 0) return 1;
+static inline int spawn(Arg args)
+{
+ if (fork() != 0)
+ return 1;
close(ConnectionNumber(dpy));
setsid();
execvp(args[0], args);
}
-int main(int argc, const char **argv) {
+int main(int argc, const char **argv)
+{
signal(SIGCHLD, SIG_IGN);
- if(!(dpy = XOpenDisplay(0x0))) return 1;
+ if (!(dpy = XOpenDisplay(0x0)))
+ return 1;
XSetErrorHandler(xerror);
root = DefaultRootWindow(dpy);
sw = DisplayWidth(dpy, DefaultScreen(dpy));
sh = DisplayHeight(dpy, DefaultScreen(dpy));
XGrabKey(dpy, XKeysymToKeycode(dpy, XK_Tab), Mod1Mask, root, True, Gra…
- XGrabKey(dpy, XKeysymToKeycode(dpy, XK_Return), Mod4Mask|ShiftMask, ro…
+ XGrabKey(dpy, XKeysymToKeycode(dpy, XK_Return), Mod4Mask | ShiftMask, …
int i;
- for (i = 0; i < sizeof(bind)/sizeof(bind[0]); ++i)
+ for (i = 0; i < sizeof(bind) / sizeof(bind[0]); ++i)
XGrabKey(dpy, XKeysymToKeycode(dpy, bind[i].sym), bind[i].mod,…
XGrabButton(dpy, AnyButton, Mod4Mask, root, True, ButtonPressMask, Gra…
XSelectInput(dpy, root, SubstructureNotifyMask | SubstructureRedirectM…
XEvent ev;
spawn(tmux_client);
- while (!XNextEvent(dpy,&ev))
- if (handler[ev.type]) handler[ev.type](&ev);
+ while (!XNextEvent(dpy, &ev))
+ if (handler[ev.type])
+ handler[ev.type](&ev);
return 0;
}
-void buttonpress(XEvent *ev) {
+void buttonpress(XEvent *ev)
+{
XButtonEvent *e = &ev->xbutton;
+
XRaiseWindow(dpy, e->subwindow);
if (e->button == 2)
XMoveResizeWindow(dpy, e->subwindow, 0, 0, sw, sh);
- if (e->button != 1 && e->button !=3)
+ if (e->button != 1 && e->button != 3)
return;
XGrabPointer(dpy, root, True, PointerMotionMask | ButtonReleaseMask,
- GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
+ GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
XWindowAttributes attr;
XGetWindowAttributes(dpy, e->subwindow, &attr);
int xx = e->x_root, yy = e->y_root, px, py;
XEvent ee;
while (!XMaskEvent(dpy, PointerMotionMask | ButtonReleaseMask, &ee)) {
- if (ee.type == ButtonRelease) break;
+ if (ee.type == ButtonRelease)
+ break;
px = xx; py = yy; xx = ee.xbutton.x_root; yy = ee.xbutton.y_ro…
- if (e->button == 1) { attr.x += xx - px; attr.y += yy - py; }
- else if (e->button == 3) {
+ if (e->button == 1) {
+ attr.x += xx - px; attr.y += yy - py;
+ } else if (e->button == 3) {
attr.width += xx - px; attr.height += yy - py;
- if (attr.width < 12) attr.width = 12;
- else if (attr.height < 12) attr.height = 12;
+ if (attr.width < 12)
+ attr.width = 12;
+ else if (attr.height < 12)
+ attr.height = 12;
}
XMoveResizeWindow(dpy, e->subwindow, attr.x, attr.y, attr.widt…
}
XUngrabPointer(dpy, CurrentTime);
}
-void configurerequest(XEvent *ev) {
+void configurerequest(XEvent *ev)
+{
XConfigureRequestEvent *e = &ev->xconfigurerequest;
XWindowChanges wc;
+
wc.x = e->x; wc.y = e->y; wc.width = e->width; wc.height = e->height;
wc.sibling = Above; wc.stack_mode = e->detail; wc.border_width = e->bo…
XConfigureWindow(dpy, e->window, e->value_mask, &wc);
}
-void enternotify(XEvent *ev) {
+void enternotify(XEvent *ev)
+{
XSetInputFocus(dpy, ev->xcrossing.window, RevertToPointerRoot, Current…
}
-void keypress(XEvent *ev) {
+void keypress(XEvent *ev)
+{
XKeyEvent *e = &ev->xkey;
KeySym sym = XkbKeycodeToKeysym(dpy, e->keycode, 0, 0);
int i;
- if (e->state == Mod1Mask && sym == XK_Tab)
+
+ if (e->state == Mod1Mask && sym == XK_Tab) {
XCirculateSubwindowsUp(dpy, root);
- else if (e->state == (Mod4Mask|ShiftMask) && sym == XK_Return)
+ } else if (e->state == (Mod4Mask | ShiftMask) && sym == XK_Return) {
spawn(tmux_client);
- else for (i = 0; i < sizeof(bind)/sizeof(bind[0]); ++i)
- if (bind[i].sym == sym && bind[i].mod == e->state && bind[i].a…
+ } else {
+ for (i = 0; i < sizeof(bind) / sizeof(bind[0]); ++i)
+ if (bind[i].sym == sym && bind[i].mod == e->state && b…
spawn(bind[i].args);
+ }
}
-#define MapFocus 0x01
-#define MapFull 0x02
-void maprequest(XEvent *ev) {
+#define MapFocus 0x01
+#define MapFull 0x02
+
+void maprequest(XEvent *ev)
+{
XMapRequestEvent *e = &ev->xmaprequest;
XWindowAttributes wa;
+
if (!XGetWindowAttributes(dpy, e->window, &wa) || wa.override_redirect)
return;
int flags = MapFocus | MapFull;
XWMHints *wmHint;
- if ( (wmHint=XGetWMHints(dpy,e->window)) ) {
- if (wmHint->flags & InputHint && !wmHint->input) flags &= ~Map…
+ if ((wmHint = XGetWMHints(dpy, e->window))) {
+ if (wmHint->flags & InputHint && !wmHint->input)
+ flags &= ~MapFocus;
XFree(wmHint);
}
XClassHint csHint;
XGetClassHint(dpy, e->window, &csHint);
- if (strncmp(csHint.res_name,"Float",5) == 0) flags &= ~MapFull;
- if (strncmp(csHint.res_class,"Float",5) == 0) flags &= ~MapFull;
+ if (strncmp(csHint.res_name, "Float", 5) == 0)
+ flags &= ~MapFull;
+ if (strncmp(csHint.res_class, "Float", 5) == 0)
+ flags &= ~MapFull;
Window parent;
- if (XGetTransientForHint(dpy, e->window, &parent)) flags &= ~MapFull;
- if (flags & MapFocus) XSelectInput(dpy, e->window, EnterWindowMask);
- if (flags & MapFull) XMoveResizeWindow(dpy, e->window, 0, 0, sw, sh);
- else XMoveResizeWindow(dpy, e->window, wa.x, wa.y, wa.width, wa.height…
+ if (XGetTransientForHint(dpy, e->window, &parent))
+ flags &= ~MapFull;
+ if (flags & MapFocus)
+ XSelectInput(dpy, e->window, EnterWindowMask);
+ if (flags & MapFull)
+ XMoveResizeWindow(dpy, e->window, 0, 0, sw, sh);
+ else
+ XMoveResizeWindow(dpy, e->window, wa.x, wa.y, wa.width, wa.hei…
XMapWindow(dpy, e->window);
}
-
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.