commit - 3b54925cbf35d15232908b7ff996ef354d5b4fab
commit + 550f8a99501b5c3da55db695f0c1e9cf9886c42e
blob - 0812932392a17514093d9fe4d36951657c2a5705
blob + 0feff2eab7eeed776d0b24f30c480b36896208fd
--- bxwm.c
+++ bxwm.c
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h>
-#include <X11/keysym.h>
#include <X11/Xatom.h>
#include "config.h"
fds[1].fd = server_fd;
fds[1].events = POLLIN;
- // 3. User configuration/setup (key grabs, etc)
+ // 3. User configuration/setup
setup();
- /* Cache keycodes */
- KeyCode kcodes[11];
- KeyCode ws_codes[10];
- int i, w;
-
- for (i = 0; i < 11; i++)
- kcodes[i] = XKeysymToKeycode(dpy, XStringToKeysym(
- i == 0 ? "Return" :
- i == 1 ? "Q" :
- i == 2 ? "C" :
- i == 3 ? "H" :
- i == 4 ? "L" :
- i == 5 ? "S" :
- i == 6 ? "M" :
- i == 7 ? "J" :
- i == 8 ? "K" :
- i == 9 ? "X" : "P"));
-
- for (w = 0; w < 10; w++) {
- KeySym ks = (w == 9) ? XK_0 : (XK_1 + w);
- ws_codes[w] = XKeysymToKeycode(dpy, ks);
- }
-
running = 1;
// 4. Main Loop
if (fds[0].revents & POLLIN) {
while (XPending(dpy)) {
XNextEvent(dpy, &ev);
- if (ev.type == KeyPress) {
- /* Workspace view keys */
- for (w = 0; w < 10; w++) {
- if (ev.xkey.keycode == ws_codes[w] &&
- (ev.xkey.state & Mod4Mask) &&
- !(ev.xkey.state & ShiftMask)) {
- view(w);
- goto processed;
- }
- }
- /* Workspace move keys */
- for (w = 0; w < 10; w++) {
- if (ev.xkey.keycode == ws_codes[w] &&
- (ev.xkey.state & (Mod4Mask | ShiftMask)) ==
- (Mod4Mask | ShiftMask)) {
- movetows(w);
- goto processed;
- }
- }
- /* Action keys */
- for (i = 0; i < 11; i++) {
- if (ev.xkey.keycode == kcodes[i]) {
- switch (i) {
- case 0:
- if ((ev.xkey.state & (ShiftMask | Mod1Mask)) == (ShiftMask | Mod1Mask))
- spawn(TERMINAL);
- break;
- case 1:
- if ((ev.xkey.state & (ControlMask | ShiftMask)) == (ControlMask | ShiftMask))
- cleanup(0);
- break;
- case 2:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- center_window(focused_client);
- break;
- case 3:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- left_half_window(focused_client);
- break;
- case 4:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- right_half_window(focused_client);
- break;
- case 5:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- small_window(focused_client);
- break;
- case 6:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- maximize_window(focused_client);
- break;
- case 7:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- focus_next();
- break;
- case 8:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- focus_prev();
- break;
- case 9:
- if ((ev.xkey.state & (ControlMask | Mod1Mask)) == (ControlMask | Mod1Mask))
- close_window(focused_client);
- break;
- case 10:
- if ((ev.xkey.state & (ShiftMask | Mod1Mask)) == (ShiftMask | Mod1Mask))
- spawn(LAUNCHPROGRAM);
- break;
- }
- goto processed;
- }
- }
- processed:;
- } else if (ev.type == MapRequest) {
+ if (ev.type == MapRequest) {
manage(ev.xmaprequest.window);
} else if (ev.type == DestroyNotify) {
unmanage(ev.xdestroywindow.window);
XSetWindowAttributes wa;
Colormap cmap = DefaultColormap(dpy, DefaultScreen(dpy));
XColor color;
- KeyCode keycodes[] = {
- XKeysymToKeycode(dpy, XStringToKeysym("Return")),
- XKeysymToKeycode(dpy, XStringToKeysym("Q")),
- XKeysymToKeycode(dpy, XStringToKeysym("C")),
- XKeysymToKeycode(dpy, XStringToKeysym("H")),
- XKeysymToKeycode(dpy, XStringToKeysym("L")),
- XKeysymToKeycode(dpy, XStringToKeysym("S")),
- XKeysymToKeycode(dpy, XStringToKeysym("M")),
- XKeysymToKeycode(dpy, XStringToKeysym("J")),
- XKeysymToKeycode(dpy, XStringToKeysym("K")),
- XKeysymToKeycode(dpy, XStringToKeysym("X")),
- XKeysymToKeycode(dpy, XStringToKeysym("P"))
- };
- KeyCode ws_codes[10];
- int w;
-
- for (w = 0; w < 10; w++) {
- KeySym ks = (w == 9) ? XK_0 : (XK_1 + w);
- ws_codes[w] = XKeysymToKeycode(dpy, ks);
- }
-
screen = DefaultScreen(dpy);
screen_w = DisplayWidth(dpy, screen);
screen_h = DisplayHeight(dpy, screen);
XDefineCursor(dpy, root, cursor);
XFreeCursor(dpy, cursor);
- /* Key grabs */
- XGrabKey(dpy, keycodes[0], ShiftMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Shift+Alt+Enter: terminal */
- XGrabKey(dpy, keycodes[1], ControlMask | ShiftMask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Shift+Q: quit */
- XGrabKey(dpy, keycodes[2], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+C: center */
- XGrabKey(dpy, keycodes[3], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+H: left */
- XGrabKey(dpy, keycodes[4], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+L: right */
- XGrabKey(dpy, keycodes[5], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+S: small */
- XGrabKey(dpy, keycodes[6], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+M: maximize */
- XGrabKey(dpy, keycodes[7], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+J: next */
- XGrabKey(dpy, keycodes[8], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+K: prev */
- XGrabKey(dpy, keycodes[9], ControlMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Ctrl+Alt+X: close */
- XGrabKey(dpy, keycodes[10], ShiftMask | Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); /* Shift+Alt+P: launchprograms script */
-
- for (w = 0; w < 10; w++) {
- XGrabKey(dpy, ws_codes[w], Mod4Mask, root, True,
- GrabModeAsync, GrabModeAsync); /* Super+N: view */
- XGrabKey(dpy, ws_codes[w], Mod4Mask | ShiftMask,
- root, True, GrabModeAsync, GrabModeAsync); /* Super+Shift+N: move */
- }
-
/* Intern EWMH/ICCCM atoms */
net_supported = XInternAtom(dpy, "_NET_SUPPORTED", False);
net_number_of_desktops = XInternAtom(dpy, "_NET_NUMBER_OF_DESKTOPS", False);