Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Ouvrir des fichiers avec dmenu

Ce script permet de lancer des fichiers, selon leur extension

#!/bin/bash
#dmlaunch
# Lanceur pour plusieurs types de fichier avec dmenu
#Requiert le patch vertical pour dmenu
# thuban@singularity.fr

SB="#000000"
SF="#00AFAF"
NB="#000000"
NF="#797979"
source ~/.dmenuconfig

FN="-*-fixed-medium-r-semicondensed-*-13-*-*-*-*-*-iso10646-*"
#\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épertoire courant, et l'envoie dans dmenu

liste_ () {
LISTE=`ls -1 -a -X -p --sort=extension | dmenu -fn $FN -nb $NB -nf $NF -sb $SB -sf $SF -l 17 -p "$PWD" -i`
echo "$LISTE"
}

#on édite ou on regarde l'image
image_ () {
LOGIMAGE="diaporama
Fond_d_ecran
feh
gpicview
gimp"
ACTION=$(echo "$LOGIMAGE" | dmenu -fn $FN -nb $NB -nf $NF -sb $SB -sf $SF -p " image :$PWD" -i)
case $ACTION in
    gpicview | gimp | feh ) $ACTION $1 && exit 0 ;;
    diaporama ) feh * -F && exit 0 ;;
    Fond_d_ecran ) feh --bg-scale $1 && exit 0 ;;
esac
$ACTION $1
}

#Differentes actions pour les html
HTML_EDITOR="geany
iceweasel"

#Fonction our lister le répertoire des scripts persos
scripts_perso () {
DIR=~/.dmenu/
for i in $(ls -1 $DIR); do
    echo "$DIR/$i"
done
}

# Cette fonction lance un programme pour ouvrir le fichier selon son extension
action_ () {
    case $1 in
        */ | .. ) cd $1 && CHREP=1
        ;;
    *.MOV | *.mov | *.mpeg | *.MPG | *.avi | *.wma | *.mpg | *.mkv | *.flv | *.wmv | *.mp4 | *.AVI | *.ogm | *.ogv | *.dv ) mplayer $1 && exit 0
        ;;
    *.doc | *.docx | *.txt | *.xls | *.xlsx | *.odt | *.ods | *.ppt | *.opt | *.odp | *.pps) libreoffice $1 && exit 0
        ;;
#   *.xls | *.xlsx ) gnumeric $1 && exit 0
#       ;;
#   *.doc | *.txt ) abiword $1 && exit 0
#       ;;
    *.png | *.jpg | *.JPG | *.jpeg | *.gif | *.bmp | *.tiff ) image_ $1 && exit 0
        ;;
    *.gp5 | *.gp4 | *.gp3 | *.gtp ) tuxguitar $1 && exit 0
        ;;
    *.dvi ) xdvi $1 && exit 0
        ;;
    *.smc | *.SMC | *.zst ) zsnes $1 && exit 0
        ;;
    *.bin | *.smd ) mess megadriv -cart $1 && exit 0
        ;;
    *.kino | *.dv ) kino $1 && exit 0
        ;;
    *.php | *.css | *.lua | *.hs | *.py | *.c | *.h | *.sh ) geany $1 && exit 0
        ;;
    *.xml ) geany $1 && exit 0
        ;;
    *.tex ) x-terminal-emulator -e vim $1 && exit 0
        ;;
    *.html ) exec $(echo "$HTML_EDITOR" | dmenu   -nb $NB -nf $NF -sb $SB -sf $SF -p "$1 : ouvrir avec?" -i) $1
        ;;
    *.ogg | *.mp3 | *.flac | *.wma | *.wav ) x-terminal-emulator -e mplayer $1 && exit 0
        ;;
    *.pdf ) zathura $1 && exit 0
        ;;
    *.svg ) inkscape $1 && exit 0
        ;;
    * )
    #Ici,on peut lancer une commande du système, ou un des scripts contenu dans un répertoire.
    ACTION=$(echo "$(dmenu_path)
$(scripts_perso)" | dmenu -fn $FN -nb  $NB -nf $NF -sb $SB -sf $SF -p "$1 : Que faire?" -i)
    $ACTION $1 && exit 0 ;;
    esac

}

#Cette variable servira à savoir si on a changé de répertoire
CHREP=0
#Pour ne pas avoir de soucis avec les espaces dans les noms de fichiers
v_=$IFS
IFS='
'
#on liste une première fois
INDEX="$(liste_)"
[ -z $INDEX ]
#tant que on donne de quoi manger à action, elle tourne
while [ "$INDEX" != "" ]; do
    action_ $INDEX
    INDEX="$(liste_)"
done

#Si on ne veut plus utiliser le script, mais lancer un autre commande dans le répertoire courant :
if [ $CHREP != 0 ]; then
    $(echo "$(dmenu_path)
$(scripts_perso)" | dmenu -fn $FN -nb  $NB -nf $NF -sb $SB -sf $SF -p "$1 : Que faire?" -i) && exit 0
fi
IFS=$v_

exit 0;