Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 14-12-2009 14:47:36

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Pekwm : postez vos menus dynamiques

Je recopie ici un message posté sur debian-fr, si ça intéresse du monde :
Bonjour!

Vous le savez peut-être, mais à l'instar du gestionnaire de fenêtre openbox, son cousin pekwm permet lui aussi d'afficher des menus dynamiques. Il a cependant la particularité de pouvoir affichier le résultat de scripts directement dans le menu, et non dans des sous menus.
Bref, cette fonction peut être très pratique si l'on veut éxécuter certaines actions simplement via un menu, ou alors se passer de zone de notification en ayant les infos voulues dans le menu.

Je propose que dans ce topic, chacun poste son pipemenu (menu dynamique) pour pekwm, afin que cela puisse servir aux autres ensuite.
Voici ce que j'ai fait jusqu'ici :
(Vous allez sûrement penser que c'est du bidouillage : c'est vrai, mes connaissances du bash sont très limitées. C'est pourquoi je serais ravi de recevoir vos commentaires, afin de m'expliquer ce que j'ai mal fait, ce que je pourrais améliorer, ce qui n'est pas propre, ce qui rend le script lourd ou lent... merci smile )


Date et heure :
Rien de merveilleux, vous l'aurez sûrement fait vous même :

#!/bin/bash
#pek-date.sh
#Ajoutez ceci dans le fichier ~/.pekwm/menu :
#Entry = "" { Actions = "Dynamic /path/to/the/script/pek-date.sh" }

date=$(date +%A\ %d\ %b\ \%H\:%M)
echo "Dynamic {"
echo " Entry = \"$date\"   { Actions = \"Exec osmo & \" }"
echo "}"
exit


Infos sur la batterie :

#!/bin/bash
#Ajoutez ceci dans le fichier ~/.pekwm/menu :
#Entry = "" { Actions = "Dynamic /path/to/the/script/pek-battery.sh" }
echo "Dynamic {"
echo " Submenu = \"Batterie : $(acpi -b | awk '{print $4}' | sed 's/,//g') \" { "
  echo "Entry = \" $(acpi -b | awk '{print $5}' | sed 's/,//g') restant\" { Actions = \"Exec source /dev/null & \" }"
echo "}"
exit;


1260776228.png

On entame maintenant plus intéressant : une gestion de mpd, le lecteur de musique:
note : il faut avoir mpc d'installé.
Cette première version est pratique si on a une petite liste de lecture :

#!/bin/bash
#pek-mpd.sh
#script pour gérer mpd dans un menu de pekwm
#Ajoutez ceci dans le fichier ~/.pekwm/menu :
# Submenu = "MPD :" {
#   Entry = "" { Actions = "Dynamic /path/to/the/script/pek-mpd.sh 1 " }
# }
#thuban@fritalk.org
#\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/#
CHEMIN="/home/xavier/Documents/Scripts/Pekwm" # chemin du dossier où sont enregistrés les scripts
NB=`mpc playlist | wc -l` # on compte le nombre de chansons
MUSDIR="~/Musique" #le répertoire contenant la musique, si la playlist est vide
STATUS1=`mpc current` #Qu'est ce que joue mpd?
STATUS2=`mpc | grep 'playing' | grep -Eo '[0-9]+:[0-9]+/[0-9]+:[0-9]+'` #temps écoulé
PLAYLIST="/tmp/pek-playlist" # on stocke la playlist dans un fichier pour gagner en ressources
if [ -e $PLAYLIST ]; then
rm $PLAYLIST
fi
mpc playlist | cut -d')' -f2 | cut -c 2- > $PLAYLIST

N=25 # nombre de chansons à afficher en une fois

if [ "$NB" = "0" ]; then # Si la playlist est vide, on la rempli
mpc update $MUSDIR
mpc ls | mpc add
fi

# la fonction qui affichera le menu. Prend en argument le numéro de
# la chanson qui doit être affichée en premier
affiche_ () {
  for ((i=$1 ; i<=(($1 + N)) ; i++))
  do
  echo "Entry = \"$( cat $PLAYLIST | sed -n ${i}p)\" { Actions = \" Exec mpc play $i & \" }"
done
 
 
}

## Quelques commandes pratiques en début de menu
echo "Dynamic {"
if [ "$STATUS1" != "" ];then
echo "Entry = \"$STATUS1 $STATUS2\" { Actions = \" Exec mpc toggle & \" }" #status
echo "Separator {}"
fi
echo "Entry = \"Play-Pause\" { Actions = \" Exec mpc toggle & \" }" #play/payse
echo "Entry = \"Next\" { Actions = \" Exec mpc next & \" }" #chanson suivant
echo "Entry = \"Previous\" { Actions = \" Exec mpc prev & \" }" #chanson précédente
echo "Separator {}"
#on affiche les chansons :
affiche_ $1
#si on n'est pas à la fin, on propose un sous menu pour afficher les N chansons suivantes
if [ "$i" -le "$NB" ]; then
echo "Submenu =  \"Plus...\" {"
echo "Entry \"\" { Actions = \"Dynamic $CHEMIN/pek-mpd.sh $i &\" }"
echo "}"
fi
echo "}"



