----
- dwm.c | 119 ++++++++++++++++++++++++++++++++++++++++------------------
- 1 file changed, 82 insertions(+), 37 deletions(-)
-
-diff --git a/dwm.c b/dwm.c
-index e5efb6a..2234780 100644
---- a/dwm.c
-+++ b/dwm.c
-_AT_@ -160,7 +160,7 @@ 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 Monitor *dirtomon(int dir);
- static void drawbar(Monitor *m);
- static void drawbars(void);
- static void enternotify(XEvent *e);
-_AT_@ -194,6 +194,7 @@ 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 runAutostart(void);
- static void scan(void);
- static int sendevent(Client *c, Atom proto);
- static void sendmon(Client *c, Monitor *m);
-_AT_@ -205,7 +206,6 @@ 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);
-_AT_@ -681,6 +681,7 @@ detachstack(Client *c)
- }
- }
-
-+/*
- Monitor *
- dirtomon(int dir)
- {
-_AT_@ -695,7 +696,7 @@ dirtomon(int dir)
- for (m = mons; m->next != selmon; m = m->next);
- return m;
- }
--
-+*/
- void
- drawbar(Monitor *m)
- {
-_AT_@ -737,7 +738,8 @@ drawbar(Monitor *m)
-
- if ((w = m->ww - tw - x) > bh) {
- if (m->sel) {
-- drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
-+ drw_setscheme(drw, scheme[SchemeNorm]);
-+ // drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
- if (m->sel->isfloating)
- drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
-_AT_@ -823,17 +825,22 @@ focusin(XEvent *e)
- }
-
- void
--focusmon(const Arg *arg)
--{
-- Monitor *m;
-+focusmon(const Arg *arg) {
-+ Monitor *m = NULL;
-
-- if (!mons->next)
-- return;
-- if ((m = dirtomon(arg->i)) == selmon)
-- return;
-- unfocus(selmon->sel, 0);
-- selmon = m;
-- focus(NULL);
-+ if (!mons->next)
-+ return;
-+
-+ if (arg->i > 0) {
-+ m = mons->next;
-+ } else if (arg->i < 0 && mons->next) {
-+ m = mons;
-+ }
-+
-+ if (m) {
-+ selmon = m;
-+ focus(NULL);
-+ }
- }
-
- void
-_AT_@ -955,16 +962,26 @@ grabkeys(void)
- {
- updatenumlockmask();
- {
-- unsigned int i, j;
-+ unsigned int i, j, k;
- unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
-- KeyCode code;
-+ int start, end, skip;
-+ KeySym *syms;
-
- XUngrabKey(dpy, AnyKey, AnyModifier, root);
-- for (i = 0; i < LENGTH(keys); i++)
-- if ((code = XKeysymToKeycode(dpy, keys[i].keysym)))
-- for (j = 0; j < LENGTH(modifiers); j++)
-- XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
-- True, GrabModeAsync, GrabModeAsync);
-+ XDisplayKeycodes(dpy, &start, &end);
-+ syms = XGetKeyboardMapping(dpy, start, end - start + 1, &skip);
-+ if (!syms)
-+ return;
-+ for (k = start; k <= end; k++)
-+ for (i = 0; i < LENGTH(keys); i++)
-+ /* skip modifier codes, we do that ourselves */
-+ if (keys[i].keysym == syms[(k - start) * skip])
-+ for (j = 0; j < LENGTH(modifiers); j++)
-+ XGrabKey(dpy, k,
-+ keys[i].mod | modifiers[j],
-+ root, True,
-+ GrabModeAsync, GrabModeAsync);
-+ XFree(syms);
- }
- }
-
-_AT_@ -1381,6 +1398,12 @@ run(void)
- handler[ev.type](&ev); /* call handler */
- }
-
-+void
-+runAutostart(void) {
-+ system("cd ~/.dwm; ./autostart_blocking.sh");
-+ system("cd ~/.dwm; ./autostart.sh &");
-+}
-+
- void
- scan(void)
- {
-_AT_@ -1533,9 +1556,16 @@ setup(void)
- int i;
- XSetWindowAttributes wa;
- Atom utf8string;
-+ struct sigaction sa;
-+
-+ /* do not transform children into zombies when they terminate */
-+ sigemptyset(&sa.sa_mask);
-+ sa.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT | SA_RESTART;
-+ sa.sa_handler = SIG_IGN;
-+ sigaction(SIGCHLD, &sa, NULL);
-
-- /* clean up any zombies immediately */
-- sigchld(0);
-+ /* clean up any zombies (inherited from .xinitrc etc) immediately */
-+ while (waitpid(-1, NULL, WNOHANG) > 0);
-
- /* init screen */
- screen = DefaultScreen(dpy);
-_AT_@ -1628,21 +1658,23 @@ showhide(Client *c)
- }
- }
-
--void
--sigchld(int unused)
--{
-- if (signal(SIGCHLD, sigchld) == SIG_ERR)
-- die("can't install SIGCHLD handler:");
-- while (0 < waitpid(-1, NULL, WNOHANG));
--}
--
- void
- spawn(const Arg *arg)
- {
-+ struct sigaction sa;
-+
-+ if (arg->v == dmenucmd)
-+ dmenumon[0] = '0' + selmon->num;
- if (fork() == 0) {
- if (dpy)
- close(ConnectionNumber(dpy));
- setsid();
-+
-+ sigemptyset(&sa.sa_mask);
-+ sa.sa_flags = 0;
-+ sa.sa_handler = SIG_DFL;
-+ sigaction(SIGCHLD, &sa, NULL);
-+
- execvp(((char **)arg->v)[0], (char **)arg->v);
- die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
- }
-_AT_@ -1658,14 +1690,26 @@ tag(const Arg *arg)
- }
- }
-
--void
--tagmon(const Arg *arg)
--{
-- if (!selmon->sel || !mons->next)
-- return;
-- sendmon(selmon->sel, dirtomon(arg->i));
-+void tagmon(const Arg *arg) {
-+ if (!selmon->sel || !mons->next)
-+ return;
-+
-+ Monitor *m;
-+
-+ if (arg->i > 0) {
-+ m = mons->next; // Move to mon1
-+ } else if (arg->i < 0 && mons->next) {
-+ m = mons; // Move to mon2
-+ } else {
-+ return; // Do nothing for arg->i == 0
-+ }
-+
-+ sendmon(selmon->sel, m);
-+ focus(NULL);
-+ arrange(selmon);
- }
-
-+
- void
- tile(Monitor *m)
- {
-_AT_@ -2140,6 +2184,7 @@ main(int argc, char *argv[])
- die("pledge");
- #endif /* __OpenBSD__ */
- scan();
-+ runAutostart();
- run();
- cleanup();
- XCloseDisplay(dpy);
---
-2.43.0
-
Received on Fri Feb 09 2024 - 21:44:57 CET
This archive was generated by hypermail 2.3.0 : Fri Feb 09 2024 - 21:48:48 CET