rcmdnk's blog

20130418_gcalCal_200_200

GeekToolで使っていた gcalcliというpythonのアプリケーションが アップデートされていたのでアップデートついでに整理しておきます。

GeekTool

GeekTool 3.1.1(無料)
カテゴリ: ユーティリティ, 開発ツール
販売元: Tynsoe.org - Yann Bizeul(サイズ: 1.1 MB)

デスクトップ上に情報を表示させる方法は沢山ありますが、 GeekToolはMacで最も自由に表示をカスタマイズ出来るアプリの1つだと思います。

中でも、”Shell”と言うGeeklet(情報を表示するウィンドウ)を作る事が出来て、 適当なコマンドの出力結果をデスクトップに表示することが出来ます。

自分の環境ではこれを使ってGoogleカレンダーの予定やCPU/Memory情報の一部などを 表示させています。

gcalcli

gcalcliはpythonで作られた Googleカレンダーを操作することが出来るアプリケーションです。

インストールは上記ページから直接ダウンロードするかgit cloneで。

以前のパージョンでは必要なかったのですが、(v3から?)Google API Clientを使う 様になったので、これをインストールしておく必要があります。

gcalcliのインストールも含めて以下の様な感じで

1
2
3
4
5
$ cd /tmp
$ git clone git://github.com/insanum/gcalcli.git
$ mkdir -p ~/usr/bin # or as you like (in $PATH)
$ cp gcalcli/gcalcli ~/usr/bin
$ sudo  easy_install --upgrade google-api-python-client

以前のバージョンをインストールしていた場合、ユーザー名や パスワードを書いた~/.gcalclircと言うファイルがあるかもしれませんが、 新しいバージョンではユーザー名等は必要ないので特に凝った設定をしてない限りは 削除するかどこかへ移動させて置いた方が良いです(でないと新しいスクリプトでは 理解出来ない項目が出てきてクラッシュします)。

インストールしたら

gcalcli list

などとするとデフォルトブラウザが開いて

の様に許可をするかどうか聞かれるのでアクセスを許可をクリック。

すると、$HOME.gcalcli_oauthと言うファイルが出来ているはずで、 これが今後認証のために使われます。

以降、同じようにgcalcli list等とすればすぐにカレンダーのリストが 表れる様になります。

gcalcli agendaとすると予定の一覧が見れ、さらに--calendar [カレンダー名] オプションを与える事で予定を見るカレンダーを絞れます 1

表示させているGeeklet: カレンダー

まず1つ目はカレンダーです。見て分かる様にコマンドcalの様な出力にしています。

この出力はgcalCal というスクリプトで作っています。

やっていることは

  • dateコマンドを使って今月の日付一覧と(1日や31日と同じ週にある)前後の月の 埋め合わせ日付のリストを作る。
  • Googleカレンダーから予定のリストを取ってきて予定のある日をチェック。
    • Holidaysという名前を含むカレンダーの予定は別に取得。
  • 当日は色反転、予定のある日は'を、休みの日にはアンダーバーを付ける様にして 出力。

白黒だけでやろうとしているので'などを使っていますが、 色を使って良いのであれば休日は赤にして予定のある日にアンダーバーにする、 と言った方がすっきりすると思います。

表示させているGeeklet: 予定リスト

カレンダーの下には予定リストを表示しています。

場所を選ばなければ単にgcallist agendaの結果でも良いのですが、 オリジナルのままだと幅を取ってしまうので、 まずgcalcli自体を少しいじって agendaの表示方法を変えています。(使っているgcalcliv3.1)

gcalcli.diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
diff --git a/gcalcli b/gcalcli
index f5cc390..c39bc84 100755
--- a/gcalcli
+++ b/gcalcli
@@ -1074,7 +1074,7 @@ class gcalcli:
                     new_descr += wrapper.fill(line) + "\n"
             return new_descr.rstrip()

-        indent = 10 * ' '
+        indent = ''
         detailsIndent = 19 * ' '

         if self.military:
@@ -1092,11 +1092,11 @@ class gcalcli:
         PrintMsg(self.dateColor, prefix)
         if event['s'].hour == 0 and event['s'].minute == 0 and \
            event['e'].hour == 0 and event['e'].minute == 0:
-            fmt = '  ' + timeFormat + '  %s\n'
+            fmt = ' %s\n'
             PrintMsg(self._CalendarColor(event['gcalcli_cal']), fmt %
-                     ('', self._ValidTitle(event).strip()))
+                     (self._ValidTitle(event).strip()))
         else:
-            fmt = '  ' + timeFormat + '  %s\n'
+            fmt = ' ' + timeFormat + ' %s\n'
 #            if 'summary' not in event:
 #                dprint(event)
             PrintMsg(self._CalendarColor(event['gcalcli_cal']), fmt %
@@ -1318,7 +1318,7 @@ class gcalcli:
             return

         # 10 chars for day and length must match 'indent' in _PrintEvent
-        dayFormat = '\n%F' if yearDate else '\n%a %b %d'
+        dayFormat = '%d(%a)/%b/%Y:\n'
         day = ''

         for event in eventList:
@@ -1500,6 +1500,17 @@ class gcalcli:

         eventList = self._SearchForCalEvents(start, end, None)

+        # Remove duplications
+        events=[]
+        newEventList=[]
+        for e in eventList:
+            if e['summary'] not in events:
+                newEventList.append(e)
+                events.append(e['summary'])
+        eventList = newEventList
+
         if self.tsv:
             self._tsv(start, eventList)
         else:

上の変更で、さらに同じ名前の予定が複数ある時は最初だけを表示する様にしています。 (毎週ある予定等の重複表示を避けるため)

この変更を行ったgcalcligcalList というスクリプトを使って最終的に表示させています。

このスクリプトでは gmailFacebookTimeと付いたカレンダーのみに情報を取得して 表示させています。

表示させているGeeklet: タスクリスト

現在実際には使っていないのですが、iCalでのイベントを コマンドラインから呼べるicalBuddy と言うツールがあり、 これを使ってタスクリストを表示させていました。

icalBuddyをインストール後

`/usr/local/bin/icalBuddy uncompletedTasks | sed -e "s/*/-/"`

というコマンドを与えたGeekletです。

(現在はタスクリストはGoogle Taskに書き込んでいて、 iCalとは同期させていないので何も表示されません。)

表示させているGeeklet: CPU/Memory情報

最後にCPUやMemoryを使っているアプリの情報です。 これはpsの出力をちょっといじった出力にしています。

スクリプトはmyps です。

設定

上の例はカレンダー表示の例ですが、 このようにCommand欄にスクリプトを記入します。 その下にある数字で何秒ごとに更新するか(Refresh every)、と Timeoutの時間を設定します(上の例では5分毎)。

Position, Sizeは直接ウィンドウをいじっても変更出来ます。

フォントサイズはCPU/Memory情報が11ptで他は12ptにしています。

全部合わせて下の様な感じで、画面の右端に表示してあります。

Sponsored Links
  1. --calendarオプションで与える名前は省略されたものでも可能で、 与えられた名前が含まれるカレンダー全てが使われる様になっています。

Sponsored Links

« Octopressでのタグの運用 Macのデスクトップ上の情報表示 »

}