Lanceurs avec ls et dmenu

Je n’ai pas de fichiers dont les noms contiennent des espaces donc je ne peux pas te dire.
Pour renommer des fichiers en masse en remplaçant les espaces par des underscores, tu peux essayer ceci :$ rename 's/\ /_/g' *dans le répertoire contenant les fichiers à renommer.

Ça m’embête quand même de renommer tous mes fichiers, si je pouvais trouver mieux quand même ça m’arrangerait. J’avais pensé utiliser sed dans mon script, afin de remplacer les espaces " ", par des "\ ", mais sed ne comprend pas cette ligne sed -e ‘s/\ /_/g’ , ce qui est sans doute normal. Je n’ai pas d’autres solutions…

Sinon, j’ai fait un script ce Week end pour dmenu. Bon, ça va paraître du bidouillage étant donné mes connaissances en bash limitées.
En fait, il fait la même chose que ce que tu as fait précédemment, mais il se présente sous 1 seul script. En fait, ça m’agacait de devoir spécifier à chaque reprise avec quoi je voulais ouvrir un fichier. En effet, une vidéo, je l’ouvre toujours avec mplayer par exemple. Donc j’ai voulu automatiser la chose.
Pour les cas où je peux vouloir faire différentes actions sur un fichier, j’ai fait en sorte de pouvoir préciser laquelle. Par exemple, pour une image, j’ai le choix, après avoir sélectionné le fichier, de l’ouvrir avec gimp, feh, ou faire un diaporama avec feh. J’aurais pu faire un prompt et écrire le programme simplement à la main ceci dit.
Enfin bref, sinon, rien de très nouveau, il permet de ser déplacer dans l’arborescence, d’ouvrir le dossier courant, un terminal dans le dossier courant…
Bref, je voulais te dire que si tu en as le temps, et l’envie, n’hésite pas à corriger toutes mes fautes dans le script, tout ce qui ne sert à rien, me dire que j’aurais pu faire mieux, etc etc. Toutes les remarques seront les bienvenues (je veux apprendre!)
voila, c’est tout pour aujourd’hui :

#!/bin/sh
#dmlaunch
# Lanceur pour plusieurs types de fichier avec dmenu
# thuban@singularity.fr


#Editer ou ajouter les extensions selon l'utilisation désirée dans la fonction action
#De même, ajouter les actions à faire dans les répertoires si désiré dans la variable DOINDIR

#\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\O/\o/\o/\o/\o/\o/\o/\o/\o/\o/\Q/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/#



#liste ce qui se trouve dans le répoertoire courant, et l'envoie dans dmenu

liste_ () {
LISTE=`ls -d .* */ *.* -1 --sort=extension | dmenu -fn 'fixed' -b -nb '#D4D4D4' -nf '#161616' -sb '#261D1B' -sf '#FFFFFF' -p "$PWD" -i`
echo "$LISTE"
}
#on édite ou on regarde l'image
image_ () {
LOGIMAGE="diaporama
Fond_d_ecran
feh
gimp" 
ACTION=$(echo "$LOGIMAGE" | dmenu -fn 'fixed' -b -nb '#D4D4D4' -nf '#161616' -sb '#261D1B' -sf '#FFFFFF' -p " image :$PWD" -i)
echo "$ACTION"
	case $ACTION in
		feh | gimp ) $ACTION $1 && exit 0 ;;
		diaporama ) feh * && exit 0 ;;
		Fond_d_ecran ) feh --bg-scale $1 && exit 0 ;;
	esac
$ACTION $1
}

