Давно пора спати. І завтра молода дружина буде незадоволена моєю зухвалою поведінкою. Але дуже захотілось libnotify подружити їз audacious, щоб остнній показував вигульки не якось по-своєму, а так, як скрізь у системі робиться. Ґуґл розказав, що таке вже зроблено, проте це виявилось не зовсім то, бо у вигульку була лиш назва трека, а мені хотілось ще й альбомну обгортку до трека, якщо є.

Вирішилось так:

  • У Audacious є плугін, який дозволяє виконувати довільну команду при зміні трека, передаючи їй деякі змінні
  • Є пакет libnotify-bin, в якому є програмка notify-send
  • Є рудиментарні навички BASH-програмування, щоб це все діло скаламутити в одне готове рішення — скриптик, який буде виконутись при зміні трека і видавати мені гарний вигульк з картинкою.

Оце рішення, власне, і є суттю нотатки, ним і ділюсь:


Скрипт приймає від програвача назву файла, закодовану у urlencode, розкодовує її у нормальний вигляд, переходить у теку, де лежить трек, і шукає там картинки у jpeg, бере першу, що знайшлась і показує у вигульку. Якщо картинок нема, то у вигульку показується іконка програвача.

 #!/bin/bash
urldecode(){
  echo "$@" | sed 's/^.*$/'"`echo "$@" | sed 'y/+/ /; s/%/\\\\x/g; s/\//\\\\\//g'`"'/'
}

TMPFILE=`echo "$1" |  sed 's_file://__' |sed 's_\&_*_g'|sed 's_\/_"slash"_g'`
FILE=`urldecode $TMPFILE|sed 's_*_\&_g'| sed 's_"slash"_\/_g'`
DIR="`dirname "$FILE"`"
cd "$DIR"
JPG="`find -iname "*.jp*g" 2>/dev/null|head -1`"
if [ -z `echo $JPG` ]; then 
ICON=audacious
else
cp "$JPG" /tmp
JPG=/tmp/`basename "$JPG"`
mv $JPG /tmp/icon.jpg
JPG=/tmp/icon.jpg
ICON="$JPG"
fi
if [ $3 ] && [ $3 -ge 1000 ]
	then 
	TIMEOUT=$3
	else 
	TIMEOUT=3000
fi
notify-send -i "$ICON" "$2" -t $TIMEOUT
if [ -e /tmp/icon.jpg ]; then 
rm /tmp/icon.jpg
fi
exit 0
 

  • Це збережено у скрипт десь у $PATH (у мене ~/bin/asd)
  • У налаштуваннях плугінів Audacious задіяти Song Change, а у ньому на зміну трека вказати

    ~/bin/asd “%f” “%s” 3000

    (замінивши ~/bin/asd на те, як названо скрипт, а 3000 замінивши на своє число мілісекунд показу вигулька)