Pense-bête avec dmenu

Bonjour!
Si cela en intérèsse, je poste ici un script permettant de se faire des rappels, avec dmenu. Le principe est simple, ce que vous écrivez, suivi de entrée, est rajouté à la liste des choses à faire. Si une tache est terminée, il vous suffit de la valider avec entrée, et elle sera supprimée.

[code]#!/bin/sh
#Script pour gérer les différentes tâches à faire

avec simplement dmenu.

#dmenu est un tout petit utilitaire, présent dans le paquet dwm-tools.
#La denière version inclut actuellement l’option -l, c’est à dire un dmenu vertical.

Je vous propose de télécharger cette archive :

#http://dl.suckless.org/tools/dmenu-4.1.1.tar.gz
#Décompressez-là, puis make et make install, et c’est fini.

##On écrit ici les couleurs utilisées pour dmenu
SB="#D4D4D4"
SF="#1C1918"
NB="#251C1A"
NF="#D4D4D4"
##Cette varialbe définit la hauteur de dmenu :
HEIGHT=10
##Le fichier utilisé pour enregistrer nos pense-bêtes
FILE=~/.todo
PROMPT=“Ajouter/Supprimer une tâche”

#Et c’est parti!
ACTION="cat $FILE | dmenu -l ‘$HEIGHT’ -fn ‘fixed’ -nb ‘$NB’ -nf ‘$NF’ -sb ‘$SB’ -sf ‘$SF’ -p ‘$PROMPT:’ "
CMD=$(eval $ACTION)
while [ -n “$CMD” ]; do
grep -q “^$CMD” $FILE
if [ $? = 0 ]; then
grep -v “^$CMD” $FILE > /tmp/todo
mv /tmp/todo $FILE
else
echo “$CMD” >> $FILE
fi

CMD=$(eval $ACTION)

done
exit

[/code]

Je n’ai pas la possibilité de tester, ça ne marche pas ça ?

Tu sais que tu peut faire ça aussi ?

CMDPROMPT="dmenu -l 6 -fn 'fixed' -nb $NB -nf $NF -sb $SB -sf $SF -p \"$PROMPT:\" < $FILE" ACTION=$(eval $CMDPROMPT)

Quand tu fait ça :

Tu cherche à faire quoi exactement ?
Je te dis ça parce qu’il me semble qu’il suffirait de faire ça :

ou un truc du genre.

Tu peut aussi écrire ça :

J’imagine que tu m’attendais au tournant :slight_smile:

[quote=“MisterFreez”]Je n’ai pas la possibilité de tester, ça ne marche pas ça ?

[/quote]
Cela peut fontionner, mais ça prends mal en charge le retour à la ligne.

Je ne savais pas, merci :slight_smile:

Je vérifie si la ligne sélectionnée se trouve dans le fichier. Le head -n1 est là pour ne garder qu’une seule ligne, au cas où on aurait écrit plusieurs fois la même chose.

[quote=“MisterFreez”]
J’imagine que tu m’attendais au tournant :)[/quote]
En effet :wink:

[quote=“thuban”][quote=“MisterFreez”]
Quand tu fait ça :

Tu cherche à faire quoi exactement ?
[/quote]
Je vérifie si la ligne sélectionnée se trouve dans le fichier. Le head -n1 est là pour ne garder qu’une seule ligne, au cas où on aurait écrit plusieurs fois la même chose.[/quote]
grep -q est meilleur alors. Il permet d’éviter de lancer head, de faire la comparaison et en plus il s’arrête à la première occurrence trouvée.

Je te conseil de mettre “^$ACTION$” à la place de “$ACTION”, ça permet d’éviter les collision quand tu as les actions “ciné” et “aller sur allociné” par exemple.

Salut,

Bien sûr Thuban, nous comptons sur toi pour maintenir à jour ton script et le basculer dans T&A :slightly_smiling:

[quote=“ggoodluck47”]Salut,

Bien sûr Thuban, nous comptons sur toi pour maintenir à jour ton script et le basculer dans T&A :slightly_smiling:[/quote]
Ce sera avec plaisir :slight_smile:
Pour le basculer vers T&A, il faudra demander à un modo dans ce cas.

Je rencontre des difficultés avec le eval. Enfin ça ne marche pas aussi bien, le script s’arrête trop vite. Bon, faut peut-être que je recherche un peu mieux.

Merci pour les précisions avec grep -q, je ne connaissais vraiment pas.

Problème :
la boucle while bloque. C’est le changement sur grep qui coince.

[code]#!/bin/sh
#Script pour gérer les différentes tâches à faire
SB="#D4D4D4"
SF="#1C1918"
NB="#251C1A"
NF="#D4D4D4"
FILE=~/.todo
EDITOR="urxvt -e vim"
PROMPT="Ajouter/Supprimer une tâche"
ACTION=$(cat $FILE | dmenu -l 6 -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -p “$PROMPT:”)
[ -z “$ACTION” ]
while [ $? = 1 ]; do
if [ $(grep -q “^$ACTION”) ] ; then
grep -v “$ACTION” $FILE > /tmp/todo
mv /tmp/todo $FILE
else
echo “$ACTION” >> $FILE
fi

ACTION=$(cat $FILE | dmenu -l 6 -fn 'fixed' -nb $NB -nf $NF -sb $SB -sf $SF -p "$PROMPT:")
[ -z "$ACTION" ]

