[DWM] Définir un Layout par Tag
- Ichigo-Roku
- yeomen
- Messages : 259
- Inscription : jeu. 04 févr. 2010, 19:15
[DWM] Définir un Layout par Tag
Bonjour,
J'ai installé le patch pertag, maintenant quand je modifie un Layout ça le modifie seulement dans le tag où je me trouve.
Par contre en me promenant sur les forums archlinux j'ai vu un config.h et dessus l'utilisateur donne un Layout pour chaque Tag, voici ce que j'ai reproduis ici.
Chez moi j'ai toujours le Tag par défaut alors que j'ai demandé à certains Tags d'être au Layout par défaut et à d'autres d'être à mon second Layout.
Merci d'avance.
J'ai installé le patch pertag, maintenant quand je modifie un Layout ça le modifie seulement dans le tag où je me trouve.
Par contre en me promenant sur les forums archlinux j'ai vu un config.h et dessus l'utilisateur donne un Layout pour chaque Tag, voici ce que j'ai reproduis ici.
Chez moi j'ai toujours le Tag par défaut alors que j'ai demandé à certains Tags d'être au Layout par défaut et à d'autres d'être à mon second Layout.
Merci d'avance.
Macbook Pro Retina 13" late-2014 (Archlinux + OS X Yosemite)
Re: [DWM] Définir un Layout par Tag
Voici la section provenant du mon config.h perso:
J'utilise pertag2. Tu peux le trouver dans ce sujet: https://bbs.archlinux.org/viewtopic.php?pid=1032054
Code : Tout sélectionner
/* tagging */
static const Tag tags[] = {
/* name layout mfact nmaster */
{ "term", &layouts[0], 0.35, -1 },
{ "net", &layouts[2], -1, -1 },
{ "gatw", &layouts[1], 0.45, -1 },
{ "conf", &layouts[0], -1, -1 },
{ "harm", &layouts[0], 0.45, -1 },
{ "foo", &layouts[1], 0.4, -1 },
};
- Ichigo-Roku
- yeomen
- Messages : 259
- Inscription : jeu. 04 févr. 2010, 19:15
Re: [DWM] Définir un Layout par Tag
Donc pertag ne le permet pas ? Par contre je dois enlever pertag pour mettre pertag2 ?
Macbook Pro Retina 13" late-2014 (Archlinux + OS X Yosemite)
Re: [DWM] Définir un Layout par Tag
Je ne connais pas ton pertag. J'ai toujours utilisé pertag2 et je n'ai jamais eu aucun soucis.
Sinon, recommence tout et patche uniquement avec pertag2, sur les sources vanilla de dwm (garde juste ton config.h).
Sinon, recommence tout et patche uniquement avec pertag2, sur les sources vanilla de dwm (garde juste ton config.h).
- Ichigo-Roku
- yeomen
- Messages : 259
- Inscription : jeu. 04 févr. 2010, 19:15
Re: [DWM] Définir un Layout par Tag
Petit problème à la compilation :
Ça arrive aussi pour mfact, nmaster et layout, comme si la structure du début n'existait pas en fait...
Code : Tout sélectionner
request for member "name" in something not a struction or union
Macbook Pro Retina 13" late-2014 (Archlinux + OS X Yosemite)
Re: [DWM] Définir un Layout par Tag
Donne ton config.h.
EDIT: Voici le patch:
EDIT: Voici le patch:
Code : Tout sélectionner
--- a/dwm.c 2011-12-19 17:09:07.000000000 +0200
+++ b/dwm.c 2011-12-26 21:20:17.090865115 +0200
@@ -126,8 +126,6 @@ typedef struct {
struct Monitor {
char ltsymbol[16];
- float mfact;
- int nmaster;
int num;
int by; /* bar geometry */
int mx, my, mw, mh; /* screen size */
@@ -143,9 +141,21 @@ struct Monitor {
Monitor *next;
Window barwin;
const Layout *lt[2];
+ int curtag;
+ int prevtag;
+ const Layout **lts;
+ double *mfacts;
+ int *nmasters;
};
typedef struct {
+ const char *name;
+ const Layout *layout;
+ float mfact;
+ int nmaster;
+} Tag;
+
+typedef struct {
const char *class;
const char *instance;
const char *title;
@@ -251,6 +261,7 @@ static int xerror(Display *dpy, XErrorEv
static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg);
+static void bstack(Monitor *m);
/* variables */
static const char broken[] = "broken";
@@ -441,7 +452,7 @@ buttonpress(XEvent *e) {
if(ev->window == selmon->barwin) {
i = x = 0;
do
- x += TEXTW(tags[i]);
+ x += TEXTW(tags[i].name);
while(ev->x >= x && ++i < LENGTH(tags));
if(i < LENGTH(tags)) {
click = ClkTagBar;
@@ -513,6 +524,9 @@ cleanupmon(Monitor *mon) {
}
XUnmapWindow(dpy, mon->barwin);
XDestroyWindow(dpy, mon->barwin);
+ free(mon->mfacts);
+ free(mon->nmasters);
+ free(mon->lts);
free(mon);
}
@@ -646,17 +660,31 @@ configurerequest(XEvent *e) {
Monitor *
createmon(void) {
Monitor *m;
+ int i, numtags = LENGTH(tags) + 1;
if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
+ if(!(m->mfacts = calloc(numtags, sizeof(double))))
+ die("fatal: could not malloc() %u bytes\n", sizeof(double) * numtags);
+ if(!(m->nmasters = calloc(numtags, sizeof(int))))
+ die("fatal: could not malloc() %u bytes\n", sizeof(int) * numtags);
+ if(!(m->lts = calloc(numtags, sizeof(Layout *))))
+ die("fatal: could not malloc() %u bytes\n", sizeof(Layout *) * numtags);
m->tagset[0] = m->tagset[1] = 1;
- m->mfact = mfact;
- m->nmaster = nmaster;
+ m->mfacts[0] = mfact;
+ m->nmasters[0] = nmaster;
+ m->lts[0] = &layouts[0];
m->showbar = showbar;
m->topbar = topbar;
- m->lt[0] = &layouts[0];
+ m->curtag = m->prevtag = 1;
+ for(i = 1; i < numtags; i++) {
+ m->mfacts[i] = tags[i - 1].mfact < 0 ? mfact : tags[i - 1].mfact;
+ m->nmasters[i] = tags[i - 1].nmaster < 0 ? nmaster : tags[i - 1].nmaster;
+ m->lts[i] = tags[i - 1].layout;
+ }
+ m->lt[0] = m->lts[m->curtag];
m->lt[1] = &layouts[1 % LENGTH(layouts)];
- strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
+ strncpy(m->ltsymbol, m->lt[0]->symbol, sizeof m->ltsymbol);
return m;
}
@@ -729,9 +757,9 @@ drawbar(Monitor *m) {
}
dc.x = 0;
for(i = 0; i < LENGTH(tags); i++) {
- dc.w = TEXTW(tags[i]);
+ dc.w = TEXTW(tags[i].name);
col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
- drawtext(tags[i], col, urg & 1 << i);
+ drawtext(tags[i].name, col, urg & 1 << i);
drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
occ & 1 << i, urg & 1 << i, col);
dc.x += dc.w;
@@ -1028,7 +1056,7 @@ grabkeys(void) {
void
incnmaster(const Arg *arg) {
- selmon->nmaster = MAX(selmon->nmaster + arg->i, 0);
+ selmon->nmasters[selmon->curtag] = MAX(selmon->nmasters[selmon->curtag] + arg->i, 0);
arrange(selmon);
}
@@ -1558,7 +1586,7 @@ setlayout(const Arg *arg) {
if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
selmon->sellt ^= 1;
if(arg && arg->v)
- selmon->lt[selmon->sellt] = (Layout *)arg->v;
+ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
if(selmon->sel)
arrange(selmon);
@@ -1573,10 +1601,10 @@ setmfact(const Arg *arg) {
if(!arg || !selmon->lt[selmon->sellt]->arrange)
return;
- f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
+ f = arg->f < 1.0 ? arg->f + selmon->mfacts[selmon->curtag] : arg->f - 1.0;
if(f < 0.1 || f > 0.9)
return;
- selmon->mfact = f;
+ selmon->mfacts[selmon->curtag] = f;
arrange(selmon);
}
@@ -1710,13 +1738,13 @@ tile(Monitor *m) {
if(n == 0)
return;
- if(n > m->nmaster)
- mw = m->nmaster ? m->ww * m->mfact : 0;
+ if(n > m->nmasters[m->curtag])
+ mw = m->nmasters[m->curtag] ? m->ww * m->mfacts[m->curtag] : 0;
else
mw = m->ww;
for(i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if(i < m->nmaster) {
- h = (m->wh - my) / (MIN(n, m->nmaster) - i);
+ if(i < m->nmasters[m->curtag]) {
+ h = (m->wh - my) / (MIN(n, m->nmasters[m->curtag]) - i);
resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), False);
my += HEIGHT(c);
}
@@ -1748,13 +1776,24 @@ togglefloating(const Arg *arg) {
void
toggletag(const Arg *arg) {
- unsigned int newtags;
+ unsigned int i, newtags;
if(!selmon->sel)
return;
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
if(newtags) {
selmon->sel->tags = newtags;
+ if(newtags == ~0) {
+ selmon->prevtag = selmon->curtag;
+ selmon->curtag = 0;
+ }
+ if(!(newtags & 1 << (selmon->curtag - 1))) {
+ selmon->prevtag = selmon->curtag;
+ for (i=0; !(newtags & 1 << i); i++);
+ selmon->curtag = i + 1;
+ }
+ selmon->sel->tags = newtags;
+ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
focus(NULL);
arrange(selmon);
}
@@ -2043,11 +2082,26 @@ updatewmhints(Client *c) {
void
view(const Arg *arg) {
+ unsigned int i;
+
if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
return;
selmon->seltags ^= 1; /* toggle sel tagset */
- if(arg->ui & TAGMASK)
+ if(arg->ui & TAGMASK) {
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+ selmon->prevtag = selmon->curtag;
+ if(arg->ui == ~0)
+ selmon->curtag = 0;
+ else {
+ for (i=0; !(arg->ui & 1 << i); i++);
+ selmon->curtag = i + 1;
+ }
+ } else {
+ selmon->prevtag= selmon->curtag ^ selmon->prevtag;
+ selmon->curtag^= selmon->prevtag;
+ selmon->prevtag= selmon->curtag ^ selmon->prevtag;
+ }
+ selmon->lt[selmon->sellt]= selmon->lts[selmon->curtag];
focus(NULL);
arrange(selmon);
}
@@ -2126,6 +2180,32 @@ zoom(const Arg *arg) {
pop(c);
}
+void
+bstack(Monitor *m) {
+ unsigned int i, n, w, mh, mx, tx;
+ Client *c;
+
+ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if(n == 0)
+ return;
+
+ if(n > m->nmasters[m->curtag])
+ mh = m->nmasters[m->curtag] ? m->wh * m->mfacts[m->curtag] : 0;
+ else
+ mh = m->wh;
+ for(i = mx = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if(i < m->nmasters[m->curtag]) {
+ w = (m->ww - mx) / (MIN(n, m->nmasters[m->curtag]) - i);
+ resize(c, m->wx + mx, m->wy, w - (2*c->bw), mh - (2*c->bw), False);
+ mx += WIDTH(c);
+ }
+ else {
+ w = (m->ww - tx) / (n - i);
+ resize(c, m->wx + tx, m->wy + mh, w - (2*c->bw), m->wh - mh - (2*c->bw), False);
+ tx += WIDTH(c);
+ }
+}
+
int
main(int argc, char *argv[]) {
if(argc == 2 && !strcmp("-v", argv[1]))
- Ichigo-Roku
- yeomen
- Messages : 259
- Inscription : jeu. 04 févr. 2010, 19:15
Re: [DWM] Définir un Layout par Tag
Voici mon config.h.
Par contre les erreurs viennent du dwm.c. Les erreurs surviennent aux lignes : 456, 682, 683, 684, 762 et 764. Toutes les erreurs viennent quand j'essaye d'accéder à un membre de la structure Tag si je ne me trompe pas.
Edit : c'est bien ce patch que j'ai utilisé.
Par contre les erreurs viennent du dwm.c. Les erreurs surviennent aux lignes : 456, 682, 683, 684, 762 et 764. Toutes les erreurs viennent quand j'essaye d'accéder à un membre de la structure Tag si je ne me trompe pas.
Edit : c'est bien ce patch que j'ai utilisé.
Macbook Pro Retina 13" late-2014 (Archlinux + OS X Yosemite)
- Ichigo-Roku
- yeomen
- Messages : 259
- Inscription : jeu. 04 févr. 2010, 19:15
Re: [DWM] Définir un Layout par Tag
Oui mais du coup je l'ai appliqué à la main, j'y suis allé doucement ligne par ligne. Au niveau des structures je suis bon j'ai vérifié plusieurs fois donc il devrait pouvoir accéder à la structure sans problème.
Macbook Pro Retina 13" late-2014 (Archlinux + OS X Yosemite)
- Ichigo-Roku
- yeomen
- Messages : 259
- Inscription : jeu. 04 févr. 2010, 19:15
Re: [DWM] Définir un Layout par Tag
Non mais en fait j'ai fait un copié/collé de chaque ligne dans le .c, quand je veux appliquer un patch de manière "automatique" le patch s'applique une fois sur deux sans râler alors bon...
Macbook Pro Retina 13" late-2014 (Archlinux + OS X Yosemite)