Tutoriel sur dwm

oui en faite je trouve que dwm permet un gestion plus affinés des fenêtre avec les différent patch, autant sur mon 12" ça se discute autant sur deux 23" j’y trouve mon compte et puis surtout ça m’oblige à garder mon bureau propre.
Sur gnome par ex mon bureau c’est un tapis d’icones en tout genre, je ne vois jamais mon wallpp alors que dwm ça reste propre et surtout léger (j’ai pas dis que gnome c’était pas léger :liar: surtout la version 3 :mrgreen: )

Bref j’ai encore besoin d’aide je voudrais pouvoir fair comme sur wmii à savoir appliquer un tag à un programme ou plusieurs

La finalité c’est enlever les tag 1-9 et mettre ce que je veux, mais je n’arrive pas à comprendre comment cela fonctionne, j’ai bien fouiné sur leur site mais ce n’est pas super détaillé.

Tu peux me donner un exemple de config.h ou un lien ou je trouverais l’info?

Alors, si c’est un comportement exactement comme wmii, dwm ne pourra pas le faire. Les deux ont une façon complètement différente de gérer les fenetres, à toi de choisir celle qui te conviens le mieux.
En effet, sous wmii, tu peux donner l’étiquette que tu veux à une fenetre, etiquette que tu peux appeler 1, 2, 3, 4… ou même “internet”, “mail”, “video”, “cours”… Cependant, pour retourner sur cette étiquette (tag), il faut faire mod+T puis après taper le nom du tag…
À mon avis, c’est vraiment utile lorsque l’on utilise des milliers de fenetres différentes.

Après, en plus des fonctionnalités uniques à dwm citées plus haut, ce dernier ne permet pas d’ajouter ou enlever des étiquettes à tire-larrigot. (Je fais une faute à l’écrire, non?).
PAr défaut, tu as ces tags-ci :

static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
Que tu peux changer par exemple par :

static const char *tags[] = { "Internet", "Fichiers", "Video", "bazar" };
Il y en a moins, mais ils seront accessibles les uns après les autres via les touches 1 2 3 4 … .
Tu ne peux cependant (à ma conaissance) pas en rajouter lors de l’utilisation de dwm. Au mieux, tu peux les renommer avec ce patch : dwm.suckless.org/patches/nametag .

J’avais posé ce genre de question sur la liste de diffusion. La réponse, que je trouve justifiée, est que de toute manière, ta façon d’arranger tes fenêtres ne va pas vraiment varier d’une fois à l’autre, tu va prendre des habitudes. Ce qui est logique, instinctivement, pour t’y retrouver, tu vas placer (exemple) firefox dans le tag 1, tes fichiers dans le tag 2, tes téléchargements dans le 9, et si un jour tu en inverse 2 tu vas t’y mélanger.

Tu peux par contre, faire en sorte que certaines fenetres n’apparaissent que dans certains tag. Tu peux bien sur les déplacer à la main ensuite, elles ne sont pas collées à ce tag, c’est juste pratique par exemple au démarrage. Ainsi, la fenetre de téléchargement de firefox peut automatiquement se retrouver dans le tag 9, ainsi que ton client bittorrent pour reprendre l’exemple suscité. Pour cela, regarde ici : dwm.suckless.org/customisation/tagmask
thuban.toile-libre.org/index.php … s-fenetres

Si c’est pas évident (car faut prendre le coup), n’hésite pas à demander :slightly_smiling:

[quote=“thuban”]Alors, si c’est un comportement exactement comme wmii, dwm ne pourra pas le faire. Les deux ont une façon complètement différente de gérer les fenetres, à toi de choisir celle qui te conviens le mieux.
En effet, sous wmii, tu peux donner l’étiquette que tu veux à une fenetre, etiquette que tu peux appeler 1, 2, 3, 4… ou même “internet”, “mail”, “video”, “cours”… Cependant, pour retourner sur cette étiquette (tag), il faut faire mod+T puis après taper le nom du tag…
À mon avis, c’est vraiment utile lorsque l’on utilise des milliers de fenetres différentes.

Après, en plus des fonctionnalités uniques à dwm citées plus haut, ce dernier ne permet pas d’ajouter ou enlever des étiquettes à tire-larrigot. (Je fais une faute à l’écrire, non?).
PAr défaut, tu as ces tags-ci :

static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
Que tu peux changer par exemple par :

static const char *tags[] = { "Internet", "Fichiers", "Video", "bazar" };
Il y en a moins, mais ils seront accessibles les uns après les autres via les touches 1 2 3 4 … .
Tu ne peux cependant (à ma conaissance) pas en rajouter lors de l’utilisation de dwm. Au mieux, tu peux les renommer avec ce patch : dwm.suckless.org/patches/nametag .[/quote]
J’ai pas zyeuté le code de dwm depuis un bail, mais je suis persuadé qu’il est possible de se coder une gestion dynamique des tabs (puisque c’est comme ça que ça s’appelle) (au passage awesome le fait sans soucis).

Je ne pense pas que ce soit utile quand tu as énormément de clients, au contraire je pense que c’est quand tu en a pas beaucoup.