done
exit
[/code]

Avec la méthode du ACTION=$(eval $CMDPROMPT), les options spécifiées à dmenu par des variables ne sont pas prises en compte.
En fait, il semble que seul le premier argument est pris en compte.
Pourquoi ça ne marche jamais chez moi? :’(

Bon, voilà où j’en suis : [code]#!/bin/sh
#Script pour gérer les différentes tâches à faire

avec simplement dmenu

SB="#D4D4D4"
SF="#1C1918"
NB="#251C1A"
NF="#D4D4D4"
FILE=~/.todo
EDITOR="urxvt -e vim"
PROMPT="Ajouter/Supprimer une tâche"
ACTION=$(cat $FILE | dmenu -l 6 -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -p “$PROMPT:”)

while [ -n “$ACTION” ]; do
grep -q “^$ACTION” $FILE
if [ $? = 0 ]; then
grep -v “^$ACTION” $FILE > /tmp/todo
mv /tmp/todo $FILE
else
echo “$ACTION” >> $FILE
fi

ACTION=$(cat $FILE | dmenu -l 6 -fn 'fixed' -nb $NB -nf $NF -sb $SB -sf $SF -p "$PROMPT:")

done
exit
[/code]
Est-ce quelque chose dans ce goût là que tu sous-entendais Misterfreez?

if $(grep -q "^$ACTION" $FILE); then grep -v "^$ACTION" $FILE > /tmp/todo mv /tmp/todo $FILE else echo "$ACTION" >> $FILE fi

Pour le eval regarde comment c’est fait dans wmii je m’en souviens plus exactement (regarde la variable $WMIIMENU ou un truc du genre).

Salut,

[quote]gerard@debian:~$ pense_bete
usage: dmenu [-i] [-b] [-fn ] [-nb ] [-nf ]
[-p ] [-sb ] [-sf ] [-v]
gerard@debian:~$ [/quote]

Et un pauvre ignorant, il fait quoi ?

Il faut installer dwm et dmenu

Si tu lances le script alors que tu utilises KDE/Kwin (ou un autre environnement de bureaux GNOME/Metacity), cela ne pourra jamais fonctionner!

Plus d’infos (en anglais), voir ici => http://tools.suckless.org/dmenu/

Re,

Alors il faut au moins le spécifier dans l’en-tête ou mieux encore gérer le cas.

Si vous avez pu m’avoir qu’en seras-t-il d’un débutant. :slightly_smiling:

C’est vrai, il faudrait mettre une sorte de bannière dans l’en tête du topic, en guise d’introduction :006

[quote=“M3t4linux”]Il faut installer dwm et dmenu

Si tu lances le script alors que tu utilises KDE/Kwin (ou un autre environnement de bureaux GNOME/Metacity), cela ne pourra jamais fonctionner!

Plus d’infos (en anglais), voir ici => http://tools.suckless.org/dmenu/[/quote]
:033 :033 :033

Et en quoi ça gênerais ?

Il utilise une version modifiée de dmenu qui permet d’avoir un dmenu vertical du coup l’option -l (qui doit j’imagine définir le nombre de ligne) ne fonctionne pas. Tu enlève cette option et ça marche parfaitement.

Re,

Et pourtant, le résultat est un copié-collé de ce que j’obtiens :slightly_smiling:

Bien, je vais modifier le début du script alors.
Sachez qu’il faut dmenu. dmenu est un tout petit utilitaire, présent dans le paquet dwm-tools. La version sid inclut actuellement l’option -l, c’est à dire un dmenu vertical.
Sinon, je vous propose de télécharger cette archive :
dl.suckless.org/tools/dmenu-4.1.1.tar.gz
Décompressez-là, puis make et make install, et c’est fini. Vous ne risquez pas de compromettre la stabilité de votre système, car ce sera installé dans /usr/local/bin (éxécutables qui seront utilisés en priorité avant ceux éventuellement installés dans /usr/bin, donc pas de soucis si vous avez dwm-tools moins récent d’installé.)
Allez, je mets le script à jour!

Et voilà, c’est mis à jour.
dwm n’est pas indispensable contrairement à ce que vous pouvez penser, juste dmenu.
Voilà, n’hésitez pas à parler des problèmes éventuellements rencontrés :slight_smile: .

Tu le prends où ton dmenu toi ?
Parce que

% apt-cache policy dwm-tools [16:17:12] dwm-tools: Installé : 31-1 Candidat : 31-1 Table de version : *** 31-1 0 500 http://ftp.fr.debian.org squeeze/main Packages 500 http://ftp.fr.debian.org sid/main Packages 100 /var/lib/dpkg/status
Debian package dis aussi que c’est la version 31-1 en sid : packages.debian.org/search?searc … ywords=dwm

et si je tente il me gueule dessus :

:~% dmenu -v dmenu-4.0, © 2006-2008 dmenu engineers, see LICENSE for details :~ [1]% dmenu -h usage: dmenu [-i] [-b] [-fn <font>] [-nb <color>] [-nf <color>] [-p <prompt>] [-sb <color>] [-sf <color>] [-v]

Tu l’as vu où dans sid ?

Rhoooo, l’idiot, c’est dwm qui a été mis à jour en sid, pas dmenu :075
Désolé, il faut compiler le petit dmenu…