経緯
これまではconkyで、自宅、職場、Gmailの新着メール数を表示させていました。
タイル型ウィンドウマネージャであるxmonadに移行する場合、 conkyの表示か隠されてしまうため使いにくいです。そこでステータスバーであるxmobar上に新着メール数を表示することができるようになったため、その方法をメモしておきます。
方法
xmobarにテキストを渡せばその通りに表示してくれるため、「新着メール数を含む文字列」を表示するスクリプトを作成しました。
checkmail.rbスクリプト
GitHub にスクリプトを置いています。
サーバ名、ユーザ名、パスワードを各個人の設定に合わせて変更します。この時、” “ではなく’ ‘で囲んだ方がいいです ” “で囲んだ場合、@があるとうまくいかないためです(\@とすればOK)。
使用方法は説明がなくても分かると思います。第4引数は、POP3であれば”pop3″、GmailなどのIMAPであれば”imap”を指定します。
最終行で文字列を表示させるので自由に変更します。
#!/usr/bin/env ruby # coding: utf-8 require 'net/pop' require 'net/imap' $server1 = '******' $name1 = '******' $pass1 = '******' $server2 = 'imap.gmail.com' $name2 = '******@gmail.com' $pass2 = '******' ######################################## # function ######################################## def get_n_mail (server, name, pass, connect) case connect when "pop3" pop = Net::POP3.new(server, 110) pop.start(name, pass) n = pop.n_mails pop.finish return n when "imap" imap = Net::IMAP.new(server, 993, true) imap.login(name, pass) imap.select('INBOX') search_criterias = ['UNSEEN'] n = imap.search(search_criterias).length imap.logout imap.disconnect return n else # do nothing end end ######################################## # get numbers of mail ######################################## n1 = get_n_mail($server1, $name1, $pass1, "pop3") n2 = get_n_mail($server2, $name2, $pass2, "imap") ######################################## # Result ######################################## printf "mail1:%d/mail2:%d", n1, n2
なぜRubyでスクリプトを作成したのかというと、
require 'net/pop' require 'net/imap'
でPOP3とIMAPの両方を扱えることが分かったからです。
※ただしVine Linux 6のRubyのバージョンが古く(1.8.7)このままではエラーが出るため、 ruby-opensshパッケージをインストールする必要がありました。
sudo apt-get install ruby-openssh
ただし、これとは別にRuby-2.2.0をインストールしているのですが、この場合は新たにパッケージをインストールしなくても動作しました。
.xmobarrcの設定
先程のcheckmail.rbを ~/.xmonad/ に置きます(場所は任意)。
commandsの所に
,Run Com ".xmonad/checkmail.rb" ["&"] "mail" 3000
を追加し、
template = " %StdinReader% }{ [<fc=#ff00ff>%mail%</fc>]",
などのように設定すれば完了です。
この場合は300秒(5分)ごとにサーバに確認し、新着メール数を返します。
感想
これでxmonadに移行することができそうです。
あとはステータスバーにアイコンを表示させることができればOKです。
コメントを残す