Héhé! je te sens bien chaud pour la concoction d’un patch Mimi! :smiley: (Si je peux t’appeler Mimi?)

Ce n’est pas un problème si simple en fait. Les tags sont enregistrés dans un tableau de 9 cases. Un tag (une case) est visible si son indice est passé à 1. Ou plutot, chaque client apparait dans le tag où l’indice est égal à 1.
Alors pour cela, il faudrait créer un tableau suffisamment grand pour contenir autant de cases que l’on veut, puis les fonctions permettant d’ajouter ou supprimer des tags. Ou alors ça se fait avec des mallocs, mais ça ça me dépasse.
Sinon en effet, awesome peut le faire, mais pas par défaut, il faut bidouiller un peu je crois.

Pas de sushis.

Solution terriblement moche, le genre que je n’envisage pas.

C’est à ça que je pensais. Justement, c’est le fait qu’ils soient stockés dans un tableau qui m’a permis de penser que c’était facile d’ajouter la “dynamicité” possible.

C’est celui qui doit appliquer une dizaine de patchs et ajouter je ne sais combien de script à son wm qui ose dire ça ? :laughing:

Pas de sushis.

Solution terriblement moche, le genre que je n’envisage pas.

C’est à ça que je pensais. Justement, c’est le fait qu’ils soient stockés dans un tableau qui m’a permis de penser que c’était facile d’ajouter la “dynamicité” possible.

C’est celui qui doit appliquer une dizaine de patchs et ajouter je ne sais combien de script à son wm qui ose dire ça ? :laughing:[/quote]

Comme quoi, on sent la différence entre le programmeur et le bidouilleur! C’est clair que la deuxième solution, je sais que ça se fait, mais c’est trop duuuur! :smiley:

Ouuhh!! Mais c’est que tu cherches là? :smiley: Alors déja, je n’ai que 1 patch : flextile. Et ce n’est pas difficile à appliquer d’abord. Et je ne vais pas en ajouter d’autre pour avoir des fonctionnalités qui ne me servent pas.
Et puis mes scripts, je les utilise même lorsque je ne suis pas avec dwm, c’est juste pour me simplifier la vie (oui, bon, je me la complique en les écrivant, mais j’aime bien). C’est juste que les outils proposés par suckless sont simples et font bien leur boulot pour ajouter des petits scripts servant à faire ce que je veux. Chacun son boulot, du moment que tout le monde le fait bien.

[quote=“thuban”]Ouuhh!! Mais c’est que tu cherches là? :smiley: Alors déja, je n’ai que 1 patch : flextile. Et ce n’est pas difficile à appliquer d’abord. Et je ne vais pas en ajouter d’autre pour avoir des fonctionnalités qui ne me servent pas.
Et puis mes scripts, je les utilise même lorsque je ne suis pas avec dwm, c’est juste pour me simplifier la vie (oui, bon, je me la complique en les écrivant, mais j’aime bien). C’est juste que les outils proposés par suckless sont simples et font bien leur boulot pour ajouter des petits scripts servant à faire ce que je veux. Chacun son boulot, du moment que tout le monde le fait bien.[/quote]
Je taquine, hein ? J’en ai probablement plus que toi (et pour sûr dans plus de langages :stuck_out_tongue: :smiling_imp: ).

Je sais, je me suis habitué, et mon entourage m’a même demandé pourquoi je me marrais tout seul devant l’écran :wink:

Et puis d’abord : flblblblblll :110

[quote=“MisterFreez”]J’ai pas zyeuté le code de dwm depuis un bail, mais je suis persuadé qu’il est possible de se coder une gestion dynamique des tabs.[/quote]Sans aller jusqu’à coder un truc complexe, n’afficher que les tags occupés et/ou actifs fait l’affaire, non ?
En gros, même si ta liste de tag contient 9 items en dur, un démarrage sans applications supplémentaires lancées affiche uniquement le tag 1 puis la barre se peuple et se dépeuple selon ton activité.

Un puriste y trouvera sûrement à redire mais moi ça me suffit.

Voilà le mien qui ne fonctionne pas…

[code]static const char *tags[] = { “desk”, “web”, “term”, “graph” };

static const Rule rules[] = {
/* class instance title tags mask isfloating monitor */
{ “Gimp”, NULL, NULL, “graph”, True, -1 },
{ “tilda”, NULL, NULL, “term”, True, -1 },
{ “chromium-browser”, NULL, NULL, “web”, False, -1 },
{ “vlc”, NULL, NULL, “desk”, False, -1 },
{ “pino”, NULL, NULL, “web”, True, -1 },
};
[/code]

Ci dessous le code d’erreur que j’obtiens

