checkgmailで壁紙を新着メールで変更する件の続き

Gmailの着信で壁紙を変更したり効果音を鳴らすと気づきやすくてGood - Ubuntu memo noteGmailの着信を壁紙で気づけるようにする方法を書いたが、壁紙を普通の方法で設定してもすぐ戻ってしまう問題があった。
なので、GUIでcheckgmailの設定を書き換えて壁紙を設定するシェルスクリプトを書いてみた。
ただし、これは初心者が書いた「何とか動作した」というレベルのものなので、おかしな動作をしてもびっくりしない人以外は使わない方がいいと思われる。
まぁ、そこまでして使おうとする人も少ないと思うが…。


このスクリプトの一番不具合が出そうなところは、case文の中のcutコマンドあたりだと思う。
元の設定ファイルのnomailとnotifyの行に「&」が2つより多く入っていると書き換えに失敗するが、ちょっと直せば動く、かもしれない。


ちなみにzenityでは、ファイルをウインドウにドロップしても選択できるので便利。

#!/bin/bash

# これはcheckgmailで壁紙をnotifyに使っている場合の壁紙変更スクリプト
# tettou77-2の大好きなzenityを使ってGUIでcheckgmailを設定できるようにしてある
# 設定後はcheckgmailを再起動する(アイコン右クリック→Restart)
# なお、書き換える設定ファイルは、"~/.checkgmail/prefs.xml"
# 書き換える度にバックアップが発生するので、時々整理しておいた方がいいかもしれない

# とりあえず開始していいか聞く
zenity --question --title="checkgmail用 壁紙変更スクリプト" --text="壁紙変更スクリプトを開始します。はじめに通常状態の壁紙を、次に未読メールがある状態の壁紙を指定してください。よろしいですか?"
if [ $? -eq 1 ] ;then
	exit
fi

# 一時ファイルと設定ファイルのパスを代入
tempfile=$HOME/.checkgmail/prefs-temp
configfile=$HOME/.checkgmail/prefs.xml

# zenityで設定する壁紙を選択
cd /usr/share/backgrounds/
nomail_wallpaper=$(zenity --file-selection --title="通常の壁紙のファイル" --file-filter="画像ファイル|*.jpg *.JPG *.png *.PNG *.gif *.GIF *.bmp *.BMP" --file-filter="全てのファイル|*")
notify_wallpaper=$(zenity --file-selection --title="着信ありの壁紙のファイル" --file-filter="画像ファイル|*.jpg *.JPG *.png *.PNG *.gif *.GIF *.bmp *.BMP" --file-filter="全てのファイル|*")

# ファイルを生成するスクリプト
# 一行ずつ読み込んで、目的の行だけを書き換えて一時ファイルに書いていく
# zenityで指定されなかった場合は書き換えない
: > $tempfile
exec < $configfile
while read line
do
	linehead=`echo $line | cut -c1-14`
	case "$linehead" in
		"nomail_command" )
			if [ -n "$nomail_wallpaper" ] ;then
			line="`echo $line | cut -d'&' -f1-2`&quot; $nomail_wallpaper\""
			fi
		;;
		"notify_command" )
			if [ -n "$notify_wallpaper" ] ;then
			line="`echo $line | cut -d'&' -f1-2`&quot; $notify_wallpaper\""
			fi
		;;
	esac
	echo $line >> $tempfile
done

# 元の設定ファイルのバックアップをとって、生成したファイルを設定ファイルに上書きする
cp $configfile ${configfile%\.*}_`date +%Y_%m_%d_%H:%M`.xml
mv $tempfile $configfile

# checkgmailの再起動を促す
zenity --info --title="checkgmail用 壁紙変更スクリプト" --text="設定が完了しました。checkgmailを再起動(アイコンを右クリック→Restart)してください"

※色の強調表示がbashに対応していないので、妥当そうなzshにしてみた。