xmobarのステータスバー上に新着メール数を表示する

xmobarのステータスバー上に新着メール数を表示する

経緯

これまでは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です。

Toshiaki Ara