меню_скрипт

1 коментар

Колись давно зробив собі доволі зручну штуку — контекстне меню, що дозволяло грати вибрану теку (або декілька) в одному з улюблених програвачів. На днях поставив Debian GNU/Linux собі на лептоп, на якому дали працювати, і згадав про цей маленький свій виріб. Трохи доробив і вирішив поділитись. Для роботи потрібен лише zenity і якийсь stand-alone програвач (з mpd чи xmms2 ніколи не грався). Скрипт сам визначає, які з передбачених програвачів є у системі, і запропонує заграти вміст теки одним із них на вибір користувача.

Контекстне меню

Список програвачів

Сам текст скрипта ось:

#!/bin/sh
ALL_POSSIBLE_PLAYERS="audacious deadbeef qmmp xmms vlc rhythmbox banshee exile gmplayer playitslowly exfalso xine gxine smplayer clementine"
ALL_POSSIBLE_PLAYERS="`echo $ALL_POSSIBLE_PLAYERS|tr " " "\n"|sort|tr "\n" " "`"

AVAILABLE_PLAYERS=`which $ALL_POSSIBLE_PLAYERS`

for EACH in $AVAILABLE_PLAYERS
do PROGRAMS="$PROGRAMS `basename $EACH`"
done

for EACH in $PROGRAMS
do
ZENITY_LIST="$ZENITY_LIST `echo '""' $EACH`"
done

PLAYER=`zenity --list --title="Audio Player Selection" \
--text "Program to play your files with" --radiolist \
--window-icon="/usr/share/icons/Tango/scalable/actions/player_play.svg" \
--column="Select" --column="Player" $ZENITY_LIST`

if [ $? -eq "1" ]; then
zenity --error --title="Oops" --text="Canceled" --timeout=1 \
#--window-icon="/usr/share/icons/Tango/32x32/actions/process-stop.png"
exit 0
fi
if [ -z $1 ]; then
zenity --error --title="Oops" --text="Nothing to play" --timeout=1 \
#--window-icon="/usr/share/icons/Tango/scalable/actions/view-refresh.svg"
exit 0
fi
if [ -z `which $PLAYER` ]; then
zenity --error --title="Oops" --text="Player not found. Select another one" --timeout=1 ; player_select "$@"
else
$PLAYER "$@"
fi

У мене він збережений у ~/bin/player_select
Контекстне меню реалізовано через Custom Actions у Thunar (XFCE):

Custom Actions

У рядку, де вказано, що має виконуватись, записано “/full/path/to/player_select %F” (не буквально — треба вказати повний шлях до скрипта, і без лапок). Якщо раптом комусь знадобиться, але серед переліку нема потрібного програвача, то все вирішується просто додаванням його назви у другому рядочку скрипта в ALL_POSSIBLE_PLAYERS

Отаке.

PopUp`и з малюнками

1 коментар

Давно пора спати. І завтра молода дружина буде незадоволена моєю зухвалою поведінкою. Але дуже захотілось 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 замінивши на своє число мілісекунд показу вигулька)


Older Entries