たとえば、8時になったらうっかり忘れないように、とEmacsで「appt-add」を利用している。3分後とかはdeferrdをつかってelispを組んであるのだが、時刻指定の場合は「appt-add」を使っているわけだ。
こんな感じだ。
(appt-add "11:30" "発走")
実行すると、11時30分に「発走」とメッセージされる。
これが便利で「M-:」でよく実行しているのだが、ひとつ不満があって——それはEmacs上にメッセージがでるので、ほかのアプリケーションをつかっていると、気づかないということだ。FreeBSDでMATEか、XfceではEmacs自体が最前面にだされていてそれで気づけていたのだが。
Macはそういう動きにはなっていないのだった。
ポップアップウィンドウでメッセージをだせれば、いいのだが。
「appt」系の設定を見てみたのだが、どうやら用意されていないようだった。そのかわり、「appt-disp-window-function」に独自に処理を組みこめるようになっている。
そこで次のようなfunctionをつくって組みこんだ。
(defun y-appt-disp-window (min-to-app new-time appt-msg) (let ((last-nonmenu-event nil) (use-dialog-box t)) (y-or-n-p appt-msg))) (setq appt-disp-window-function 'y-appt-disp-window)
うまく動いているようだ。
Macだと、別のデスクトップを表示していてもEmacsのアイコンが飛び跳ねてポップアップがあることを教えてくれる。
ちなみに3分後のタイムアップは次のようにしている。
(defun y-3() (interactive) (deferred:$ (deferred:wait (* 1000 60 3)) ; 3分後にタイムアップ (deferred:nextc it (lambda (x) (let ((last-nonmenu-event nil) (use-dialog-box t)) (yes-or-no-p "タイムアップ"))))))