exit 0;


Une autre version du script, permettant d'afficher la liste des artistes tout d'abord, puis ensuite a liste des chansons de l'artiste en question. Si on clique sur la chanson, elle est ajoutés à lalsite de lecture. Pour éviter les doublons, si on rerajoute une autre piste, la précédente est supprimée.

#!/bin/bash
#pek-mpd-alpha.sh
#script pour gérer mpd dans un menu de pekwm
#Ajoutez ceci dans le fichier ~/.pekwm/menu :
#
#   Entry = "" { Actions = "Dynamic /path/to/the/script/pek-mpd-alpha.sh 1 " }
#
#thuban@fritalk.org
#\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_ARTISTE="/tmp/liste_artiste"
CHEMIN="/home/xavier/Documents/Scripts/Pekwm" # chemin du dossier où sont enregistrés les scripts
mpc list artist | sort -f > $LISTE_ARTISTE
NB_ARTISTE=`cat $LISTE_ARTISTE | wc -l`
N=25 # nombre d'artistes à afficher en une fois
STATUS1=`mpc current` #Qu'est ce que joue mpd?
STATUS2=`mpc | grep 'playing' | grep -Eo '[0-9]+:[0-9]+/[0-9]+:[0-9]+'` #temps écoulé

#la fonction qui affiche les noms d'artistes
affiche_ () {
  for ((i=$1 ; i<=(($1 + N)) ; i++))
  do
    ARTISTE=`cat $LISTE_ARTISTE | sed -n ${i}p`
    echo "Submenu =  \"$ARTISTE\" {"
    echo "Entry \"\" { Actions = \"Dynamic /home/xavier/Documents/Scripts/Pekwm/pek-mpd-artiste2.sh $ARTISTE &\" }"
    echo "}"
   
  done
}

echo "Dynamic {"
#on affiche le status de mpd que la première fois
if [ "$1" = "1" ]; then
#mpd joue :
if [ "$STATUS1" != "" ];then
echo "Submenu  = \"$STATUS1 $STATUS2\" {" #status
else
#mpd est arrêté
echo "Submenu = \"MPD : Ne joue pas\" { "
fi
# Un menu d'action pour mpd
echo "Entry = \"Play-Pause\" { Actions = \" Exec mpc toggle & \" }" #play/payse
echo "Entry = \"Next\" { Actions = \" Exec mpc next & \" }" #chanson suivant
echo "Entry = \"Previous\" { Actions = \" Exec mpc prev & \" }" #chanson précédente
echo "Separator {}"
fi
affiche_ $1
#si on n'est pas à la fin, on propose un sous menu pour afficher les N artistes suivants
if [ "$i" -le "$NB_ARTISTE" ]; then
echo "Submenu =  \"Plus...\" {"
echo "Entry \"\" { Actions = \"Dynamic $CHEMIN/pek-mpd-alpha.sh $i &\" }"
echo "}"
fi
echo "}"

exit 0;


L'autre script qui va avec :

#!/bin/bash
#pek-mpd-artiste2.sh
#script pour gérer mpd dans un menu de pekwm, va avec pek-mpd-alpha.sh
#thuban@fritalk.org
#-----------------------------------------------------------------------------
#c'est une autre façon de faire pour ajouter les pistes
#De plus, avec l'autre script (pek-mpd-artiste.sh), la chanson suivante était TOUJOURS la première de la playlist...

#!!!les espaces dans les noms de fichier de passent pas!!!
#remplacer la ligne "mpc find artist" par "mpc search artist" si besoin

#\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/#
##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##
##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##A##

LISTE_CHANSON="/tmp/liste_chanson" # on enregistre la liste des chansons de l'artiste dans un fichier pour ne pas avoir à éxécuter cette commande tout le temps

mpc search artist "$1" > $LISTE_CHANSON # on cherche l'artiste dans la bibliotheque

NB_CHANSON=`cat $LISTE_CHANSON | wc -l` # on compte combien de chansons de cet artiste existent

#La variable suivante donne le nombre de chansons différentes dans la bibliothèque
#Elle permet d'éviter d'avoir une liste de lecture avec des doublons, et qui s'agrandit à chaque éxécution du script
NB_CHANSON_LIB=`mpc stats | grep "Songs" | awk '{print $2}'`
NB_CHANSON_PLAYLIST=`mpc playlist | wc -l`
 

