Touch Barでメールの未読を通知する
Dockを消したい
MacOSには下部にはDockという、起動中のアプリケーションを表示しておく場所があります。各アプリケーションのアイコンの右上には、通知がある場合にその数が赤い丸で表示されます。一目で通知があるかを確認できるので、結構便利です。
ただ、Dockは下部のスペースを占領してしまって邪魔なので、隠したいというのは本当のところ。しかしそうすると、この通知のバッジも見られなくなってしまうのでメールが来ているかどうかを一目で確認することができません。そこで今回は、Touch Bar上に未読メールがあるかどうかを表示させるようにしてみたいと思います。
未読メールがあるかどうかをチェックする
MacOSで未読メールがあるかどうかを判断する方法として、以下の2つがあります。
- デフォルトのメールアプリMail.appから未読メール数を取得する
- メールサーバから未読メール数を取得する
前者はオフラインでも実行できるところが優れています。ただ、Mail.appから直接未読数を取得することができないため、メールを一通ずつ取得して未読かどうかを判断し、それをカウントすることになります。コードは以下のとおりです。
tell application "Mail" set unread to 0 repeat with msg in messages in inbox if msg's read status is not true then set unread to unread + 1 end if end repeat end tell return unread
やっていることは単純で、メールボックスのメールをすべて取り出して、ループで回しています。想像はつくと思いますが、これを実行するのにはかなり時間がかかり、システムの負担も大きいです。これでは常駐させるにはあまりにも向いていないため、メールサーバにアクセスする方法を取ることにしました。
僕はメインでGmailを使っているのですが、Gmailには未読メールを簡単に取得できるURLが存在します。URLにアクセスし、ユーザ名とパスワードを入力することで、未読メール数と各メールの概要をXML形式で取得することができます。fullcountというところを読めば、未読メールがいくつあるかを取得できます。
https://mail.google.com/gmail/feed/atom
<feed xmlns="http://purl.org/atom/ns#" version="0.3"> <title>Gmail - Inbox for <メールアドレス></title> <tagline>New messages in your Gmail Inbox</tagline> <fullcount>1</fullcount> <link rel="alternate" href="https://mail.google.com/mail" type="text/html"/> <modified>2018-09-12T05:54:12Z</modified> <entry> <title>テスト</title> <summary>本文です。</summary> ... </entry> </feed>
これを利用して、以下のスクリプトを書きました。
set xml_data to do shell script "curl -u \"<ユーザ名>\":\"<パスワード>\" --silent \"https://mail.google.com/mail/feed/atom\"" tell application "System Events" set xml_data to make new XML data with data xml_data set unread to xml_data's XML element "feed"'s XML element "fullcount"'s value end tell return unread
まずシェルスクリプトで先ほどのURLにアクセスしてXMLを受け取り、それをMacOSのSystem Eventsでパースし、
BetterTouchToolでウィジェットを作成
あとはこのスクリプトを組み込んだウィジェットをBetterTouchToolで作成します。
nexusuica.hatenablog.jp
定期的に上のスクリプトを実行し、実行結果が1以上であればアイコンと背景色を変更するようにしておきます(「Run Apple Script and Shown Return Value」)。また、アイコンをタッチするとMail.appが起動するようにしておきます(Action)。作成したものがこちら。これでDockを隠しておいたとしてもメールに気付かないということがなくなります。Touch Barも便利なものですね。