diff options
| -rw-r--r-- | repos/xorg/sowm/.files | 3 | ||||
| -rw-r--r-- | repos/xorg/sowm/abuild | 11 | ||||
| -rw-r--r-- | repos/xorg/sowm/config.h | 47 | ||||
| -rw-r--r-- | repos/xorg/sowm/depends | 2 | ||||
| -rw-r--r-- | repos/xorg/sowm/multihead-support.patch | 118 |
5 files changed, 181 insertions, 0 deletions
diff --git a/repos/xorg/sowm/.files b/repos/xorg/sowm/.files new file mode 100644 index 00000000..cc60ec24 --- /dev/null +++ b/repos/xorg/sowm/.files @@ -0,0 +1,3 @@ +drwxr-xr-x root/root usr/ +drwxr-xr-x root/root usr/bin/ +-rwxr-xr-x root/root usr/bin/sowm diff --git a/repos/xorg/sowm/abuild b/repos/xorg/sowm/abuild new file mode 100644 index 00000000..16ee6c07 --- /dev/null +++ b/repos/xorg/sowm/abuild @@ -0,0 +1,11 @@ +name=sowm +version=1.6 +release=1 +source="https://github.com/dylanaraps/${name}/archive/${version}/${name}-${version}.tar.gz + multihead-support.patch + config.h" + +prebuild() { + cp $SRC/config.h . +} + diff --git a/repos/xorg/sowm/config.h b/repos/xorg/sowm/config.h new file mode 100644 index 00000000..34fdd06c --- /dev/null +++ b/repos/xorg/sowm/config.h @@ -0,0 +1,47 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#define MOD Mod4Mask + +const char* menu[] = {"dmenu_run", 0}; +const char* term[] = {"xterm", 0}; +const char* scrot[] = {"scr", 0}; +const char* briup[] = {"bri", "10", "+", 0}; +const char* bridown[] = {"bri", "10", "-", 0}; +const char* voldown[] = {"amixer", "sset", "Master", "5%-", 0}; +const char* volup[] = {"amixer", "sset", "Master", "5%+", 0}; +const char* volmute[] = {"amixer", "sset", "Master", "toggle", 0}; + +static struct key keys[] = { + {MOD, XK_q, win_kill, {0}}, + {MOD, XK_c, win_center, {0}}, + {MOD, XK_f, win_fs, {0}}, + + {Mod1Mask, XK_Tab, win_next, {0}}, + {Mod1Mask|ShiftMask, XK_Tab, win_prev, {0}}, + + {MOD, XK_d, run, {.com = menu}}, + {MOD, XK_p, run, {.com = scrot}}, + {MOD, XK_Return, run, {.com = term}}, + + {0, XF86XK_AudioLowerVolume, run, {.com = voldown}}, + {0, XF86XK_AudioRaiseVolume, run, {.com = volup}}, + {0, XF86XK_AudioMute, run, {.com = volmute}}, + {0, XF86XK_MonBrightnessUp, run, {.com = briup}}, + {0, XF86XK_MonBrightnessDown, run, {.com = bridown}}, + + {MOD, XK_1, ws_go, {.i = 1}}, + {MOD|ShiftMask, XK_1, win_to_ws, {.i = 1}}, + {MOD, XK_2, ws_go, {.i = 2}}, + {MOD|ShiftMask, XK_2, win_to_ws, {.i = 2}}, + {MOD, XK_3, ws_go, {.i = 3}}, + {MOD|ShiftMask, XK_3, win_to_ws, {.i = 3}}, + {MOD, XK_4, ws_go, {.i = 4}}, + {MOD|ShiftMask, XK_4, win_to_ws, {.i = 4}}, + {MOD, XK_5, ws_go, {.i = 5}}, + {MOD|ShiftMask, XK_5, win_to_ws, {.i = 5}}, + {MOD, XK_6, ws_go, {.i = 6}}, + {MOD|ShiftMask, XK_6, win_to_ws, {.i = 6}}, +}; + +#endif diff --git a/repos/xorg/sowm/depends b/repos/xorg/sowm/depends new file mode 100644 index 00000000..30f5c9f7 --- /dev/null +++ b/repos/xorg/sowm/depends @@ -0,0 +1,2 @@ +libx11 +libxinerama diff --git a/repos/xorg/sowm/multihead-support.patch b/repos/xorg/sowm/multihead-support.patch new file mode 100644 index 00000000..58b1f454 --- /dev/null +++ b/repos/xorg/sowm/multihead-support.patch @@ -0,0 +1,118 @@ +From 053833863349107f2cbef6332c7eff0ef6b70344 Mon Sep 17 00:00:00 2001 +From: Devon Morris <devonmorris1992@gmail.com> +Date: Sat, 11 Apr 2020 15:40:09 -0400 +Subject: [PATCH] added Xinerama fullscreen support + +--- + Makefile | 2 +- + sowm.c | 38 ++++++++++++++++++++++++++++++++++---- + sowm.h | 2 ++ + 3 files changed, 37 insertions(+), 5 deletions(-) + +diff --git a/Makefile b/Makefile +index 3450a85..a7191f5 100644 +--- a/Makefile ++++ b/Makefile +@@ -10,7 +10,7 @@ config.h: + cp config.def.h config.h + + sowm: +- $(CC) -O3 $(CFLAGS) -o sowm sowm.c -lX11 $(LDFLAGS) ++ $(CC) -O3 $(CFLAGS) -o sowm sowm.c -lX11 -lXinerama $(LDFLAGS) + + install: all + install -Dm755 sowm $(DESTDIR)$(BINDIR)/sowm +diff --git a/sowm.c b/sowm.c +index 8b21dc6..88e7de4 100644 +--- a/sowm.c ++++ b/sowm.c +@@ -4,6 +4,7 @@ + #include <X11/XF86keysym.h> + #include <X11/keysym.h> + #include <X11/XKBlib.h> ++#include <X11/extensions/Xinerama.h> + #include <stdlib.h> + #include <signal.h> + #include <unistd.h> +@@ -11,7 +12,7 @@ + #include "sowm.h" + + static client *list = {0}, *ws_list[10] = {0}, *cur; +-static int ws = 1, sw, sh, wx, wy, numlock = 0; ++static int ws = 1, sw, sh, wx, wy, numlock = 0, monitors; + static unsigned int ww, wh; + + static Display *d; +@@ -62,6 +63,8 @@ void notify_motion(XEvent *e) { + wy + (mouse.button == 1 ? yd : 0), + MAX(1, ww + (mouse.button == 3 ? xd : 0)), + MAX(1, wh + (mouse.button == 3 ? yd : 0))); ++ ++ win_size(cur->w, &cur->wx, &cur->wx, &cur->ww, &cur->wh); + } + + void key_press(XEvent *e) { +@@ -126,11 +129,37 @@ void win_kill(const Arg arg) { + if (cur) XKillClient(d, cur->w); + } + ++int multimonitor_action (int action) { // action = 0 -> center; action = 1 -> fs ++ if (!XineramaIsActive(d)) return 1; ++ XineramaScreenInfo *si = XineramaQueryScreens(d, &monitors); ++ for (int i = 0; i < monitors; i++) { ++ if ((cur->wx + (cur->ww/2) >= (unsigned int)si[i].x_org ++ && cur->wx + (cur->ww/2) < (unsigned int)si[i].x_org + si[i].width) ++ && ( cur->wy + (cur->wh/2) >= (unsigned int)si[i].y_org ++ && cur->wy + (cur->wh/2) < (unsigned int)si[i].y_org + si[i].height)) { ++ if (action) ++ XMoveResizeWindow(d, cur->w, ++ si[i].x_org, si[i].y_org, ++ si[i].width, si[i].height); ++ else ++ XMoveWindow(d, cur->w, ++ si[i].x_org + ((si[i].width - ww)/2), ++ si[i].y_org + ((si[i].height -wh)/2)); ++ break; ++ } ++ } ++ return 0; ++} ++ + void win_center(const Arg arg) { + if (!cur) return; + + win_size(cur->w, &(int){0}, &(int){0}, &ww, &wh); +- XMoveWindow(d, cur->w, (sw - ww) / 2, (sh - wh) / 2); ++ if (multimonitor_action(0)) { ++ XMoveWindow(d, cur->w, (sw - ww) / 2, (sh - wh) / 2); ++ } ++ ++ win_size(cur->w, &cur->wx, &cur->wy, &cur->ww, &cur->wh); + } + + void win_fs(const Arg arg) { +@@ -138,8 +167,9 @@ void win_fs(const Arg arg) { + + if ((cur->f = cur->f ? 0 : 1)) { + win_size(cur->w, &cur->wx, &cur->wy, &cur->ww, &cur->wh); +- XMoveResizeWindow(d, cur->w, 0, 0, sw, sh); +- ++ if(multimonitor_action(1)) { ++ XMoveResizeWindow(d, cur->w, 0, 0, sw, sh); ++ } + } else { + XMoveResizeWindow(d, cur->w, cur->wx, cur->wy, cur->ww, cur->wh); + } +diff --git a/sowm.h b/sowm.h +index 455ed93..9823d6d 100644 +--- a/sowm.h ++++ b/sowm.h +@@ -33,6 +33,8 @@ typedef struct client { + Window w; + } client; + ++int multimonitor_action(int action); ++ + void button_press(XEvent *e); + void button_release(XEvent *e); + void configure_request(XEvent *e); |