if [ "$NB_CHANSON_PLAYLIST" -lt "$NB_CHANSON_LIB" ] | [ "$NB_CHANSON_PLAYLIST" -gt "((NB_CHANSON_LIB+1))" ] ;then
mpc clear
mpc ls | mpc add
NB_CHANSON_PLAYLIST=`mpc playlist | wc -l`
fi
 
 
  if [ "$NB_CHANSON_PLAYLIST" -eq "$NB_CHANSON_LIB" ]; then # Si on n'a pas de doubles, on ajoute la chanson à jouer normalement
    echo "Dynamic {"
      for ((i=1 ; i<=$NB_CHANSON ; i++))
      do   
      CHANSON=`cat "$LISTE_CHANSON" | sed -n ${i}p`
      echo "Entry = \"$CHANSON\" { Actions = \"Exec cat $LISTE_CHANSON | sed -n ${i}p | mpc add && mpc play $((NB_CHANSON_LIB+1)) & \" }"
      done
    echo "}"
   
  else #Si on a déja ajouté une chanson à la playlist, on la supprime avant d'ajouter la nouvelle
  echo "Dynamic {"
      for ((i=1 ; i<=$NB_CHANSON ; i++))
      do   
      CHANSON=`cat "$LISTE_CHANSON" | sed -n ${i}p`
      echo "Entry = \"$CHANSON\" { Actions = \"Exec mpc del $NB_CHANSON_PLAYLIST && cat $LISTE_CHANSON | sed -n ${i}p | mpc add && mpc play $((NB_CHANSON_LIB+1)) & \" }"
      done
    echo "}"
  fi
exit 0;


Le même, mais qui demande plus de ressources (mais aucuns doublons avec celui-ci):

#!/bin/bash
#pek-mpd-artiste.sh
#script pour gérer mpd dans un menu de pekwm, va avec pek-mpd-alpha.sh
#thuban@fritalk.org
#c'est une autre façon de faire pour ajouter les pistes
#Seul problème, ça peut allonger la liste de lecture longuement.
#De plus, avec l'autre script, la chanson suivante était TOUJOURS la première de la playlist...
#!!!les espaces dans les noms de fichier ne passent pas!!!
#remplacer la ligne "mpc find artist" par "mpc search artist" si besoin
#\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_CHANSON="/tmp/liste_chanson"
mpc search artist "$1" > $LISTE_CHANSON
NB_CHANSON=`cat $LISTE_CHANSON | wc -l`

echo "Dynamic {"
for ((i=1 ; i<=$NB_CHANSON ; i++))
  do   
  CHANSON=`cat "$LISTE_CHANSON" | sed -n ${i}p`
    echo "Entry = \"$CHANSON\" { Actions = \"Exec mpc clear && cat $LISTE_CHANSON | sed -n ${i}p | mpc add && mpc play && mpc ls | mpc add && mpc random on & \" }"
  done
echo "}"
exit 0;


1260777498.png

Enfin, une gestion des fichiers. On se déplace dans l'arborescence, et ouvre les fichiers avec le programme souhaité. Ajout d'un sous menu pour les images, si plusieurs actions peuvent être envisagées.

#!/bin/bash
#pek-file.sh
#Script pour parcourir le dossier personnel dans pekwm
#jabber : thuban@fritalk.org
#Pour l'utiliser, ajoutez ceci dans le fichier ~/.pekwm/menu :
#Submenu = "FICHIERS :" {
#   Entry = "" { Actions = "Dynamic /path/to/the/script/pek-file.sh" }
# }
#\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/#
#À améliorer :
#Prise en compte des espaces dans les fichiers/dossiers
#Prise en compte des accents
#Ajout d'icones (fait partiellement)

##Différentes variables pour simplifier les modifications
FILEMGR="thunar" # file manager
TERM="urxvt" # émulateur de terminal


# on liste le contenu du répertoire courant.
liste_ () {
LISTE=`ls -F --sort=extension $PWD`
echo "$LISTE"
}

# Cette fonction permet d'afficher un menu en fonction du type de fichier

action_ () {
  case $1 in
    *ls:* ) echo "" #on n'affiche pas les erreurs retournée par ls
    ;;
    */ )    echo "Submenu =  \"$1\" {"
          echo "Entry \"\" { Actions = \"Dynamic cd $PWD/$1 && /home/xavier/Documents/Scripts/Pekwm/pek-file.sh &\" }"
          echo "}"
    ;;
    *.mov | *.avi | *.wma | *.mpg | *.mkv | *.flv | *.wmv | *.mp4 | *.AVI | *.ogm | *.ogg )
          echo "Entry = \"$1\" { Icon = \"video.png\"; Actions = \"Exec mplayer $PWD/$1 & \" }"
    ;;
    *.odt | *.doc | *.xls | *.ods | *.ppt | *.opt )
          echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec soffice $PWD/$1 & \" }"
    ;; 
    *.png | *.jpg | *.JPG | *.jpeg | *.gif | *.bmp | *.tiff )
          echo "Submenu =  \"$1\" {"
          echo "Entry = \"Ouvrir avec gimp\" {Actions = \"Exec gimp $PWD/$1 & \" }"
          echo "Entry = \"Ouvrir avec feh\" {Actions = \"Exec feh -x $PWD/$1 & \" }"
          echo "Entry = \"Diaporama ici\" {Actions = \"Exec feh -x -r $PWD & \" }"
          echo "Entry = \"Définir comme fond d'écran\" {Actions = \"Exec feh --bg-scale $PWD/$1 & \" }"
          echo "}"
    ;;
    *.gp4 | *.gp3 | *.gtp )
          echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec tuxguitar $PWD/$1 & \" }"
    ;;
    *.txt | *.py | *.c | *.h | *.sh )
          echo "Entry = \"$1\" { Icon = \"video.png\"; Actions = \"Exec geany $PWD/$1 & \" }"
    ;;
    *.ogg | *.mp3 | *.flac | *.wma | *.wav )
          echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec smplayer -add-to-playlist $PWD/$1 & \" }"
    ;;
    *.pdf )
          echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec evince $PWD/$1 & \" }"
    ;;
 
  esac
}
#on commence le menu
echo "Dynamic {"
NB=`liste_ | wc -l`
for ((i=1; i <= $NB ; i++))
  do
  ELEMENT="$(liste_ | sed -n ${i}p)"
  action_ $ELEMENT
  done
echo "Separator {}"
echo "Entry = \"Ouvrir dans $FILEMGR\" { Actions = \"Exec $FILEMGR $PWD/ & \" }"
echo "Entry = \"Terminal ici\" { Actions = \"Exec cd $PWD && $TERM & \" }"
echo "Entry = \"Rechercher ici\" { Actions = \"Exec catfish $PWD/ & \" }"
echo "}"

exit 0;


1260777235.png
Je rencontre un gros souci avec ce dernier script, problème qui me gène aussi pour le script de mpd : les espaces dans les noms de fichier ne passent pas! (Évidemment, la ligne de commande ne peut pas comprendre)
Comment puis-je faire pour les remplacer par des "\ ", ou pour que ça marche d'une autre façon?

Voila, à vos claviers!

edit : un autre :
un nouveau menu, pour afficher des fortunes :

#!/bin/bash
#pek-date.sh
#Ajoutez ceci dans le fichier ~/.pekwm/menu :
#Entry = "" { Actions = "Dynamic /path/to/the/script/pek-fortunes.sh" }
FORTUNE=/tmp/pek-fortune
/usr/games/fortune > $FORTUNE
LIGNES=`cat $FORTUNE | wc -l`
echo "Dynamic {"
echo "Submenu = \"Fortune\" { "
for ((i=1; i <= $LIGNES ; i++))
  do
echo " Entry = \"$(cat /tmp/pek-fortune | sed -n ${i}p)\"  { Actions = \"Exec source /dev/null & \" }"
  done
echo "}"
echo "}"
exit 0;


1260783734.png


YA3HGA-H

Hors ligne

#2 15-12-2009 13:41:04

phlinux
Membre
Lieu : S-M
Distrib. : Jessie
Noyau : 4.6
(G)UI : Openbox (+Rox+Feh)
Inscription : 10-05-2009

Re : Pekwm : postez vos menus dynamiques

