Dwm - c'est parti je me lance

Je profite du sujet pour vous demander si dans dwm, il y apossibilité de créer de nouveaux tags? par exemple, envoyer la fenetre iceweasel dans le nouveau tag “internet” , comme peut le faire wmii?

Bonjour,
La page qui en parle :http://lists.suckless.org/dev/0910/2148.html
Le patch :http://lists.suckless.org/dev/att-2148/dwm-5.7.2-nametag.diff
Pas essayé par contre.
Amuse-toi bien ! :wink:

merci \o/
edit : il est sympa ce patch. Il permet juste de renommer un tag qui existe déja, pas d’en rajouter, mais bon ça me suffit.

tant que j’y suis (vous dites si j’abuse hein!), vous n’auriez pas une autre façon d’afficher des infos dans la barre de status de dwm? Parce que avec xsetroot, le souci, c’est que mes tty lagguent à chaque fois qu’il est exécuté (toutes les x secondes)

Regarde si c’est mieux avec dzen2, tu peux lui donner les instructions pour choisir ses dimensions, son placement, la couleur des différentes infos, l’affichage peux être permanent
ou bien à la durée que tu spécifies et revenir à interval régulier avec une boucle (comme dans la barre de status.

Peut-être que c’est la faute de ton script si tu arrive même à faire lagguer les tty. :smt003

ben, mon script demande plusieurs petites choses (comme vous pouvez le voir plus haut). Cependant, ce n’est pas non plus énorme, et puis en fait, je ne peux pas taper de caractère dans le tty à chaque fois que le xsetroot se renouvelle…ennuyeux pour les mots de passe entre autres…

Alors là tu m’intrigues, comment intégrer dzen à dwm? car il sera toujours en dessous des autres fenetres… Ne me dis pas que l’on peut remplacer la barre de status de dwm par dzen tout de même?

bon, j’ai amélioré un peu la chose, maintenant, j’ai au démarrage 2 scripts qui tournent en arrière plan : un pour récupérer le nombre de mails sur mes boites et le met dans un fichier, et un autre qui rassemble différentes infos,donc le nombre de mails, la chage cpu, l’heure…Etc, qui sont envoyés dans un autre fichier.
Enfin, la seule commande passée à xsetroot est un “cat /monfichier bilan” , et voila, ça ne laggue plus…
enfin ça en fait des chemins détournés :slightly_smiling:

Peux tu mettre tes scripts stp??

Pour moi, je suis arrivé à mettre une image en fond d’écran avec la commande “feh” ajouté à mon script pour personnaliser le menu

Prochaine étape : mettre un fond d’écran dynamique…

Bon, je commence petit mais il faut bien commencer par le début :mrgreen:

je posterais mes scripts dès que possible. Pour l’instant, mon prtable refuse de s’allumer (enfin l’écran… :confused: ).
Qu’entends-tu par fond d’écran dynamique? qui change aléatoirement, ou qui bouge vraiment? J’avais vu qu’il était possible d’utiliser les écrans de veille en “fond d’écran aussi”. C’est chouette d’avoir la matrice en fond d’écran :slightly_smiling: .
Mieux vaut doucement mais sûrement.

[quote=“thuban”]Alors là tu m’intrigues, comment intégrer dzen à dwm? car il sera toujours en dessous des autres fenetres… [/quote]Non, dzen2 sera toujours au dessus des autres fenêtres[quote=“thuban”]Ne me dis pas que l’on peut remplacer la barre de status de dwm par dzen tout de même?[/quote]Ça doit être possible mais je n’ai pas essayé, par contre c’est possible de lui donner la même géométrie
et de la faire apparaître uniquement en cas de besoin,
par exemple ma notification de mail n’apparaît que quand j’ai des nouveaux mails,
et ne recouvre que la partie à droite de la barre de status de dwm
(celle où sont affichées l’heure et la date habituellement) avec le nombre de nouveaux mails,
si j’envoie ma souris dessus, ça fait apparaître de nouvelles lignes en dessous
par dessus les fenêtres existantes avec l’expéditeur et le sujet de mes mails d’affichés.

Donc pour résumer, remplacer la barre de statut de dwm par dzen2 doit être possible,
il me semble avoir déjà lu des choses dans le genre sur la mailing liste,
par contre tu t’attaques vraiment à la base de dwm avec ce genre de projet,
mes félicitations si tu le fais avec succès!

@ eol : J’avais vu un post sur le forum de arch, d’un gars qui avait édité les sources de dwm pour ajouter une marge, et ainsi avoir un espace libre pour conky/dzen… Par contre c’était sur une ancienne version de dwm, donc ça ne marche plus guère. Et je n’en suis qu’à mes débuts en C pour comprendre vraiment tout ça.
Qui sait, peut-être un jour? :smt101
Puis-je me permettre de te demander tes scripts et config de dzen s’il te plaît? C’est surtout la partie “déroulante” et l’affichage des sujets des mails qui m’intéresse beaucoup! C’est uniquement dans le but d’en savoir un peu plus. Tu utilises fetchmail?

@ M3t4linux :
Voici mes scripts comme promis. Euh, c’est pas forcément joli jolie, je ne suis pas un as pour ce genre de choses. Si quelqu’un a envie de corriger, faut pas hésiter! :slightly_smiling:
Voici le script général,je l’ai appelé dstatus.sh . Il regroupe toutes les infos, et les affiche via xsetroot. En fait, c’est ce script que je lance juste avant dwm :

EDIT : j’ai changé les scripts, je reposte les nouveaux

[code]#!/bin/sh
#script pour avoir une barre de status dans dwm/wmii
#On vérifie que le script ne tourne pas déjà
_ps=ps aux
_pid=echo "${_ps}" | grep $0 | tr -s [:space:] | cut -d' ' -f2
_lines=echo "${_pid}" | wc -w

if [ ${_lines} -gt 1 ]; then
_pid=echo ${_pid} | cut -d' ' -f1
echo "Un script en trop, on le kill (pid: ${_pid})"
kill ${_pid}
fi

T_=3 ###temps d’actualisation

while true ### on supprime le fichier contenant les infos s’il existe déja
if [ -e /tmp/dstatus ]; then
rm /tmp/dstatus
fi
do

##########Partie mpd########################
percent() {
NUM=$(echo “scale=2;(($1/$2)*100)” | bc)

if [ “$(echo $NUM | grep -Eo ‘^.[0-9]+’)” != “” ]; then
NUM=$(echo “$NUM” | grep -Eo ‘^[0-9]+’)
else
NUM=0
fi
}

Usage : percentbar NUM

percentbar() {
echo -n "|"
i=1 ; j=1
while [ “$i” -le “$(($1/3))” ]; do
echo -n "#"
i=$(($i+1))
done
while [ “$j” -le “$(((100-$1)/3))” ]; do
echo -n "-"
j=$(($j+1))
done
echo “|”
}

if [ “$(mpc | grep ‘playing’)” != “” ]; then
MPDSONG=$(mpc | grep -v ‘playing’ | grep -v ‘volume’)
MPDRATIO=$(mpc | grep ‘playing’ | grep -Eo ‘[0-9]+:[0-9]+/[0-9]+:[0-9]+’)
MPDUSED=$(echo $MPDRATIO | grep -Eo ‘[0-9]+:[0-9]+/’ | grep -Eo ‘[0-9]+:[0-9]+’ | sed -e ‘s/:/./’)
MPDTOTAL=$(echo $MPDRATIO | grep -Eo ‘/[0-9]+:[0-9]+’ | grep -Eo ‘[0-9]+:[0-9]+’ | sed -e ‘s/:/./’)
percent $MPDUSED $MPDTOTAL ; MPD=$NUM
MPDBAR=$(percentbar $MPD)
else
MPDSONG="“
MPDBAR=”"
fi
#####Partie mails#######
MAILS=$(cat /tmp/mails)
####Partie batterie+espace libre+CPU+heure####
BATTERIE=$(acpi -b | grep -Eo ‘[0-9]+%’)
HOME=$(df -h /home | awk ‘{print $5}’ | grep -Eo ‘[0-9]+%’)
ROOT=$(df -h / | awk ‘{print $5}’ | grep -Eo ‘[0-9]+%’)
UPTIME=$(uptime | sed ‘s/.*://; s/,//g’)
DATE=$(/bin/date +%d/%m/%Y’ '%k:%M)
#####Partie pour le volume sonore######
VOL=$(amixer get Master | grep -Eo ‘[0-9]+%’)
####on affiche####
STATUS=$(echo -n $MPDSONG $MPDBAR ‘|’ ‘/home:’$HOME ‘|’ ‘/:’$ROOT ‘|’ $UPTIME ‘|’ ‘Bat:’$BATTERIE ‘|’ $MAILS ‘|’‘Vol:’ $VOL ‘|’ $DATE )
xsetroot -name "$STATUS"
sleep $T_
done

exit 0

[/code]
La partie concernant mpd peut être arrangée.
Enfin, il y a en plus le script vérifiant si j’ai des mails, et qui retourne le résultat dans /tmp/mails :

[code]#!/bin/sh
#script pour vérifier mes mails sur les 2 boites.
#Le fichier de configuration est ~/.fetchmail/fetchmailrc

#On vérifie que le script ne tourne pas déjà
_PS=ps aux
_PID=echo "${_PS}" | grep $0 | tr -s [:space:] | cut -d' ' -f2
_LINES=echo "${_PID}" | wc -w

if [ ${_LINES} -gt 1 ]; then
_PID=echo ${_PID} | cut -d' ' -f1
echo "Un script en trop, on le kill (pid: ${_PID})"
kill ${_PID}
fi

while true; do
TEST=$(ping -c1 www.google.fr | grep received | awk ‘{print $5}’)

if [ -e /tmp/mails ]; then
	rm /tmp/mails
fi

if [ "$TEST" = "received," ]; then
	RESULTGMAIL=$(fetchmail -c -p IMAP imap.gmail.com --port 993 --ssl --username xavier.cartron -f .fetchmail/fetchmailrc | tail -n 1)
	RESULTFAC=$(fetchmail -c -p IMAP imaps.etu.univ-nantes.fr --port 993 --ssl --username e072767U -f .fetchmail/fetchmailrc | tail -n 1)
		TOTGMAIL="$(echo $RESULTGMAIL | awk '{print $1}')"
		LUGMAIL="$(echo $RESULTGMAIL | awk '{print $3}' | sed 's/(//')"
		NGMAIL=$(($TOTGMAIL - $LUGMAIL))
		TOTFAC="$(echo $RESULTFAC | awk '{print $1}')"
		LUFAC="$(echo $RESULTFAC |  awk '{print $3}' | sed 's/(//')"
		NFAC=$(($TOTFAC - $LUFAC))


	echo -n " | Gmail:$NGMAIL-" >> /tmp/mails
	echo -n "Fac:$NFAC | " >> /tmp/mails

else
	echo " | Mails:??? | " > /tmp/mails

fi

sleep 300
done
exit

[/code]

Le script pour les mails fonctionne avec fetchmail en mode démon qui place les nouveaux mails dans ~/Maildir/new [code] #!/bin/sh
MAILDIR=$HOME/Maildir/new
OPTIONS="-ta r -sa r -p 10 -l 2 -e onstart=collapse;key_Down=scrolldown;key_Up=scrollup;
button5=scrolldown;button4=scrollup;key_Page_Down=scrolldown:2;key_Page_Up=scrollup:2;
key_Escape=exit;button3=exit;entertitle=grabkeys,uncollapse,scrollhome;enterslave=grabkeys;
leaveslave=collapse,ungrabkeys"

while true
do
MAILS=ls -1 $MAILDIR |wc -l
if [ “$MAILS” -eq 0 ]; then
sleep 60; else
{echo “$MAILS nouveau(x) message(s)”;
for i in $HOME/Maildir/new/*
do
cat $i |grep "Subject: " |cut -c 10- ;
cat $i |grep "From: " |cut -c 7-
done;} |dzen2 -fn ‘Medium-8’ $OPTIONS
fi
sleep 10
done[/code]
Pour avoir une bonne explications de OPTIONS, une fois dzen compilé tu lances $ ./helpdans le répertoire des sources et là, la magie de dzen te permets de comtempler une jolie doc colorée dans dzen justement.
Scrolle jusqu’à “Supported events” et “Supported actions” et tout s’éclairera. :slightly_smiling:

EDIT : microchangements sur le script
Dernier édit, les changements précédents étaient du bashisme, je les ai finalement inversés

[quote=“thuban”]@ eol : J’avais vu un post sur le forum de arch, d’un gars qui avait édité les sources de dwm pour ajouter une marge, et ainsi avoir un espace libre pour conky/dzen… Par contre c’était sur une ancienne version de dwm, donc ça ne marche plus guère. Et je n’en suis qu’à mes débuts en C pour comprendre vraiment tout ça.
Qui sait, peut-être un jour? :smt101 [/quote]Sinon une autre possibillté est d’avoir dzen qui ne s’affiche uniquement en cas de besoin (quand il requiert de l’attention, à toi de le déterminer dans tes scripts), auquel cas ce n’est pas un problème si les fenêtres sont recouvertes momentanément, surtout si tu places le master à droite sur la bar de dwm et que utilises collapse et uncollapse dans tes options pour dzen.

edit : sur ce post du forum d’Arch http://bbs.archlinux.org/viewtopic.php?pid=704250#p704250, fin janvier, quelqu’un a dit avoir patché dwm pour qu’il ait deux barres de status, séparément manoeuvrable (montrable ou non via raccourcis clavier) et qu’il posterait son patch si il y a de la demande. Donc si tu veux en savoir plus il faut poster là-bas afin d’augmenter la demande. :slightly_smiling:

Merci beaucoup! je vais sans aucun doute configurer ça sur mon nouveau futur pc. Mais, dzen est dans les dépots il me semble désormais.

Oui, dzen2 est dans les dépots, mais pour les petits gadgets comme ça j’aime bien avoir la dernière version du développeur et la compiler comme il me plait.

Sinon pour le patch double barre pour dwm, plus besoin de demander.
Il l’a envoyé peu après que je l’ai demandé.
Je ne l’ai pas encore essayé mais ça à l’air intéressant.

edit : bon finalement j’ai eu le temps d’essayer le patch, c’est nickel, ça double la possibilité d’affichage de statut pour dwm. :smiley:

[quote=“thuban”]Qu’entends-tu par fond d’écran dynamique? qui change aléatoirement, ou qui bouge vraiment? J’avais vu qu’il était possible d’utiliser les écrans de veille en “fond d’écran aussi”. C’est chouette d’avoir la matrice en fond d’écran :slightly_smiling: .
Mieux vaut doucement mais sûrement.[/quote]

Oui, j’entends par là un fond d’écran qui change toutes le X secondes, j’ai trouvé cette commande placé dans un script :

Et le script de lancement complet :

while true do xsetroot -name "`date` `uptime | sed 's/.*,//'`" sleep 1 done & qiv -xtsrud 600 /home/m3t4linux/Images/Background/ & exec dwm

Le problème est que le fond d’écran ne change pas au bout de 600 secondes (10 minutes) et à l’ouverture de ma session, j’ai un écran noir avec un pointeur de souris ovale; il me suffit alors de cliquer dedans pour le faire partir…

Soit qiv n’est pas approprié (lancé en commande dans un shell, ça fonctionne) soit je l’emploi mal…

Je ne pourrais pas t’aider avec qiv, je ne le connais pas. En fait j’utilise ce script, avec feh, pour avoir un fond d’écran aléatoire :

[code]#!/bin/bash -u

#Description: Ce script requiert feh sur votre machine, il changera votre fond d’écran openbox (ou autre) automatiquement toutes les x seondes
#Author: Millien Marc

#On vérifie l’existence du répertoire Images/Fonds
if [ -d ${HOME}/Images/Wallpapers ] ; then
cd ${HOME}/Images/Wallpapers/
#On compte le nombre de fichiers
_fics=ls | grep -E "*.(png|jpg)" | wc -l

#S’il y a plus d’un fichier c’est parti
if [ ${_fics} -gt 0 ] ; then

#On vérifie que le script ne tourne pas déjà
_ps=ps aux
_pid=echo "${_ps}" | grep $0 | tr -s [:space:] | cut -d' ' -f2
_lines=echo "${_pid}" | wc -w

if [ ${_lines} -gt 1 ]; then
_pid=echo ${_pid} | cut -d' ' -f1
echo "Un script en trop, on le kill (pid: ${_pid})"
kill ${_pid}
fi

#Boucle de fonctionnement
while true; do

#On sélectionne un fichier au hasard
_nombre=$RANDOM
_nombre=`expr ${_nombre} % ${_fics}`
if [ ${_nombre} -eq 0 ] ; then
 _nombre=1
fi
_image=`ls | grep -E "*.(png|jpg)" | head --lines=${_nombre} | tail -1`

#On affiche le fichier
feh --bg-scale "${HOME}/Images/Wallpapers/${_image}"
sleep 1800
_fics=`ls | grep -E "*.(png|jpg)" | wc -l`

done
else
echo "Veuillez placer des fichiers images dans le répertoire ${HOME}/Images/Wallpapers !"
fi
else
echo "Veuillez créer le répertoire ${HOME}/Images/Wallpapers et y placer vos fonds d’écran !"
fi

[/code]

Quelques remarques de forme :

  • les backquotes sont moins lisibles et plus sujettes à erreur que $()
  • attention aux motifs pas assez protégés (ex: grep ".machin" risque d’être substitué si il existe des fichiers en .machin dans le répertoire courant, il faut donc protéger ses expressions rationelles plus durement grep '.machin’)
  • pour les gestion de cas d’erreur, c’est plus lisible de faire

if erreur; then traitement erreur fi traitement normal
que

if not erreur; then traitement normal else traitement erreur fi
En effet dans le cas de if imbriqué on est obligé de remonter dans le code pour retrouver à quel traitement on a à faire. De plus cela réduit le niveau d’imbrication général du code.

il faudrait que je réécrive le script en enier. En fait je l’avait trouvé il y a pas mal de temps sur le net, et puis je l’ai bidouillé depuis… :confused:

Dites, vous avez une idée de comment il a réussit à faire ça :
flickr.com/photos/jasonwryan/4255557669/

Petite confirmation : Tmux fait le même boulot que dvtm??

Je le testerai dans ce cas puisque dvtm ne fonctionne pas sur ma sid… :neutral_face: