From 5e8081bc6f255d4718d23072170a4717189eb48e Mon Sep 17 00:00:00 2001 From: ronaldr1985 Date: Fri, 28 Jun 2019 12:09:40 +0100 Subject: [PATCH] Applied center patch and updated the README --- README | 48 ----------------------------- README.md | 50 +++++++++++++++++++++++++++++++ config.h | 12 ++++---- dwm | Bin 67792 -> 67792 bytes dwm.c | 9 +++++- dwm.o | Bin 61888 -> 61984 bytes patches/dwm-center-6.1.diff | 58 ++++++++++++++++++++++++++++++++++++ 7 files changed, 122 insertions(+), 55 deletions(-) delete mode 100644 README create mode 100644 README.md create mode 100644 patches/dwm-center-6.1.diff diff --git a/README b/README deleted file mode 100644 index 95d4fd0..0000000 --- a/README +++ /dev/null @@ -1,48 +0,0 @@ -dwm - dynamic window manager -============================ -dwm is an extremely fast, small, and dynamic window manager for X. - - -Requirements ------------- -In order to build dwm you need the Xlib header files. - - -Installation ------------- -Edit config.mk to match your local setup (dwm is installed into -the /usr/local namespace by default). - -Afterwards enter the following command to build and install dwm (if -necessary as root): - - make clean install - - -Running dwm ------------ -Add the following line to your .xinitrc to start dwm using startx: - - exec dwm - -In order to connect dwm to a specific display, make sure that -the DISPLAY environment variable is set correctly, e.g.: - - DISPLAY=foo.bar:1 exec dwm - -(This will start dwm on display :1 of the host foo.bar.) - -In order to display status info in the bar, you can do something -like this in your .xinitrc: - - while xsetroot -name "`date` `uptime | sed 's/.*,//'`" - do - sleep 1 - done & - exec dwm - - -Configuration -------------- -The configuration of dwm is done by creating a custom config.h -and (re)compiling the source code. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b2ee61f --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# My fork of DWM +============================ +dwm is an extremely fast, small, and dynamic window manager for X. + + +## Requirements +------------ +In order to build dwm you need the Xlib header files. + + +## Installation +------------ +Edit config.mk to match your local setup (dwm is installed into +the /usr/local namespace by default). + +Afterwards enter the following command to build and install dwm (if +necessary as root): + + make clean install + + or + + sudo make clean install + + +Running dwm +----------- +Add the following line to your .xinitrc to start dwm using startx: + + exec dwm + + or + + + while :; do + dwm || break + done + +Using the second method on this build means that you can reload DWM if you have recompiled it. To kill dwm in my fork press **$MOD+x** + +## My configuration +------------- +My configuration has three patches applied these are: +1. Rotate stack +2. Pertag +3. Centered +The diff files for the patches that I applied are in this repo under the patches directory. + +More information on patching can be found on the suckless website. +dwm.sucless.org/patches/ diff --git a/config.h b/config.h index 7c1a0b9..040b307 100644 --- a/config.h +++ b/config.h @@ -19,12 +19,12 @@ static const Rule rules[] = { * WM_CLASS(STRING) = instance, class * WM_NAME(STRING) = title */ - /* class instance title tags mask isfloating monitor */ - { "stalonetray", NULL, NULL, 1 << 8, 1, -1 }, - { "st-256color", NULL, "pulsemixer", 0, 1, -1 }, - { "st-256color", NULL, "ncmpcpp", 0, 1, -1 }, - { "st-256color", NULL, "tmux", 0, 1, -1 }, - { "st-256color", NULL, "htop", 0, 1, -1 }, + /* class instance title tags mask iscentered isfloating monitor */ + { "stalonetray", NULL, NULL, 1 << 8, 1, 1, -1 }, + { "st-256color", NULL, "pulsemixer", 0, 1, 1, -1 }, + { "st-256color", NULL, "ncmpcpp", 0, 1, 1, -1 }, + { "st-256color", NULL, "tmux", 0, 1, 1, -1 }, + { "st-256color", NULL, "htop", 0, 1, 1, -1 }, }; diff --git a/dwm b/dwm index 33859fef0c36c7fb3ae50cbd4f12d78b04a7bcc7..029e1f61b9097bdc025feebf8853d1ec9d1a6414 100755 GIT binary patch delta 1820 zcmYjS3rtg27{2GyVykFzE9gW=T`CU;3PTJyG2W$>TUHbWr;*BV5(P!3Sv%?kYf@^x z-c=<>Euy5pLEY0EA3UT*Oklb#Y=#Y=GwQ}g2qT+-I`Hm4ZI*eHp6~pR^PTTI_q6S( zlyy|fzEL1$=W5FTbP5wuD^mC6YdoH-z0JqmTP(S^sEe9yA*ThAW+$ORA#uuc;wBx1wktD<{yNYNd zi~F+Y(lUdf&4~_1y@GMoaYUyucp&#NkaU`|f&ilOPoc3U1ggyO_QqnNbIm6-$`=d; zN*bAP_PX;h2CpxHPRn{5qTfrxLxln=$7hR7v?d8FHta!11^0&2um~^M)HFFCs1kic zdJ379i9UO|f>Q1GarOe?wUTC{{ilz;GN7z9r@(mK90%jDIT;G^mX`<>oAh3=<-)%}!Ee#@P#TW$AWQh(oPY#*sRCIJ*faTMxkU8`dZg@|U%2s=sE*vwH*P zly+|p={C=8bDHq(tz=8z)@T|P2;#PG8CoH9?3fb-YvmPdp;T0Hfkwqbq;pgTFzs_U zXvY^^d!eM?bDbCo-3L%C+^PJOl$K!*a(8hD3BEkwfHCP{5{&B)UZj=5IMQ8%a_|-R z0!WRxr$zH7t%h~U%^}2TOQz$oL8bqmb=+Z9x-OQNKQ@qjh!!ubnlfpVfuGAdhRhRK ze!f=Jo|7cj;WMwmTdKm;48t#)%5ct=;0>l4n40k3stBaT=c?X_N=~9EW9op)Q6xzc z>|$0Jxo*)}3lw}AC~!z-xoE{tsv>QfymJR3;hb51E+-41=RKkRC`-fen`89+UIm26 z$GGMPxkBDy&~qmByY0%@=M3ksK!e)fZ`Cq98>i=MLmL zI4366>t|DC2C&Vq9M~wv?j`2}wEl|uZN}b8a|2#N%Gg_IU2NB(VF?_=rZ$Re*TuF6 zV#3GrX=7M8J+7xA6#7}NzfGr2Aan+oXBVJYcbXidyeHk?e47B*&+@P`OC!EtCrL(5 z5^b#k?0*r!+M59k2ZSw7!YbhZh>C-?V(l48N*sc#FaGdQl0bgo?uHroOJqmrw?Mym z6qi)L6<-J$^11;WK8x27cz-OPtcD(@-f!}$9){ zPn=VH*!grkTCI(2S_I_3!sRgVUb0^^d?+#Fz9g*zpF8ow!)n`25C&y(Rg9c1U!2!P z;{W7rBn;tTJy8EnC1Q$!5d=72LH3sIm5ID|1&fCT2C0$9&kD&2s;+d}$2p z3M^azc`vgR75dY}t?iEyY0AJJvgv_*n=kuishtNl98Nh7w7@7{a>Jc8!6C=P$u< z>$+L0$O`DEC{-l&x9ZIo%nG9`4adXTeqi8!VU`=XK_-XcMwYX#_zFm88)HXVd!ItI z9S6de(I9hVqL5N!rOzK#D5l2_OH!4ZqDlbghf!4CGf7$rSOI7Td@97&^@h@6avWYC zMW@N|g8EsA!<*_)Oq&TuK0t&p6GC^=8516W_{k7Hn@CYFaePArt$2hp8WzbD9!ZiM zADfel2O2h$H%q~{Uc!Zqn*W1+uLhT24IVUV@JOTPgr*6hK|K9RH)kp#m9T7eoNR**D_=~4y eC`E`JbgGcW{jChmR<_p=D-_j!sYiyogZ>5jlDxkF delta 1783 zcmYjS3rtg27{2GWbuABz3rqqi)s$BPYUL5TiQy&`PDxP^bxcrEQL2d!voh*LFsWU4 zy{pQO3JMGrW$JWu-Z*)vg<)jV#Njrb6CX@nxD29X%EKw%{inptraj;N-`{u6Y1>t) z?5b3rRwIpb8RLC9#Yw0G1wP5whpsGiM;Hyxo53~3cTb(X86`?Ao{SnrL&&B$WFige z3)rC?@+|!i6e3>3FA?$=uV!>B)t56F2D|+ih~F&OkI+Gavoj!_WbZ+z#ps1UAa*RB z4CExSXR)YX6g2_Wik78^5!;tS2J;@FT=7PJmI5HM;3)FRMZn4y=V-NxH&%YcqI}U@ zs9{kq$ys{_)(J%$A+w~Y0^4aUNiF*A`lr2`RZ-gQ;Z^QZEd}w88 z8#Xb>rZKcRwyGKJo;Kc5AillvB7!d0KlCV}Wu0thTr^5;llv<~Qy66+{C?u7o<*1MZ*h742oW6KRE=jcSh4QQRNFef$y)4WdD_QRF zjEmDaJd0?yEveI$OLlCgBilAdv8X_lw)85ITI|}EpnzJ{_SFztxBV=OtYWxpObIaM z^D5v@&boI&$h7kc6%w!;z$$iEeoR9P2@k$Iq>CD-_BvsW-xm*S(Z28578MDvszYXS zp=utuURF(sa;rA`QIQ>)&PQgg=?><@^jOH(>#(yMYg2DwLDges7?M&QGI^C*NW#ux z+e9qP)l2%XWf?o$Y!Q)Az=O)z78GkDGNsVde`0<4K`cxq;7SjD_v7#!F0{W3d*G7!I<(ufZ?DbtVoLyIWBxG~k_#{>ch`SLJ9oOM4tRqWZ=Qwk>rBA*2rw(zoatz#UMUyS4Muj9A|5XzpWGYkx0MTbkn$7R_t4A)l*dnn7? z>-!f3+e+y``Xxx0o{$R%rpFb6hn^mQv#rEq7QAPMg~Zj6!!=X+T$2t~C@Us@H4&jL z5U}ue>w1(Uy*dE{1Q*>uAqZh&snJ*X(&mxC+bnqKyo>N*r2Y3~c`4|;k;X6|n2p{k zCB9g&7Z`@6>A(}R>7iTriUNthMeWyYTcAW*0}Tzbbf%Z;P1WN<9IuRshR$$nG$0r| zF6HJeB$j<8BKR6^FqATv}mlzmLa<%G(7lk5}lL zBeI+=tpK{TqaSuB|Na&vJbwlHJJ!z7hHr;_hFQD&sdnnW-1`=H^20dT<0WSPCb!tk z4{?h){^erqj{6PVIhL3)>=;l>KOcsE?PCgCxS?C*>q=R2Iw9-KLA83??O|E24rG|{ z5m}xa#4y@XSrgZ-)%Y&2*H!07@z6u~y|atP zzoJx#5m){l#j@SC;*NpG3bwyS{AAFeM6=1sXJsf!j2UuiQAE{uN;FerucO2m#(u6( IiFy_P0SAJzMF0Q* diff --git a/dwm.c b/dwm.c index bb04ecd..74d7beb 100644 --- a/dwm.c +++ b/dwm.c @@ -92,7 +92,7 @@ struct Client { int basew, baseh, incw, inch, maxw, maxh, minw, minh; int bw, oldbw; unsigned int tags; - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + int isfixed, iscentered, isfloating, isurgent, neverfocus, oldstate, isfullscreen; Client *next; Client *snext; Monitor *mon; @@ -139,6 +139,7 @@ typedef struct { const char *instance; const char *title; unsigned int tags; + int iscentered; int isfloating; int monitor; } Rule; @@ -308,6 +309,7 @@ applyrules(Client *c) && (!r->class || strstr(class, r->class)) && (!r->instance || strstr(instance, r->instance))) { + c->iscentered = r->iscentered; c->isfloating = r->isfloating; c->tags |= r->tags; for (m = mons; m && m->num != r->monitor; m = m->next); @@ -1081,6 +1083,11 @@ manage(Window w, XWindowAttributes *wa) && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); c->bw = borderpx; + if(c->iscentered) { + c->x = (c->mon->mw - WIDTH(c)) / 2; + c->y = (c->mon->mh - HEIGHT(c)) / 2; + } + wc.border_width = c->bw; XConfigureWindow(dpy, w, CWBorderWidth, &wc); XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); diff --git a/dwm.o b/dwm.o index a06e4b5b01d789c9590d289db7933d5266dae777..ae6af60b56b22b00f823a4e912e06f7b3f304300 100644 GIT binary patch delta 1639 zcmaJ>drVtZ81K21+48Vc9&Mp)g;XfAWfTXaP+D$i^&+5{FdduNj@=Yhkq%6^F|BmaTpp5%P5-}n0- zJvR;AP8wNFI%^~&L&X8&ynLrQi8#dy`IjWcNn|pa>!3T(CEiJXmm%$9t3t^TCv>EY zqRdWx8#6trGs&bKUU*_$(~kM3(6&QHTuM{OeM%uyoeS~qlVZV>-x5r{l@XL9?}DZh z<)Y>Q%Ez?j2-IjF5z+;g+~@Yuo*e(%w7Uxp+JD+jL)7Bkop2%dH0cDrE+>`Z^zd#c zICLK)eMwh{gD`o0ItlAJ?heK_P`ZOHG}~1%?RCOud9>whUJ*l1ihu3bDUg(9?7-Lu z#w!fz5)YO9BS&?x^gIp?*Gz*59WA>~H_#tO)g`W#zek}HM|g~_ADN}jgxQ0#uId>K zy90OLc#f;5|ce z-rFptc{x-L!M|7Xn)R&EZFC5O3Uo<`^;wd9X=N;Vz?y$Jtt@`P@)CjxnNohQffcv| z4&h=Nx^^<-)2Uc;l{GJ8@)XPaX_z&ir`7m5R@LP1rzQfDs_xbG814K#JI>%H!|eTs z4xzo&m#MLvSNc?rr1nZQPVEtD=$@=OC{V5tJ0*uvY?VpN9 z8~JE>^Y56xI2Y5|sN;MjpP*#vNle@Lk%n)qM58#G6FRMxicYL3y~ic1pF9toO;<99 zc)bv$uhGc&w}-3dssHuBe?!HJMZ+C1Xlu!ZN$lnc^`vvYavV?AcJ~s_(>8?<1zQan zqqR3RAa6B5ZG-%Ov{9^mxtECgwlC6|tYrAUvyiEgi<_NKr&2e^RY5qly3S7pVtCIW_ZlV1rumQCx(;CC& zsK)R}S066u>(Hwbqot`U9gotYZ@TdIC!O@1R}@{U`zbE`d7(KLyle ziRRQ38|@X_f_AsWw@8o2X>0}WPUW0k`Jc!0Yhh?yZE_^A77|#;cd@=gjGiIN(teV_ zN>12f6eba!-Nn_#sIp%q?s5WmPXhOM$e&P?N1}P+-c$IL#kY$Ts9suoktkDY;}syk zK@FjG4GF`-x{Yb9g`5p5{?WB=*ia5{*qHh{Sj5l>Xg6)-478$*z%a_2uz>O`XzxjJ zl;6NG%6V8oxeVHfjoEC&?=c&?BSuQXfMOLEBUVQ9Cgf~cNjJ1^*_5+uv0<*mYmxo` E0-BW;4*&oF delta 1623 zcmZ`(ZA@EL7`~@1v*p8r+bD&yRZ^ko7AXp&P+IOrx7(~BOSYv5DgjKuAI8Ko2Vs1q zY0AyDZu)K^7!pRJ(d>^ISHqw%iezKXX=>(=>C6`SNFWFUe-zMZea~%48WK->-{+q9 zeV+H@oSR-qCk9<=wY-fmDWeR#OC>izTAn$1qbDq0Nkox=HDFy0= zGfL3@nsEs2Guk2ylxzPbqy;QlCl1h>9RGOM(}FLw{;Y?(=o{~8hT*I((hPcCW)h9l z#d};}*IhyRLtQR5BFpa7NwKy!JyX#MRGz8Rl$1nqd+)Z(2q^SEz?B|ohiIaC(yr&&?2rBoui?~BRu;4I1-|pNwXL2 zvC>!2^+D+wLLBfznH62hmh3!#0&SJ!XR5pl4z>L^j@KDDq28e9ybn2b)Q0}4H-5)z;12{XA8)dIn=tSrW*KL#Gbm(Qe?LkklUIo zTa$~`tuH3gZHGIToD+xL$M%v!SoC$0VzIIBKp|Oy-f;~{hJo?7w3jWkGQ-fj;PFvl zvvgg9w19?;Nwy2vfTnv;I`=43fsA_+k6~`b{M0v&&(lbB-P^_gImW-g%fFLnE-ufX zad}i$NeEvA(zNN(cZSxYo$k~sf#HBgTOJqvHZDUum?kvjL&|ZC#5i8RXF8*MQzd^H^!f~o!;#6uIZgA~X`8v8~j>5)-MtdR_rS%iyrf7oaCpFsMU0PjC z+b3!LaoRm`+J5Mr)R3>lfypN?;HC5Pc}j%qE3Xk%ASPj;_oN2&s~MyZ%&RupQyX-w zTH&!%3BlD8il3~N$d->n>6(>PK>L~v|2f9cUV?43Jz#!fBL&co7X4^lu#NUSnAdHj w6WZ5pvXAQElrtSd>qaU<$CvX^x?z>wXoZdqD@ld14V&t{mFPrwVS4@Gf9HA%fB*mh diff --git a/patches/dwm-center-6.1.diff b/patches/dwm-center-6.1.diff new file mode 100644 index 0000000..b4a49e1 --- /dev/null +++ b/patches/dwm-center-6.1.diff @@ -0,0 +1,58 @@ +diff --git a/config.def.h b/config.def.h +index 7054c06..e0cdcf3 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -24,9 +24,9 @@ static const Rule rules[] = { + * WM_CLASS(STRING) = instance, class + * WM_NAME(STRING) = title + */ +- /* class instance title tags mask isfloating monitor */ +- { "Gimp", NULL, NULL, 0, 1, -1 }, +- { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, ++ /* class instance title tags mask iscentered isfloating monitor */ ++ { "Gimp", NULL, NULL, 0, 0, 1, -1 }, ++ { "Firefox", NULL, NULL, 1 << 8, 0, 0, -1 }, + }; + + /* layout(s) */ +diff --git a/dwm.c b/dwm.c +index 0362114..4aaaa60 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -92,7 +92,7 @@ struct Client { + int basew, baseh, incw, inch, maxw, maxh, minw, minh; + int bw, oldbw; + unsigned int tags; +- int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; ++ int isfixed, iscentered, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + Client *next; + Client *snext; + Monitor *mon; +@@ -137,6 +137,7 @@ typedef struct { + const char *instance; + const char *title; + unsigned int tags; ++ int iscentered; + int isfloating; + int monitor; + } Rule; +@@ -296,6 +297,7 @@ applyrules(Client *c) + && (!r->class || strstr(class, r->class)) + && (!r->instance || strstr(instance, r->instance))) + { ++ c->iscentered = r->iscentered; + c->isfloating = r->isfloating; + c->tags |= r->tags; + for (m = mons; m && m->num != r->monitor; m = m->next); +@@ -1063,6 +1065,11 @@ manage(Window w, XWindowAttributes *wa) + && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); + c->bw = borderpx; + ++ if(c->iscentered) { ++ c->x = (c->mon->mw - WIDTH(c)) / 2; ++ c->y = (c->mon->mh - HEIGHT(c)) / 2; ++ } ++ + wc.border_width = c->bw; + XConfigureWindow(dpy, w, CWBorderWidth, &wc); + XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);