Bjr,
Je fais un petit retour quand même, histoire que ton post (assez fourni d'ailleurs) ne se perde pas dans les fils.

J'aimerais savoir si avec Pekwm on peut arriver à un menu des bureaux , et ce qu'il y a d'ouvert dessus, ayant le même aspect que celui d'openbox (client-list-combined-menu) ?

Pages perso : feh, omegat, udisks, sa station de travail comme passerelle

Hors ligne

#3 15-12-2009 18:42:44

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Pekwm : postez vos menus dynamiques

bien sûr que c'est possible!  je l'ai configuré via un clic gauche dans mon fichier mouse :
    ButtonRelease = "1" { Actions = "ShowMenu Goto" }
dans la section root (le fond d'écran) mais aussi screen edge
1260895260.png
Sinon, il y a celui par défaut dans le clic-droit :
(il faut cliquer sur le "goto > window")
1260895338.png
don cen réarrangeant tes menus c'est facilement faisable smile

YA3HGA-H

Hors ligne

#4 22-02-2010 21:34:33

phlinux
Membre
Lieu : S-M
Distrib. : Jessie
Noyau : 4.6
(G)UI : Openbox (+Rox+Feh)
Inscription : 10-05-2009

Re : Pekwm : postez vos menus dynamiques

Bjr,
Est-ce qu'il est possible de faire un script "générique" pour lister un répertoire ?

Par exemple en se basant sur le "Script pour parcourir le dossier personnel dans pekwm" mais en ajoutant une variable en remplacement de $PWD. Ce qui pourrait donner une ligne de menu du genre

Entry = "" { Actions = "Dynamic /path/to/the/script/generique.sh /path/to/rep/à/lister" }


Pages perso : feh, omegat, udisks, sa station de travail comme passerelle

Hors ligne

#5 22-02-2010 21:44:44

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Pekwm : postez vos menus dynamiques

Bien sûr que c'est possible. Si tu veux je m'y penche demain. Sinon, la méthode serait toujours la même, il faut enlever des parties au script précédent. En fait, ce que je faisait, c'est que je me déplaçait dans le nouveau dossier, puis je l'affichait dans le menu, d'où l'utilisation de PWD.
Mais ça peut très bien s'adapter.
Pour être sûr, ce que tu veux, c'est bien juste un affichage de ce qu'il y a dans un dossier, mais pas le parcourir?

YA3HGA-H

Hors ligne

#6 22-02-2010 22:51:58

phlinux
Membre
Lieu : S-M
Distrib. : Jessie
Noyau : 4.6
(G)UI : Openbox (+Rox+Feh)
Inscription : 10-05-2009

Re : Pekwm : postez vos menus dynamiques

re-
Si : afficher et ouvrir, comme ton script le propose.

En fait l'idée, facile à deviner, est de n'avoir qu'un seul script à utilser quelque soit le rep que l'on va viser.
Pour être plus clair dans le menu pek, on pourrait avoir par exemple

Entry = "Config pekwm" { Actions = "Dynamic /path/to/the/script/generique.sh /home/user/.pekwm" }
Entry = "Musique" { Actions = "Dynamic /path/to/the/script/generique.sh /home/user/mes_musiques" }


etc...


Pages perso : feh, omegat, udisks, sa station de travail comme passerelle

Hors ligne

#7 23-02-2010 08:46:01

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Pekwm : postez vos menus dynamiques

Suffisait de demander. Voici le nouveau script, pas vraiment différent du premier. Il faut passer en argument le dossier que l'on veut lister, comme tu l'as demandé. Attention, il faut penser à changer le chemin vers le script (dans le script).
Cela te convient-til?

#!/bin/sh
#pek-file.sh
#Script pour parcourir le dossier personnel dans pekwm
#thuban@singularity.fr
#Pour l'utiliser, ajoutez ceci dans le fichier ~/.pekwm/menu :
#Submenu = "FICHIERS :" {
#   Entry = "" { Actions = "Dynamic /path/to/the/script/pek-file.sh /Nom/Du/Dossier/à/lister" }
# }
#\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/#
#À améliorer :
#Ajout d'icones (fait partiellement)

##Différentes variables pour simplifier les modifications
FILEMGR="pcmanfm" # file manager
TERM="urxvt" # émulateur de terminal

#Attention, il faut adapter cette valeur!

CHEMIN="/home/xavier/Documents/Scripts/Pekwm" # chemin du dossier où sont enregistrés les scripts



# on liste le contenu du répertoire courant.
liste_ () {
  cd $1
  LISTE=`ls -1 -F --sort=extension $PWD`
  echo "$LISTE"
}

# Cette fonction permet d'afficher un menu en fonction du type de fichier

action_ () {
  case $1 in
    *ls:* ) echo "" #on n'affiche pas les erreurs retournée par ls
    ;;
    */ )    echo "Submenu =  \"$1\" {"
          echo "Entry \"\" { Actions = \"Dynamic cd '$PWD/$1' && $CHEMIN/pek-file.sh '$PWD/$1' &\" }"
          echo "}"
 
    ;;
    *.mov | *.avi | *.wma | *.mpg | *.mkv | *.flv | *.wmv | *.mp4 | *.AVI | *.ogm | *.ogg )
          echo "Entry = \"$1\" { Icon = \"video.png\"; Actions = \"Exec mplayer '$PWD/$1' & \" }"
    ;;
    *.odt | *.doc | *.xls | *.ods | *.ppt | *.odp )
          echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec soffice '$PWD/$1' & \" }"
    ;; 
    *.abw )
          echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec abiword '$PWD/$1' & \" }"
    ;;
    *.gnumeric )
          echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec gnumeric '$PWD/$1' & \" }"
    ;;
    *.gba )
          echo "Entry = \"$1\" { Actions = \"Exec gvba '$PWD/$1' & \" }"
    ;;
    *.png | *.jpg | *.JPG | *.jpeg | *.gif | *.bmp | *.tiff )
          echo "Submenu =  \"$1\" {"
          echo "Entry = \"Ouvrir avec gimp\" {Actions = \"Exec gimp '$PWD/$1' & \" }"
          echo "Entry = \"Ouvrir avec feh\" {Actions = \"Exec feh -x '$PWD/$1' & \" }"
          echo "Entry = \"Diaporama ici\" {Actions = \"Exec feh -x -r '$PWD' & \" }"
          echo "Entry = \"Définir comme fond d'écran\" {Actions = \"Exec feh --bg-scale '$PWD/$1' & \" }"
          echo "}"
    ;;
    *.gp4 | *.gp3 | *.gtp )
          echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec tuxguitar '$PWD/$1' & \" }"
    ;;
    *.txt | *.py | *.c | *.h | *.sh )
          echo "Entry = \"$1\" { Icon = \"mousepad.png\"; Actions = \"Exec geany '$PWD/$1' & \" }"
    ;;
    *.ogg | *.mp3 | *.flac | *.wma | *.wav )
          echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec gnome-mplayer '$PWD/$1' & \" }"
    ;;
    *.pdf )
          echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec evince '$PWD/$1' & \" }"
    ;;
 
  esac
}
#on commence le menu
echo "Dynamic {"
v=$IFS
IFS='
'
NB=`liste_ $1 | wc -l`
i=1
while [ $i -le $NB ]
  do
  ELEMENT="$(liste_ | sed -n ${i}p)"
  action_ $ELEMENT
  i=$(expr $i + 1)
  done
