Scotch Linux arbre1 fly maison ScotchLinux... arbre

Remarque: Ce script est un essemble de cas. Il est long mais se découpe facilement. Outre la commande awk, j'utilise la commande bash avec comme argument -c qui offre une souplesse non négligeable au Bourn Shell. Je vous laisse le soin de la disséquer.

Remarque: Certaine partie peuvent vous intéresser plus que d'autre. Le cas volume par exemple, pour les utilisateur d'oss, permet d'intégrer une bar de son dans conky. Mais ce script devra surement être modifier pour que vous puissiez l'utiliser.


#!/bin/bash
OSSMIX="ossmix" #command ossmix
CONTROL="misc.pcm1" #le mixer à modifier
VSTEP="1.0" #pas d'augmentation du volume
VMAX="63.9" #le volume maximal associé au mixer
VMUL="2" #Un multiple pour ne pas avoir 100 caractères pour 100%
function help(){
echo "sound.sh"
echo "arguments:"
echo "play | stop(2x=kill xmms2d) | next | prev | volume (ossmixer) | jack (no speaker) | + | -"
echo "playlist ( next | prev )"
echo "visual ( 1 | 2 | 0 )[1 : DISPLAY=:0.0]"
echo "[2 : DISPLAY=:0.1]"
echo "[0 : DISPLAY=:0.0 & :0.1]"
exit
}
function badopt(){
echo "bad argument: '$1'"
exit
}
function badarg(){
test -z"$2" &&
echo "too few args for $1" ||
echo "'$2' bad arg for $1"
exit
}

function playlist(){
#Avec sed
local GO;
GO="$(nyxmms2 playlist list | awk \
-v cle="$1" '{
set=0;
if(cle=="prev"){ set=-1 }
if(cle=="next"){ set=1 }
playlist[NR]=$0
}END{
for(i=1;i≤NR;i++){
if(playlist[i] ~ /^\*/){
if( i+set > NR ){
sub(/[ ]+/,"",playlist[1]);
print playlist[1];
break;
}
if( i+set == 0 ){
sub(/[ ]+/,"",playlist[NR]);
print playlist[NR]
break;
}
sub(/[ ]+/,"",playlist[i+set]);
print playlist[i+set]
}
}
}')"
nyxmms2 playlist switch "$GO"
nyxmms2 jump 1
}
function libvisual(){
local ARGS=("$@")
test -n "$(pidof xscreensaver)" && xscreensaver-command -exit
for i in $(pidof xmms2-libvisual); do
if [ "$1" = "$( sed -r 's/DISPLAY=(:0\.[0,1]).*/\1/g' /proc/$i/environ)" ]; then
kill $i
ARGS[0]=""
fi
done
test "${ARGS[0]}" = "$1" && DISPLAY="${ARGS[0]}" xmms2-libvisual &
}
case"$1" in
"play")
test -z $(pidof xmms2d) && xmms2-launcher
test "$(nyxmms2 status | sed -r 's/^(Playing|Paused):.*-.*of.*/\1/g')" = "Playing" && nyxmms2 pause || nyxmms2 play
;;
"stop")
test -z $(pidof xmms2d) && exit
test "$(nyxmms2 status | sed -r 's/^(.*):.*-.*of.*/\1/g')" = "Stopped" && nyxmms2 server shutdown || nyxmms2 stop
;;
"next")
test -n "$(nyxmms2 next)" && nyxmms2 jump 1
;;
"prev")
test -n "$(nyxmms2 prev)" && nyxmms2 jump $(nyxmms2 list | tail -n 3 | head -n 1 | sed -r 's/.*\[([0-9]+)\/.*/\1/')
;;
"playlist")
test -z "$2" &&badarg "playlist"
test -n "$(echo "$2" | grep -E "^((next)|(prev))$" )" && playlist "$2" || badarg "playlist" "$2"
;;
"jack")
test "$(ossmix jack.int-speaker.mute | sed -r 's/.*(ON|OFF)/\1/g')" = ON &&
ossmix -q jack.int-speaker.mute OFF ||
ossmix -q jack.int-speaker.mute ON
;;
#Si vous souhaité avoir une bar volume dans Conky avec oss (je n'est pas trouvé d'autre moyen :/)
"volume")
IN=$(ossmix vmix0-outvol|
sed -r 's/.* ([0-9]{1,2}\.[0-9]{1}).*/\1*100\/'$VMAX'\/'$VMUL'/g' |
bc);
for i in $(seq $IN ); do
echo -n \# ;
done
IN=$(echo "$IN*$VMUL" | bc)
echo " $IN%"
;;
"visual")
test -z "$2" && badarg "visual"
case "$2" in
"1")
libvisual ":0.0"
;;
"2")
libvisual ":0.1"
;;
"0")
for i in ":0.0" ":0.1"; do
libvisual "$i"
done
;;
*)
badarg "visual" "$2"
;;
esac
sleep 1
if [[ -z "$(pidof xmms2-libvisual)" && -z "$(pidof xscreensaver)" ]] ; then
/usr/bin/xscreensaver -no-splash -display:0.0 &
fi
;;
"help")
help
;;
*)
#ici une petite astuce avec bash -c
test -n "$(echo "+-" | grep "$1")" && SET="$1" || badopt "$1"
ARGS="| sed -r 's/.*to ([0-9]{1,2}\.[0-9]{1}).*/\1'$SET$VSTEP'/g' | bc"
for i in $(seq 2); do
ARGS=$(bash -c"$OSSMIX $CONTROL $ARGS")
done
;;
esac