OSXのリマインダーにEmacsから一発登録

Emacs の scratch buffer に ToDo をメモっておいたのに、Emacsを再起動させてしまって人生の指針を失ってしまうのは、だれもが通る道だと思います(;・∀・)

そんなことをグチグチといっていったら、Mac の大先生より「リマインダー使え、さもなくば死ね(一部誇張があります)」というありがたいお告げを頂いたので、早速リマインダーを使うことにしました。Emacsから。

"Calendar and Reminders Programming Guide" を読んでみましたが、Objective-C を使うのも牛刀なかんじだったので、さくっと諦めて Automator を使うことにします。

Automator を作る

Automator っていわゆるひとつの Apple Script 実行環境です(よね?)

今回は引数のファイルの中身をリマインダーのタイトルに使って、リマインダーへ新規に登録する Automator を作ります。

  • Automator を起動します。「アプリケーション」を「選択」します。

f:id:yizawa:20120820144814p:plain

  • アクションライブラリから「新規リマインダー項目」を右のワークフローにドラッグ&ドロップします。

f:id:yizawa:20120820144846p:plain

f:id:yizawa:20120820144948p:plain

  • シェルを「/bin/sh」に、入力の引渡し方法を「引数として」に設定します。

f:id:yizawa:20120820145010p:plain

  • これに名前をつけて保存します。

今回は、"createreminder.app"として保存しました。

Emacsから使う

Emacsから先ほどのAutometorを呼ぶ関数を定義します。

(defun send-reminder ()
  (interactive
  (save-excursion
    (let ((tempfile 
	   (make-temp-name
	    (expand-file-name "createreminder"
			      temporary-file-directory)))
	  (crem-prog "/Users/izawa/Documents/createreminder.app")
	  (title (read-string "Reminder: ")))
      (with-temp-buffer
	(insert (concat title "\n"))
	(write-region (point-min) (point-max) tempfile))
      (call-process "/usr/bin/automator" nil nil nil "-i" tempfile crem-prog)
      (delete-file tempfile)))))

これを C-c # から呼べるようにします。

(global-set-key [(?\C-c) (\#)] 'send-reminder)

これで、Emacsのミニバッファに入力した内容がリマインダーに登録されるようになります。

リマインダーをチェックする癖を付けないといけないという噂もありやなしや…。