In file included from dwm.c:279:0: config.h:5:1: error: stray ‘\303’ in program config.h:5:1: error: stray ‘\240’ in program config.h:5:1: error: stray ‘\303’ in program config.h:5:1: error: stray ‘\240’ in program config.h:21:2: warning: initialization makes integer from pointer without a cast config.h:22:2: warning: initialization makes integer from pointer without a cast config.h:23:2: warning: initialization makes integer from pointer without a cast config.h:24:2: warning: initialization makes integer from pointer without a cast config.h:25:2: warning: initialization makes integer from pointer without a cast make[1]: *** [dwm.o] Erreur 1 make[1]: quittant le répertoire « /home/*****/paquet/dwm-5.8.2 » dh_auto_build: make -j1 returned exit code 2 make: *** [build] Erreur 2

En fait je cherche à faire une config statique, j’ai pris un raccourci en parlant de wmii, mais je voudrais plutôt que à l’ouverture d’une session X, un script me lance différent programme mais chacun dans son étiquette.

Ce que tu veux se fait très bien, rassures-toi.
Même si tu change le nom des tags, en mémoire, ils sont enregistrés toujours de la même façon.
Donc il te faudrait plutot ça :

[code]static const char *tags[] = { “desk”, “web”, “term”, “graph” };

static const Rule rules[] = {
/* class instance title tags mask isfloating monitor */
{ “Gimp”, NULL, NULL, 1 << 3, True, -1 },
{ “tilda”, NULL, NULL, 1 << 2, True, -1 },
{ “chromium-browser”, NULL, NULL, “web”, False, -1 },
{ “vlc”, NULL, NULL, 1 << 0, False, -1 },
{ “pino”, NULL, NULL, 1 << 1, True, -1 },
};[/code]

[quote=“eol”]Sans aller jusqu’à coder un truc complexe, n’afficher que les tags occupés et/ou actifs fait l’affaire, non ?
En gros, même si ta liste de tag contient 9 items en dur, un démarrage sans applications supplémentaires lancées affiche uniquement le tag 1 puis la barre se peuple et se dépeuple selon ton activité.

Un puriste y trouvera sûrement à redire mais moi ça me suffit.[/quote]

Bon finalement, comme d’habitude quelqu’un a déjà fait le travail, il s’agit d’Hiltjo Posthuma :
codemadness.nl/blog/2010/08/ … iguration/
sa version de dwm contient le code nécessaire à cette fonctionnalité :
dans dwm.c, ajouter à la suite des #define#define ISTAGVISIBLE(M, OCC, I) (OCC & 1 << I || M->tagset[M->seltags] & 1 << I)
et dans la fonction drawbar, remplacer : dc.w = TEXTW(tags[i]); col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm; drawtext(tags[i], 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; par if (ISTAGVISIBLE(m, occ, i)) { dc.w = TEXTW(tags[i]); col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm; drawtext(tags[i], 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; } reconstruire puis relancer et profiter …

[quote=“eol”][quote=“eol”]Sans aller jusqu’à coder un truc complexe, n’afficher que les tags occupés et/ou actifs fait l’affaire, non ?
En gros, même si ta liste de tag contient 9 items en dur, un démarrage sans applications supplémentaires lancées affiche uniquement le tag 1 puis la barre se peuple et se dépeuple selon ton activité.

Un puriste y trouvera sûrement à redire mais moi ça me suffit.[/quote]

Bon finalement, comme d’habitude quelqu’un a déjà fait le travail, il s’agit d’Hiltjo Posthuma :
codemadness.nl/blog/2010/08/ … iguration/
sa version de dwm contient le code nécessaire à cette fonctionnalité :
dans dwm.c, ajouter à la suite des #define#define ISTAGVISIBLE(M, OCC, I) (OCC & 1 << I || M->tagset[M->seltags] & 1 << I)
et dans la fonction drawbar, remplacer : dc.w = TEXTW(tags[i]); col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm; drawtext(tags[i], 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; par if (ISTAGVISIBLE(m, occ, i)) { dc.w = TEXTW(tags[i]); col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm; drawtext(tags[i], 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; } reconstruire puis relancer et profiter …[/quote]

Mouarf c’est puissant ce truc!!! :041 exactement ce qu’il me fallait.

Merci à thuban,ta réponse m’a poussé à revérifier le fichier et j’ai repris une copie vierge des sources et ça à marché, c’est carrément plus simple de naviguer entre 4 étiquettes personnalisées plutôt que 9 anonymes.

Dwm c’est puissant mais fragile, il y avait une virgule de trop dans mon config.h et ça fait trois jours que je suis entrain de chercher pourquoi ma version fonctionne pas et celle d’origine oui…

Merci à vous

La modification que tu proposes eol, cela permet d’afficher uniquement les tags utilisés c’est bien cela?
n’empêche, il l’a bine amélioré son dwm le bonhomme!

[quote=“yanos”]Dwm c’est puissant mais fragile, il y avait une virgule de trop dans mon config.h et ça fait trois jours que je suis entrain de chercher pourquoi ma version fonctionne pas et celle d’origine oui…[/quote]Ça, c’est pas spécifique à dwm, une virgule en trop dans n’importe quel fichier de c met le bazar.

[quote=“thuban”]La modification que tu proposes eol, cela permet d’afficher uniquement les tags utilisés c’est bien cela?[/quote]C’est bien ça, tous les tags occupés plus les actifs.