以前紹介したものですが、僕は結局スクリプトを作るようにしたので、それを紹介することにしました。
shellはあんまり得意じゃないので、変でも気にしない方向で...。
直して頂けたら、それは歓迎ですが。
キーバインドは、Windowsキー +
s ... sylpheed
w ... terminal(t に割り当ててたのだけど、若干遠いので変えた)
e ... emacs
g ... pidgin (元の名前がgaimなんで)
x ... xchat
m ... Firefox (mozillaだから)
o ... OpenOffice
あと、Windows + Escape を以前はアプリケーションの終了に割り当ててたのですが、icon化に変更しました。基本的に上記のアプリケーションは終了する必要があんまりないからです。終了する時は、別のショートカットを割り当てればいいかと。Windows + F4とか。なんで、alt 使わないかって言うと、altは別でよく使うので、Linuxだと不要なWindowsキーを代わりに使ってます。
Firefoxのshellスクリプトはなんかめんどくさいことしてるので、とりあえず省きました。キー割り当てに使っているソフトウェアは、bbkeys ですが、もっと素敵な何かがあるのかもしれません。bbkeys の場合、Windowsキーを認識してくれないので、ちょっと工夫する必要があります。
xmodmap -e 'keycode 115 = Super_L'
http://d.hatena.ne.jp/ktat/20070813/1186933121
xmodmap -e 'keycode 131 = Super_L'
xmodmap -e 'add Mod5 = Super_L'
これで、bbkeys の設定で、Mod5がWindowsキーに割り当てられます。ただしこれ、gnome使ってると衝突するようなので、なんか別の方法のがいいかも...。すんません、一般的な環境じゃなくて...。
下記のスクリプトですが、基本的に、pop という引数を取るようにしています。popという引数がない場合は、存在しても、多重起動するように...というポリシーだったのですが、途中からどうでもよくなったので、そうなってないのもあるかも。
というわけで、スクリプト達。前に載せたのも入ってますが、気にしない。
sylpheed.sh
sylpheed は二重起動しないし、sylpheedが立ち上がってる状態でコマンドたたくと、ポップアップしてきます。ので、ポップアップしたついでに全受信させます。xteを使います。Ubuntuとか、debianだと、xautomationで入るかな。さすが、sylpheed コマンドラインオプションでありました。ので、スクリプトにする必要がないな。
#!/bin/sh sylpheed --receive-all & # 以下、全部不要 # SYLPHEED_PID=`ps -e |grep sylpheed | grep -v grep |awk '{print $1}'` # SYLPHEED_CNT=`wmctrl -p -l | grep " $SYLPHEED_PID " | awk '{print $1}' | wc -l` # #if [ ! "$SYLPHEED_PID" ]; then # sylpheed --receive-all & #fi #if [ "$SYLPHEED_CNT" = 1 ]; then # xte 'keydown Control_L' 'keydown Shift_L' 'key i' "keyup Control_L" "keyup Shift_L" # sylpheed --receive-all & #else # wmctrl -p -l | grep " $SYLPHEED_PID " | awk '{print $1}' | tail -n 1 |xargs -r -n1 wmctrl -i {} -a; #fi
xchat.sh
xchat こいつトレイに入ってしまうと、wmctrlでリストされないので困ります。
解決方法はわかりません。とりあえず、二重起動を避けるために、ps で調べて、存在したらwmctrl -a をしますが、トレイに入ってる場合は何にもません。
こんなん間違えてた...orz
#!/bin/sh XCHATPID=`ps -e | grep '[x]chat' | awk '{print $1}'` if [ "$XCHATPID" = "" ]; then setsid xchat & else wmctrl -a 'XChat: '; fi
term.sh
rxvtの起動です。screen使ってるので、多重起動する必要はない。
#!/bin/sh if [ "$1" = 'pop' ]; then if wmctrl -l |grep -E 'urxvt$'; then wmctrl -l | grep -E 'urxvt$' | awk '{print $1}' |xargs -n 1 -i xwit -id {} -pop -focus else urxvt +sb -tint black -sh 20% -tr -fg white +sb --geometry 150x30 -bg black -cr green & fi else urxvt +sb -tint black -sh 20% -tr -fg white +sb --geometry 150x30 -bg black -cr green & fi
pidgin.sh
pidgin は、複数のウィンドウがある上に、windowの名前にpidginが入ってないので、pid から。wmctrl -l -p で、pid も一緒に出てくるので、それを利用します。
#!/bin/sh PIDGIN_PID=` ps -e |grep -v 'pidgin.sh' |grep pidgin | awk '{print $1}'` echo $PIDGIN_PID if [ "$PIDGIN_PID" != "" ]; then wmctrl -l -p | grep " $PIDGIN_PID " | awk '{print $5}' | xargs -n1 -i wmctrl -a {} else pidgin & fi
ちなみに、pidginにはsingle instanceオプションがありますが、言うこと聞いてくれませんでした。
ooffice.sh
OpenOfficeも複数あるので全部たちあげます。
#!/bin/sh if [ "$1" = 'pop' ]; then if wmctrl -l |grep -E 'OpenOffice.org [A-Za-z]+$'; then wmctrl -l | grep -E 'OpenOffice.org [A-Za-z]+$' | awk '{print $1}' |xargs -n 1 -i xwit -id {} -pop -focus else ooffice & fi else ooffice & fi
emacs.sh
@HOSTNAMEのところは、ご自分のホスト名に変換してください。wmctrl 二回叩いてるのは、何かしらないけど、フォーカス取れないことが何度かあったので、そうしました。
#!/bin/sh EMACS_IS=`wmctrl -l |grep -E 'emacs@HOSTNAME$' | tail -n1 | awk '{print $1}'` if test "$1" = "pop" && test "$EMACS_IS" != "" ; then wmctrl -i -a $EMACS_IS; wmctrl -i -a $EMACS_IS; else env XMODIFIERS="@im=none" emacs & fi
とりあえず、こんなもんで。