moc的2.5.0alpha4引入了一些新的功能,使得继续上次播放成为可能。当然,原程序是没有这个功能的,需要用几个脚本。新版moc多了的功能包括queue和onsongchange。前一个能使用queue来插入playlist,后一个能在换歌的时候调用外部程序。所以自己写了两个脚本实现继续上次播放和换歌时显示提示的功能。
第一个脚本mymoc
#!/bin/bash
state=`pgrep mocp`
if [ -n "$state" ]; then
mocp
exit 0
else
echo 0 > ~/.moc/firsttime
lastsong=`cat ~/.moc/lastsong`
mocp -S
mocp -p
mocp -q "$lastsong"
mocp -f
mocp -P
mocp
exit 0
fi
先检测,如果moc已经在运行,就只是打开client,如果没有运行,就运行server,开始播放playlist,然后读取~/.moc/lastsong中记录的上次播放的文件,用queue的形式插入,开始播放这首歌,然后暂停,因为不习惯自动播放。
第二个脚本onsongchange
#!/bin/bash
mocp -i | grep File | sed -e 's/File: //'> ~/.moc/lastsong
firsttime=`cat ~/.moc/firsttime`
if [ $firsttime = "1" ]; then
notify-send "`mocp -i |grep -i "^State" | sed -e "s/^State: //"` `echo \ && mocp -i | grep -i "^File" | sed -e "s/.*\///" -e "s/.mp3//" -e "s/.MP3//" -e "s/.wma//" -e "s/.WMA//" -e "s/.ape//" -e "s/.APE//" -e "s/.flac//" -e "s/.FLAC//" -e "s/[0-9]\+[/./-]//g"`"
else
echo 1 > ~/.moc/firsttime
fi
exit 0
这个脚本就是当换歌的时候把歌名写入~/.moc/lastsong以便下次调用。暂时moc不支持退出的时候写入。然后判断是不是刚开始运行所播放的第一首歌,如果不是就显示歌名。因为在mymoc调用moc的时候,先播放了playlist里的第一首歌,然后立即转到queue,也就是上次关闭时播放的歌,所以如果不这样就会连着显示两次歌名。