読者です 読者をやめる 読者になる 読者になる

座敷牢日誌

都落ちした元SEがソフトウェアやネット関連のことを書いています

byobuのステータス表示部分にgmailの新着メール件数を出力させてみた

ソフトウェア

byobuのステータス表示部分のカスタム方法を調べて、gmailの新着メール件数を出力するようにしてみた。

未読メールが0件のときの表示。
f:id:zashikiro:20120908164641p:plain

新着メールがあるときの表示。件数を出力している。
f:id:zashikiro:20120908164724p:plain

なんらかの理由で新着メールの取得に失敗したときの表示。
f:id:zashikiro:20120908164734p:plain

なお、この記事で紹介する手順はGNU Screenベースで動かすbyobuでしか動作確認できていない。tmuxだとうまくいかないのだ。個人的にはtmuxのほうが直感的で使いやすいと思っているので、対処方法をご存じの方いましたら教えてください。

とりあえず、以下で導入手順を紹介する。

導入手順

まず、byobu側の設定でステータスに「custom」を出力するように設定する必要がある。F9キーで設定画面を呼び出し、「Toggle status notifications」を開き、「custom」を選択して、「Apply」を選ぶ。

カスタム用のスクリプトを格納するディレクトリを作る。

$ mkdir $HOME/.byobu/bin

さて、次は恥を晒すようなのであまり出したくないんだけど、作ったディレクトリの中に次のスクリプトを保存する。ファイル名は「600_checkgmail」とする。

#!/usr/bin/python
# coding: utf8
# Author: Kosuke Uchida.
# Last change: 2012-09-08 16:39:42.
# byobu用スクリプト。gmailの新着メール件数を出力する

import imaplib

# gmailアカウントを設定
GMAIL_USER = "hogehoge"
GMAIL_PASSWD = "hogehoge"

# 出力フォーマット(man screen参照)
SCR_FORMAT = "\005{= %s}g:%s\005{-}"
SCR_NEWMAIL = "bw"
SCR_MAILNONE = "dw"
SCR_FAIL = "rw"

try:
    mail = imaplib.IMAP4_SSL("imap.gmail.com")
    mail.login(GMAIL_USER, GMAIL_PASSWD)
    mail.list()
    mail.select("Inbox")
    status, maillist = mail.search(None, "(UNSEEN)")
    if status == "OK":
        if len(maillist[0]) > 0:
            print SCR_FORMAT % (SCR_NEWMAIL, 
                    str(len(maillist[0].split(" "))),)
        else:
            print SCR_FORMAT % (SCR_MAILNONE, "0",)
    else:
        print SCR_FORMAT % (SCR_FAIL, "fail")
except:
    print SCR_FORMAT % (SCR_FAIL, "fail")

ファイル名には意味があって、「nn_vvvv」というファイル名の「nn」がステータス表示のリフレッシュ間隔になっている。なので、少し注意して設定する必要があると思う。単位は「秒」。今回は10分で新着チェックさせたいということで、「600_*」とした*1

保存したファイルに実行権限を与えてやる。

$ chmod +x $HOME/.byobu/bin/600_checkgmail

ここまでの手順でステータス表示に新しい項目が追加されるはず。

ちなみに出力時の色を変えたい場合の指定方法は、「man screen」を参考にしてほしい。

Colors are coded either as a hexadecimal number or two letters specify-
ing  the  desired  background and foreground color (in that order). The
following colors are known:

k      black
r      red
g      green
y      yellow
b      blue
m      magenta
c      cyan
w      white
d      default color
.      leave color unchanged

試してはいないけど、ボールドにしたり点滅させたりすることもできる模様。

「man byobu」にある手順ではうまくいかない

「man byobu」で出てくるスクリプトのサンプルだとなぜかうまくいかなかった。

#!/bin/sh
printf "\005{= bw}%s\005{-}" "$(uname -r)"

printfをecho に変えればうまくいった。このへんはよくわからない。改行が付与されていないといけないのかな。冒頭で書いたとおり、なぜかtmuxベースのbyobuではどっちのスクリプトでもうまくいかない。

*1:設定したスクリプトが実行中はbyobuがビジー状態というか操作不能な状態になってしまうので、少し時間がかかると思われるスクリプトは注意がいるかも。

広告を非表示にする