diff --git a/config.h b/config.h index 21a54b3..e4ded07 100644 --- a/config.h +++ b/config.h @@ -48,14 +48,16 @@ binding keys[] = { // Focus the top-most window in a spot. - { .mod = Mod4Mask, .key = XK_1, .act = ACTION_FOCUS, .num = SPOT1 }, - { .mod = Mod4Mask, .key = XK_2, .act = ACTION_FOCUS, .num = SPOT2 }, - { .mod = Mod4Mask, .key = XK_3, .act = ACTION_FOCUS, .num = SPOT3 }, + { .mod = Mod4Mask, .key = XK_Left, .act = ACTION_FOCUS, .num = SPOT1 }, + { .mod = Mod4Mask, .key = XK_Up, .act = ACTION_FOCUS, .num = SPOT2 }, + { .mod = Mod4Mask, .key = XK_Right, .act = ACTION_FOCUS, .num = SPOT2 }, + { .mod = Mod4Mask, .key = XK_Down, .act = ACTION_FOCUS, .num = SPOT3 }, // Move the current window to another spot. - { .mod = ShiftMask|Mod4Mask, .key = XK_1, .act = ACTION_MOVE, .num = SPOT1 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_2, .act = ACTION_MOVE, .num = SPOT2 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_3, .act = ACTION_MOVE, .num = SPOT3 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Left, .act = ACTION_MOVE, .num = SPOT1 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Up, .act = ACTION_MOVE, .num = SPOT2 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Right, .act = ACTION_MOVE, .num = SPOT2 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Down, .act = ACTION_MOVE, .num = SPOT3 }, // Flip between the top two windows in the current spot. { .mod = Mod4Mask, .key = XK_Tab, .act = ACTION_OTHER }, @@ -73,28 +75,28 @@ binding keys[] = { { .mod = Mod4Mask, .key = XK_a, .act = ACTION_ABOVE_TOGGLE }, // Switch focus between monitors. - { .mod = Mod4Mask, .key = XK_Right, .act = ACTION_FOCUS_MONITOR, .num = 1 }, - { .mod = Mod4Mask, .key = XK_Left, .act = ACTION_FOCUS_MONITOR, .num = -1 }, + { .mod = Mod4Mask, .key = XK_Next, .act = ACTION_FOCUS_MONITOR, .num = 1 }, + { .mod = Mod4Mask, .key = XK_Prior, .act = ACTION_FOCUS_MONITOR, .num = -1 }, // Move windows between monitors. - { .mod = ShiftMask|Mod4Mask, .key = XK_Right, .act = ACTION_MOVE_MONITOR, .num = 1 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_Left, .act = ACTION_MOVE_MONITOR, .num = -1 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Next, .act = ACTION_MOVE_MONITOR, .num = 1 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Prior, .act = ACTION_MOVE_MONITOR, .num = -1 }, // Launcher { .mod = Mod4Mask, .key = XK_x, .act = ACTION_COMMAND, .data = "dmenu_run" }, // Raise tag groups - { .mod = Mod4Mask, .key = XK_F1, .act = ACTION_RAISE_TAG, .num = TAG1 }, - { .mod = Mod4Mask, .key = XK_F2, .act = ACTION_RAISE_TAG, .num = TAG2 }, - { .mod = Mod4Mask, .key = XK_F3, .act = ACTION_RAISE_TAG, .num = TAG3 }, + { .mod = Mod4Mask, .key = XK_1, .act = ACTION_RAISE_TAG, .num = TAG1 }, + { .mod = Mod4Mask, .key = XK_2, .act = ACTION_RAISE_TAG, .num = TAG2 }, + { .mod = Mod4Mask, .key = XK_3, .act = ACTION_RAISE_TAG, .num = TAG3 }, // Tag/untag the current window - { .mod = ShiftMask|Mod4Mask, .key = XK_F1, .act = ACTION_TAG, .num = TAG1 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_F2, .act = ACTION_TAG, .num = TAG2 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_F3, .act = ACTION_TAG, .num = TAG3 }, - { .mod = ShiftMask|ControlMask|Mod4Mask, .key = XK_F1, .act = ACTION_UNTAG, .num = TAG1 }, - { .mod = ShiftMask|ControlMask|Mod4Mask, .key = XK_F2, .act = ACTION_UNTAG, .num = TAG2 }, - { .mod = ShiftMask|ControlMask|Mod4Mask, .key = XK_F3, .act = ACTION_UNTAG, .num = TAG3 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_1, .act = ACTION_TAG, .num = TAG1 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_2, .act = ACTION_TAG, .num = TAG2 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_3, .act = ACTION_TAG, .num = TAG3 }, + { .mod = ShiftMask|ControlMask|Mod4Mask, .key = XK_1, .act = ACTION_UNTAG, .num = TAG1 }, + { .mod = ShiftMask|ControlMask|Mod4Mask, .key = XK_2, .act = ACTION_UNTAG, .num = TAG2 }, + { .mod = ShiftMask|ControlMask|Mod4Mask, .key = XK_3, .act = ACTION_UNTAG, .num = TAG3 }, // Find or start apps by WM_CLASS (lower case match). { .mod = AnyModifier, .key = XK_F1, .act = ACTION_FIND_OR_START, .data = "urxvt" }, diff --git a/xoat.1 b/xoat.1 index d219ee1..1db3085 100644 --- a/xoat.1 +++ b/xoat.1 @@ -16,32 +16,32 @@ See config.h for customization. .PP These are the default key bindings: .TP -.B Mod4-1 +.B Mod4-Left Focus tile 1. .RS .RE .TP -.B Mod4-2 +.B Mod4-Right (and Up) Focus tile 2. .RS .RE .TP -.B Mod4-3 +.B Mod4-Down Focus tile 3. .RS .RE .TP -.B Shift-Mod4-1 +.B Shift-Mod4-Left Move window to tile 1. .RS .RE .TP -.B Shift-Mod4-2 +.B Shift-Mod4-Right (and Up) Move window to tile 2. .RS .RE .TP -.B Shift-Mod4-3 +.B Shift-Mod4-Down Move window to tile 3. .RS .RE @@ -72,22 +72,22 @@ Toggle state above (only placed above fullscreen windows). .RS .RE .TP -.B Mod4-Right +.B Mod4-Next (Page Down) Focus next monitor. .RS .RE .TP -.B Mod4-Left +.B Mod4-Prior (Page Up) Focus previous monitor. .RS .RE .TP -.B Shift-Mod4-Right +.B Shift-Mod4-Next Move window to next monitor. .RS .RE .TP -.B Shift-Mod4-Left +.B Shift-Mod4-Prior Move window to previous monitor. .RS .RE @@ -102,47 +102,47 @@ Launch urxvt .RS .RE .TP -.B Mod4-F1 +.B Mod4-1 Raise windows in tag 1. .RS .RE .TP -.B Shift-Mod4-F1 +.B Shift-Mod4-1 Place current window in tag 1. .RS .RE .TP -.B Shift-Control-Mod4-F1 +.B Shift-Control-Mod4-1 Remove current window from tag 1. .RS .RE .TP -.B Mod4-F2 +.B Mod4-2 Raise windows in tag 2. .RS .RE .TP -.B Shift-Mod4-F2 +.B Shift-Mod4-2 Place current window in tag 2. .RS .RE .TP -.B Shift-Control-Mod4-F2 +.B Shift-Control-Mod4-2 Remove current window from tag 2. .RS .RE .TP -.B Mod4-F3 +.B Mod4-3 Raise windows in tag 3. .RS .RE .TP -.B Shift-Mod4-F3 +.B Shift-Mod4-3 Place current window in tag 3. .RS .RE .TP -.B Shift-Control-Mod4-F3 +.B Shift-Control-Mod4-3 Remove current window from tag 3. .RS .RE diff --git a/xoat.c b/xoat.c index a9b0e8c..80038c3 100644 --- a/xoat.c +++ b/xoat.c @@ -992,15 +992,15 @@ int main(int argc, char *argv[]) client *c = wins.clients[i]; if (!c) continue; - unsigned long strut[12]; memset(strut, 0, sizeof(strut)); - if (window_get_cardinal_prop(c->window, atoms[_NET_WM_STRUT_PARTIAL], strut, 12) - || window_get_cardinal_prop(c->window, atoms[_NET_WM_STRUT], strut, 4)) + wm_strut strut; memset(&strut, 0, sizeof(wm_strut)); + if (window_get_cardinal_prop(c->window, atoms[_NET_WM_STRUT_PARTIAL], (unsigned long*)&strut, 12) + || window_get_cardinal_prop(c->window, atoms[_NET_WM_STRUT], (unsigned long*)&strut, 4)) { - struts[LEFT] = MAX(struts[LEFT], strut[LEFT]); - struts[RIGHT] = MAX(struts[RIGHT], strut[RIGHT]); - struts[TOP] = MAX(struts[TOP], strut[TOP]); - struts[BOTTOM] = MAX(struts[BOTTOM], strut[BOTTOM]); - warnx("struts %ld %ld %ld %ld 0x%08lx %s", strut[LEFT], strut[LEFT], strut[LEFT], strut[LEFT], (long)c->window, c->class); + struts.left = MAX(struts.left, strut.left); + struts.right = MAX(struts.right, strut.right); + struts.top = MAX(struts.top, strut.top); + struts.bottom = MAX(struts.bottom, strut.bottom); + warnx("struts %ld %ld %ld %ld 0x%08lx %s", strut.left, strut.left, strut.left, strut.left, (long)c->window, c->class); } client_free(c); } @@ -1014,9 +1014,9 @@ int main(int argc, char *argv[]) for (i = 0; i < nmonitors; i++) { monitors[i].x = info[i].x_org; - monitors[i].y = info[i].y_org + struts[TOP]; + monitors[i].y = info[i].y_org + struts.top; monitors[i].w = info[i].width; - monitors[i].h = info[i].height - struts[TOP] - struts[BOTTOM]; + monitors[i].h = info[i].height - struts.top - struts.bottom; warnx("monitor %d %dx%d+%d+%d", i, monitors[i].w, monitors[i].h, monitors[i].x, monitors[i].y); } XFree(info); @@ -1024,11 +1024,11 @@ int main(int argc, char *argv[]) } // left struts affect first monitor - monitors[0].x += struts[LEFT]; - monitors[0].w -= struts[LEFT]; + monitors[0].x += struts.left; + monitors[0].w -= struts.left; // right struts affect last monitor - monitors[nmonitors-1].w -= struts[RIGHT]; + monitors[nmonitors-1].w -= struts.right; // dump atoms for debug for (i = 0; i < ATOMS; i++) warnx("atom 0x%lx %s", (long)atoms[i], atom_names[i]); diff --git a/xoat.h b/xoat.h index feb11b5..27a0401 100644 --- a/xoat.h +++ b/xoat.h @@ -94,8 +94,13 @@ stack inplay; static int (*xerror)(Display *, XErrorEvent *); -enum { LEFT, RIGHT, TOP, BOTTOM }; -int struts[4] = { 0, 0, 0, 0 }; +typedef struct { + long left, right, top, bottom, + left_start_y, left_end_y, right_start_y, right_end_y, + top_start_x, top_end_x, bottom_start_x, bottom_end_x; +} wm_strut; + +wm_strut struts; #define ATOM_ENUM(x) x #define ATOM_CHAR(x) #x diff --git a/xoat.md b/xoat.md index cce0510..4e74c51 100644 --- a/xoat.md +++ b/xoat.md @@ -20,22 +20,22 @@ See config.h for customization. These are the default key bindings: -Mod4-1 +Mod4-Left : Focus tile 1. -Mod4-2 +Mod4-Right (and Up) : Focus tile 2. -Mod4-3 +Mod4-Down : Focus tile 3. -Shift-Mod4-1 +Shift-Mod4-Left : Move window to tile 1. -Shift-Mod4-2 +Shift-Mod4-Right (and Up) : Move window to tile 2. -Shift-Mod4-3 +Shift-Mod4-Down : Move window to tile 3. Mod4-Tab @@ -53,16 +53,16 @@ Mod4-f Mod4-a : Toggle state above (only placed above fullscreen windows). -Mod4-Right +Mod4-Next (Page Down) : Focus next monitor. -Mod4-Left +Mod4-Prior (Page Up) : Focus previous monitor. -Shift-Mod4-Right +Shift-Mod4-Next : Move window to next monitor. -Shift-Mod4-Left +Shift-Mod4-Prior : Move window to previous monitor. Shift-Mod4-x @@ -71,31 +71,31 @@ Shift-Mod4-x F1 : Launch urxvt -Mod4-F1 +Mod4-1 : Raise windows in tag 1. -Shift-Mod4-F1 +Shift-Mod4-1 : Place current window in tag 1. -Shift-Control-Mod4-F1 +Shift-Control-Mod4-1 : Remove current window from tag 1. -Mod4-F2 +Mod4-2 : Raise windows in tag 2. -Shift-Mod4-F2 +Shift-Mod4-2 : Place current window in tag 2. -Shift-Control-Mod4-F2 +Shift-Control-Mod4-2 : Remove current window from tag 2. -Mod4-F3 +Mod4-3 : Raise windows in tag 3. -Shift-Mod4-F3 +Shift-Mod4-3 : Place current window in tag 3. -Shift-Control-Mod4-F3 +Shift-Control-Mod4-3 : Remove current window from tag 3. # OPTIONS