2016年3月21日月曜日

appt-addでポップアップ

 たとえば、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 "タイムアップ"))))))