echo "Separator {}"
echo "Entry = \"Ouvrir dans $FILEMGR\" { Actions = \"Exec $FILEMGR '$PWD'/ & \" }"
echo "Entry = \"Terminal ici\" { Actions = \"Exec cd '$PWD' && $TERM & \" }"
echo "Entry = \"Rechercher ici\" { Actions = \"Exec catfish '$PWD'/ & \" }"
echo "}"
IFS=v
exit 0;


YA3HGA-H

Hors ligne

#8 23-02-2010 14:46:51

phlinux
Membre
Lieu : S-M
Distrib. : Jessie
Noyau : 4.6
(G)UI : Openbox (+Rox+Feh)
Inscription : 10-05-2009

Re : Pekwm : postez vos menus dynamiques

Bjr,
Après essais, cette ligne

Entry { Actions = "Dynamic /home/ph/.script/pek-lance-fichier.sh /home/ph/.pekwm" }


affiche les rep (non cachés) de ~/.

Le script fonctionne (donc pas un problème de point dans la ligne de commande) mais ne vise pas le bon rep

Si je fais varier "cd $1" > "cd $0" il s'affiche en plus les fichiers (non cachés) reconnus  : et j'ai le même résultat en retirant "/home/ph/.pekwm"


Pages perso : feh, omegat, udisks, sa station de travail comme passerelle

Hors ligne

#9 23-02-2010 15:46:01

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Pekwm : postez vos menus dynamiques

c'est de ma faute, j'ai oublié une petite chose en recopiant. ça devrait marcher comme ça :

!/bin/sh
#pek-file.sh
#Script pour parcourir le dossier personnel dans pekwm
#thuban@singularity.fr
#Pour l'utiliser, ajoutez ceci dans le fichier ~/.pekwm/menu :
#Submenu = "FICHIERS :" {
#        Entry = "" { Actions = "Dynamic /path/to/the/script/pek-file.sh /Nom/Du/Dossier/à/lister" }
#    }
#\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/#
#À améliorer :
#Ajout d'icones (fait partiellement)

##Différentes variables pour simplifier les modifications
FILEMGR="pcmanfm" # file manager
TERM="urxvt" # émulateur de terminal

#Attention, il faut adapter cette valeur!

CHEMIN="/home/xavier/Documents/Scripts/Pekwm" # chemin du dossier où sont enregistrés les scripts



# on liste le contenu du répertoire courant.
liste_ () {
    cd $1
    LISTE=`ls -1 -F --sort=extension $PWD`
    echo "$LISTE"
}

# Cette fonction permet d'afficher un menu en fonction du type de fichier