#Differentes actions pour les html
HTML_EDITOR="geany
iceweasel"
# Cette fonction lance un programme pour ouvrir le fichier selon son extension
action_ () {
	case $1 in
		*/ | .. ) cd $1 && CHREP=1 
		;;
	*.mov | *.avi | *.wma | *.mpg | *.mkv | *.flv | *.wmv | *.mp4 | *.AVI | *.ogm | *.ogg ) mplayer $1 && exit 0
		;;
	*.odt | *.doc | *.xls | *.ods | *.ppt | *.opt ) soffice $1 && exit 0
		;;
	*.png | *.jpg | *.JPG | *.jpeg | *.gif | *.bmp | *.tiff ) image_ $1 && exit 0
		;;
	*.gp4 | *.gp3 | *.gtp ) tuxguitar $1 && exit 0
		;;
	*.txt | *.py | *.c | *.h | *.sh ) geany $1 && exit 0
		;;
	*.html ) exec $(echo "$HTML_EDITOR" | dmenu -fn 'fixed' -b -nb '#D4D4D4' -nf '#161616' -sb '#261D1B' -sf '#FFFFFF' -p "$1 : ouvrir avec?" -i) $1
		;;
	*.ogg | *.mp3 | *.flac | *.wma | *.wav ) smplayer -add-to-playlist $1 && exit 0
		;;
	*.pdf ) evince $1 && exit 0
		;;
	* )  ACTION=$(echo "" | dmenu -fn 'fixed' -b -nb '#D4D4D4' -nf '#161616' -sb '#261D1B' -sf '#FFFFFF' -p "$1 : Que faire?" -i)
		$ACTION $1
		;;
	esac

}



#Cette variable servira à savoir si on a changé de répertoire
CHREP=0
# Liste des choses que l'on peut vouloir faire DANS le répertoire
# à séparer par des retour à la ligne, par souci de compatibilité avec dmenu
DOINDIR="thunar
urxvt
catfish"


#on liste une première fois
v=$IFS
IFS='
'
INDEX="$(liste_)"
[ -z $INDEX ]
#tant que on donne de quoi manger à action, elle tourne
while [ "$INDEX" != "" ]; do 
action_ $INDEX
INDEX="$(liste_)"
done
IFS=$v
#Si on ne veut plus utiliser action, mais lancer un autre commande dans le répertoire courant : 
if [ $CHREP != 0 ]; then
exec $(echo "$DOINDIR" | dmenu  -fn 'fixed' -b -nb '#D4D4D4' -nf '#161616' -sb '#261D1B' -sf '#FFFFFF' -p "$PWD Lancer ici:" -i)
fi



exit 0;

edit : c’est résolu pour les espaces, grâce à Misterfreeze.
edit (10/01/2010) : j’ai rajouté une entrée pour les extensions non prédéfinies. Par exemple, on veut se déplacer dans un dossier caché, on le sélectionne, puis là on nous demande ce que l’on veut faire : il ne reste plus qu’à taper la commande que l’on veut effectuer sur ce dossier, en l’occurence “cd”, et voilà, on est dedans.
Même systeme pour les fichiers cachés que l’on veut éditer, il suffit de taper le nom de l’éditeur préféré, puis entrée.

Il semblerait que le script pour mpc ne fonctionne plus. En effet, la commande mpc playlist ne renvoie que la liste des chansons, sans leur nombre… ce qui rends les choses compliquées. là je galère à essayer de compter le numéro de la chanson, mais je suis pas inspiré ce matin…
Ca marche chez toi? Enfin tu n’utilises peut-être pas sid?

edit : j’ai trouvé une solution ici, et ça marche :
mpd.wikia.com/wiki/Hack:Mpc-dmenu
. Par contre, je ne sais vraiment pas comment vu que je ne comprends pas du tout la façon dont c’est écrit… De plus, ça ne marche que avec /bin/bash, pas avec /bin/sh .
Par souci de portabilité, j’aimerais que ça marche avec /bin/sh, et il faudrait que je comprenne ce que le type fait. Si quelqu’un passe par là et veut bien m’expliquer…

[quote=“thuban”]Il semblerait que le script pour mpc ne fonctionne plus. En effet, la commande mpc playlist ne renvoie que la liste des chansons, sans leur nombre… ce qui rends les choses compliquées. là je galère à essayer de compter le numéro de la chanson, mais je suis pas inspiré ce matin…
Ca marche chez toi? Enfin tu n’utilises peut-être pas sid?[/quote]
J’ai mpc 0.17.1 (j’ai pas mis à jour dernièrement) avec lequel ça fonctionne,
je met à jour et je te redis ça.