action_ () {
    case $1 in
        *ls:* ) echo "" #on n'affiche pas les erreurs retournée par ls
        ;;
        */ )        echo "Submenu =  \"$1\" {"
                    echo "Entry \"\" { Actions = \"Dynamic cd '$PWD/$1' && $CHEMIN/pek-file.sh '$PWD/$1' &\" }"
                    echo "}"
   
        ;;
        *.mov | *.avi | *.wma | *.mpg | *.mkv | *.flv | *.wmv | *.mp4 | *.AVI | *.ogm | *.ogg )
                    echo "Entry = \"$1\" { Icon = \"video.png\"; Actions = \"Exec mplayer '$PWD/$1' & \" }"
        ;;
        *.odt | *.doc | *.xls | *.ods | *.ppt | *.odp )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec soffice '$PWD/$1' & \" }"
        ;;    
        *.abw )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec abiword '$PWD/$1' & \" }"
        ;;
        *.gnumeric )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec gnumeric '$PWD/$1' & \" }"
        ;;
        *.gba )
                    echo "Entry = \"$1\" { Actions = \"Exec gvba '$PWD/$1' & \" }"
        ;;
        *.png | *.jpg | *.JPG | *.jpeg | *.gif | *.bmp | *.tiff )
                    echo "Submenu =  \"$1\" {"
                    echo "Entry = \"Ouvrir avec gimp\" {Actions = \"Exec gimp '$PWD/$1' & \" }"
                    echo "Entry = \"Ouvrir avec feh\" {Actions = \"Exec feh -x '$PWD/$1' & \" }"
                    echo "Entry = \"Diaporama ici\" {Actions = \"Exec feh -x -r '$PWD' & \" }"
                    echo "Entry = \"Définir comme fond d'écran\" {Actions = \"Exec feh --bg-scale '$PWD/$1' & \" }"
                    echo "}"
        ;;
        *.gp4 | *.gp3 | *.gtp )
                    echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec tuxguitar '$PWD/$1' & \" }"
        ;;
        *.txt | *.py | *.c | *.h | *.sh )
                    echo "Entry = \"$1\" { Icon = \"mousepad.png\"; Actions = \"Exec geany '$PWD/$1' & \" }"
        ;;
        *.ogg | *.mp3 | *.flac | *.wma | *.wav )
                    echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec gnome-mplayer '$PWD/$1' & \" }"
        ;;
        *.pdf )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec evince '$PWD/$1' & \" }"
        ;;
   
    esac
}
#on commence le menu
echo "Dynamic {"
v=$IFS
IFS='
'
NB=`liste_ $1 | wc -l`
i=1
while [ $i -le $NB ]
    do
    ELEMENT="$(liste_ $1 | sed -n ${i}p)"
    action_ $ELEMENT
    i=$(expr $i + 1)
    done
echo "Separator {}"
echo "Entry = \"Ouvrir dans $FILEMGR\" { Actions = \"Exec $FILEMGR '$PWD'/ & \" }"
echo "Entry = \"Terminal ici\" { Actions = \"Exec cd '$PWD' && $TERM & \" }"
echo "Entry = \"Rechercher ici\" { Actions = \"Exec catfish '$PWD'/ & \" }"
echo "}"
IFS=v
exit 0;


YA3HGA-H

Hors ligne

#10 23-02-2010 17:05:20

phlinux
Membre
Lieu : S-M
Distrib. : Jessie
Noyau : 4.6
(G)UI : Openbox (+Rox+Feh)
Inscription : 10-05-2009

Re : Pekwm : postez vos menus dynamiques

re-
Ok, ça fonctionne pour les fichiers : reste à trouver comment faire reconnaître les fichiers sans extension, comme le sont la plupart des fichiers de config

Par contre ça ne développe pas un sous-rep, même en changeant cette ligne

echo "Entry \"\" { Actions = \"Dynamic cd '$PWD/$1' && $CHEMIN/pek-list.sh '$PWD/$1' &\" }"


Merci de ton aide


Pages perso : feh, omegat, udisks, sa station de travail comme passerelle

Hors ligne

#11 23-02-2010 17:43:21

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Pekwm : postez vos menus dynamiques

Je suis vraiment un imbécile quand je veux, et je me complique... pfff.
En fait, je l'avais corrigé hier soir avant de dormir, puis j'ai cru l'avoir enregistré, et ben non... Et aujourd'hui, je te dis n'importe quoi!
Tiens voici la bonne version : (suffisait de mettre le cd au bon endroit...)

#!/bin/sh
#pek-file.sh
#Script pour parcourir le dossier personnel dans pekwm
#thuban@singularity.fr
#Pour l'utiliser, ajoutez ceci dans le fichier ~/.pekwm/menu :
#Submenu = "FICHIERS :" {
#        Entry = "" { Actions = "Dynamic /path/to/the/script/pek-file.sh /Nom/Du/Dossier/à/lister" }
#    }
#\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/#
#À améliorer :
#Ajout d'icones (fait partiellement)

##Différentes variables pour simplifier les modifications
FILEMGR="pcmanfm" # file manager
TERM="urxvt" # émulateur de terminal

#Attention, il faut adapter cette valeur!

CHEMIN="/home/xavier/Documents/Scripts/Pekwm" # chemin du dossier où sont enregistrés les scripts

    cd $1


# on liste le contenu du répertoire courant.
liste_ () {
    LISTE=`ls -1 -F --sort=extension $PWD`
    echo "$LISTE"
}

# Cette fonction permet d'afficher un menu en fonction du type de fichier

action_ () {
    case $1 in
        *ls:* ) echo "" #on n'affiche pas les erreurs retournée par ls
        ;;
        */ )        echo "Submenu =  \"$1\" {"
                    echo "Entry \"\" { Actions = \"Dynamic cd '$PWD/$1' && $CHEMIN/pek-file.sh '$PWD/$1' &\" }"
                    echo "}"
   
        ;;
        *.mov | *.avi | *.wma | *.mpg | *.mkv | *.flv | *.wmv | *.mp4 | *.AVI | *.ogm | *.ogg )
                    echo "Entry = \"$1\" { Icon = \"video.png\"; Actions = \"Exec mplayer '$PWD/$1' & \" }"
        ;;
        *.odt | *.doc | *.xls | *.ods | *.ppt | *.odp )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec soffice '$PWD/$1' & \" }"
        ;;    
        *.abw )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec abiword '$PWD/$1' & \" }"
        ;;
        *.gnumeric )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec gnumeric '$PWD/$1' & \" }"
        ;;
        *.gba )
                    echo "Entry = \"$1\" { Actions = \"Exec gvba '$PWD/$1' & \" }"
        ;;
        *.png | *.jpg | *.JPG | *.jpeg | *.gif | *.bmp | *.tiff )
                    echo "Submenu =  \"$1\" {"
                    echo "Entry = \"Ouvrir avec gimp\" {Actions = \"Exec gimp '$PWD/$1' & \" }"
                    echo "Entry = \"Ouvrir avec feh\" {Actions = \"Exec feh -x '$PWD/$1' & \" }"
                    echo "Entry = \"Diaporama ici\" {Actions = \"Exec feh -x -r '$PWD' & \" }"
                    echo "Entry = \"Définir comme fond d'écran\" {Actions = \"Exec feh --bg-scale '$PWD/$1' & \" }"
                    echo "}"
        ;;
        *.gp4 | *.gp3 | *.gtp )
                    echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec tuxguitar '$PWD/$1' & \" }"
        ;;
        *.txt | *.py | *.c | *.h | *.sh )
                    echo "Entry = \"$1\" { Icon = \"mousepad.png\"; Actions = \"Exec geany '$PWD/$1' & \" }"
        ;;
        *.ogg | *.mp3 | *.flac | *.wma | *.wav )
                    echo "Entry = \"$1\" { Icon = \"musique.png\"; Actions = \"Exec gnome-mplayer '$PWD/$1' & \" }"
        ;;
        *.pdf )
                    echo "Entry = \"$1\" { Icon = \"document.png\"; Actions = \"Exec evince '$PWD/$1' & \" }"
        ;;
   
    esac
}
#on commence le menu
echo "Dynamic {"
v=$IFS
IFS='
'
NB=`liste_ | wc -l`
i=1
while [ $i -le $NB ]
    do
    ELEMENT="$(liste_ | sed -n ${i}p)"
    action_ $ELEMENT
    i=$(expr $i + 1)
    done
echo "Separator {}"
echo "Entry = \"Ouvrir dans $FILEMGR\" { Actions = \"Exec $FILEMGR '$PWD'/ & \" }"
echo "Entry = \"Terminal ici\" { Actions = \"Exec cd '$PWD' && $TERM & \" }"
echo "Entry = \"Rechercher ici\" { Actions = \"Exec catfish '$PWD'/ & \" }"
echo "}"
IFS=v
exit 0;


YA3HGA-H

Hors ligne

#12 24-02-2010 00:43:08

phlinux
Membre
Lieu : S-M
Distrib. : Jessie
Noyau : 4.6
(G)UI : Openbox (+Rox+Feh)
Inscription : 10-05-2009

Re : Pekwm : postez vos menus dynamiques

re-
Bon, ben, nickel cher ami ; ça pédale super bien.

Pour les fichiers sans extension, après avoir chercher un moment, un simple * et c'est ok. Exemple pour les intéressés

*.py | *.c | *.h | *.sh | * )
                    echo "Entry = \" $1\" { Icon = \"system2.png\"; Actions = \"Exec geany '$PWD/$1' & \" }"
        ;;


Simplicité désarmente.

Pendant que j'y suis l'ajout pour mettre l'icone des repertoires

*/ )        echo "Submenu =  \" $1\" { Icon = \"folder.png"\"
                    echo "Entry \"\" { Actions = \"Dynamic cd '$PWD/$1' && $CHEMIN/pek-list.sh '$PWD/$1' &\" }"
                    echo "}"


à noter l'espace avant $1 sur la 1ère ligne pour ne pas  coller l'icone au texte

Enfin avec ce script "unique" on aborde l'utilisation du fichier ~/.pekwm/vars en y mettant par exemple la variable

# pour pek-list
$PL="Dynamic /home/phlinux/.script/pek-list.sh"


Les gestionnaires de fichiers vont avoir moins de boulot

Merci encore


Pages perso : feh, omegat, udisks, sa station de travail comme passerelle

Hors ligne

#13 24-02-2010 09:13:26

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Pekwm : postez vos menus dynamiques

Mais de rien! C'est une bonne idée d'en mettre un peu dans le fichier .pekwm/vars wink !

YA3HGA-H

Hors ligne

Pied de page des forums