edit : effectivement la version 0.19 de mpc ne fournit pas d’option permettant de préfixer chaque ligne de la playlist (en tout cas pas dans le man)
Ça permet d’utiliser d’autres utilitaires spécialement fait pour ça :slightly_smiling:

Je vais remplacer mon ancien script par :#!/bin/sh mpc play `mpc playlist|nl -s ' ' |dmenu -l 37 -xs |awk '{print $1}'`
qui fonctionne très bien.

Sur le système d’où j’écris /bin/sh est lié à bash, je fais un essai un le liant à dash et je poste pour en confirmer le fonctionnement.

Edit2 : Ça fonctionne tout aussi bien avec dash

Oh, super, merci pour ta vélocité! :slightly_smiling:

Je me permet de poster le script pour mpd. Je l’ai appelé dmpc.sh, mais bon…
J’ai ajouté les tests que tu avais mis dans les scripts “action”, afin que cela ne joue seulement si on a choisi une chanson.

#!/bin/sh #Ce script permet de jouer une chanson de la liste de lecture, en utilisant dmenu et mpc. NB=`mpc playlist | wc -l` # on compte le nombre de chansons while [ "$NB" = "0" ]; do # Si la playlist est vide, on la remplit mpc update $MUSDIR mpc ls | mpc add NB=`mpc playlist | wc -l` done index=`mpc playlist|nl -s ' ' |dmenu -l 52 -xs -fn 'fixed' -b -nb '#D4D4D4' -nf '#161616' -sb '#261D1B' -sf '#FFFFFF'|awk '{print $1}'` [ -z $index ] if [ $? = 1 ]; then mpc play $index fi exit 0;

Salut,

Remarque générale : N’oubliez pas de mettre en ligne 2 “A quoi sert le script” :slightly_smiling:

[quote=“eol”]Je vais remplacer mon ancien script par :#!/bin/sh mpc play `mpc playlist|nl -s ' ' |dmenu -l 37 -xs |awk '{print $1}'`
qui fonctionne très bien.[/quote]En y repensant sortir awk pour ça me semble un peu exagéré, je préfère cut :#!/bin/sh mpc play `mpc playlist |nl -s : |dmenu -l 36 -xs | cut -d : -f1`

je rajouterais l’option -i à dmenu, afin que lorsque l’on tape une recherche, il ne tienne pas compte de la casse.

dis donc, il est très patché ton dmenu :slightly_smiling:

T’as raison, je ne l’ai pas mise sur les derniers posts, mais c’est clair qu’elle est très pratique cette option

[quote=“thuban”]dis donc, il est très patché ton dmenu :slightly_smiling:[/quote]Ouais, comme c’est un élément central de ma session graphique,
il est important pour moi qu’il fonctionne comme je le souhaite. :smiley:

Si tu cherches un patch vraiment complet, tu peux jeter un oeil au wiki d’archlinux, on y trouve un patch qui donne la verticalité, plein d’options intéressantes et le support pour les polices xft.

[EDIT:J’ai rien dit …
:blush: :blush: ]

[quote=“Clem_ufo”]Salut,
Dmenu tel que tu l’explique peut s’intégrer a xmonad???

A+[/quote]Absolument, dmenu fonctionne avec n’importe quel environnement de bureau ou gestionnaire de fenêtres.

Cette ligne que tu peux trouver dans le sample de config d’XMonad représente l’utilisation la plus classique de dmenu
mais c’est juste une démo des possibilités de dmenu.
Là en l’occurence, cela affiche la sortie du script dmenu_path dans dmenu et exécute la sortie de dmenu.

dmenu est un programme qui se contente d’afficher ce avec quoi tu le nourris et qui au fur et à mesure de ta saisie au clavier,
élimine de sa liste d’affichage tout ce qui ne correspond pas à ta saisie et selon ce qui est écrit dans le script pilotant dmenu
tu peux faire ce que tu veux de la sortie de la commande, de la simple execution comme dans la ligne du dessus au pipage dans une autre commande, tu n’es limité que par ton imagination.

Salut, J’ai édité ( en effacant ) parce que c’était vraiment une question plus que c** vu que j’ai déjà accès a dmenu par ta config ( :blush: :blush: )
Enfin je cherche plus a introduire un menu similaire a celui de gnome ( mais uniquement au clavier ) et une partie du bureau affichant l’usage de l’engin…
Pour le moment je tâtonne dans cet environnement inhabituel
Bref encore désole … je postrerai tout ça sur le fil " support Debian "
Encore merci pour ta patience…

[quote=“Clem_ufo”]je cherche plus a introduire un menu similaire a celui de gnome ( mais uniquement au clavier )
Encore merci pour ta patience…[/quote]
Il y a des projets visant à imiter de fonctionnement de dmenu avec une interface gtk,
mais jusqu’à présent je n’ai pas entendu qu’un de ces projets ait égalé l’original.
Tu peux googler awmenu et gtk-dmenu.

Honnêtement, je crois que l’original patché avec la version “luxe” du patch vertical,
qui vient du wiki d’archlinux et
dont une version est gunzippée en pièce jointe
te permets déjà de faire quelque chose qui a “de la gueule”

Je m’incruste très rapidement pour vous demander si dmenu est mieux que dzen2 dans la mesure où ils sont comparables :unamused:

Merci
Enfin d’ici que je comprenne la syntaxe … :confused:
( Les copier/coller ça serait trop simple… )
Le site de xmonad est tellement riche en références, j’essaie de les traduire pour vraiment les comprendre mais y’en a pour un bout de temps …

Dzen et dmenu sont compatibles tout les deux dans xmonad ( enfin d’après ce que j’ai compris, de ce que j’ai pu gratter sur le net). Rien de moins incertain donc…

[quote=“M3t4linux”]Je m’incruste très rapidement pour vous demander si dmenu est mieux que dzen2 dans la mesure où ils sont comparables :unamused:[/quote]Ils ont chacun des caractéristiques que l’autre n’a pas, le système de filtrage de la saisie au clavier qu’effectue dmenu n’existe pas chez dzen2, par contre dzen2 permet d’afficher des icônes et permet un formattage plus élégant de l’affichage.
Cette page contient quelques screenshots de dzen2 :http://sites.google.com/site/gotmor/dzen

[quote=“Clem_ufo”]Merci
Enfin d’ici que je comprenne la syntaxe … :confused:
( Les copier/coller ça serait trop simple… )
Le site de xmonad est tellement riche en références, j’essaie de les traduire pour vraiment les comprendre mais y’en a pour un bout de temps …[/quote]Le patch c’est encore plus simple que le copié collé
place toi avec l’archive du patch dans un répertoire crée pour l’occasion histoire d’être tranquille et :$ wget http://dl.suckless.org/tools/dmenu-4.0.tar.gz $ tar -xzf dmenu-4.0.tar.gz $ gunzip dmenu-vertical-xft.diff.gz && cp dmenu-vertical-xft.diff dmenu-4.0 $ cd dmenu-4.0 && patch -p1 < dmenu-vertical-xft.diff
Sinon, rassure-toi, la première fois que j’ai plongé dans XMonad j’y ai aussi consacré du temps …

voila un script permettant d’afficher les paroles de la chanson jouée :

[code]#!/bin/sh
#script pour trouver les paroles jouées par mpd
SB="#D4D4D4"
SF="#1C1918"
NB="#251C1A"
NF="#D4D4D4"

#nombre de lignes que l’on veut :
NBLINES=30
#chemin vers le programme qui télécharge les paroles :
CHEMIN=~/Documents/Scripts/
#on regarde si mpd joue
if [ “$(ps axo comm |grep mpd)” = “mpd” ] && [ “$(mpc |grep ‘playing’)” != “” ]; then

$CHEMIN/lyricsdownloader.py > /tmp/PAROLES
cat /tmp/PAROLES | dmenu -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -l $NBLINES
fi
exit 0

[/code]
Il faut ce programme python : gnome-look.org/content/show.php/ … tent=94262 (je galère trop à le faire moi-même :stuck_out_tongue:)
Il faut aussi dmenu patché verticalement.
À priori, ça ne marche pas que pour mpd :slightly_smiling:

:smt006