org-modeでの詳細なスケジュール設定方法
emacsでorg-modeを利用していて、ちょっと複雑なスケジュールを設定したい時に困ったので、調べたことをメモしておきます。 org-modeのFAQ によれば、以下のような指定ができるようです。
org-modeで複雑な予定を設定する。
1) 長期間に渡る予定 <日付>と<日付>を -- でつなぐ。
* 休暇 <2009-03-20 Fri>--<2009-04-01 Wed>
限られた期間のスケジュールは・・・
** 授業 7:00pm-9:00pm <%%(org-class 2009 2 16 2009 4 20 1 10)>
・・・という書き方もあります。最後の 1 と 10 で、それぞれ月曜日、第10週を例外としています。
例外とする週を設定できるのは便利ですが、1年の通算週での指定なのが、少し不便かも。
2) 毎週繰り返される予定 日程にどういう周期で繰り返されるのかを設定。
* 定例ミーティング <2009-01-20 Tue 14:00 +1w>
例の場合、+1w で毎週の繰り返し、+3dなら3日ごとの繰り返し、+1mなら1ヶ月ごとの繰り返し。 指定方法は、+1wの他に .+1wという形式もあるようですが、2つの違いが今ひとつわかってないかも。(^^;
3) 週末以外に繰り返される予定の設定方法。
** 毎日の会議 <%%(memq (calendar-day-of-week date) '(1 2 3 4 5))>
例は、土日以外に実施される予定。
4) 毎月第3水曜日に繰り返す設定。
* 月例会議 <%%(diary-float t 3 3)>
5) ある期間の特定の曜日のスケジュール設定。
** 授業 7:00pm-9:00pm <%%(and (= 1 (calendar-day-of-week date)) (diary-block 2 16 2009 4 20 2009))>
例は、2009年の2月16日から4月20日の毎週月曜日を指定した場合。 曜日は、日曜 = 0、月曜 = 1・・・で指定。
もっと複雑な・・・
** 授業 7:00pm-9:00pm <%%(unless (diary-block 3 9 2009 3 13 2009) (and (= 1 (calendar-day-of-week date)) (diary-block 2 16 2009 4 20 2009)))>
・・・といった設定もできるようですが、あまり複雑にすると何を設定したのか把握しづらいかも。(^^;
その他の例も、org-FAQで紹介されていますが、個人的には上の設定くらいで十分かも。
[おまけ]Macの通知センターを使って予定を通知する方法
mac の場合 terminal-notifier を導入すると、mac の通知センターからも予定を通知してくれるようになるので便利です。(emacsの設定は、以下を参照)
;; 予定を通知センターで表示 (setq appt-time-msg-list nil) ;; clear existing appt list (setq appt-display-interval '10) ;; warn every 10 minutes from t - appt-message-warning-time (setq appt-message-warning-time '10 ;; send first warning 10 minutes before appointment appt-display-mode-line nil ;; don't show in the modeline appt-display-format 'window) ;; pass warnings to the designated window function (appt-activate 1) ;; activate appointment notification (org-agenda-to-appt) ;; generate the appt list from org agenda files on emacs launch (run-at-time "24:01" 3600 'org-agenda-to-appt) ;; update appt list hourly (add-hook 'org-finalize-agenda-hook 'org-agenda-to-appt) ;; update appt list on agenda view ;; set up the call to terminal-notifier (Defvar my-notifier-path "terminal-notifier") (defun my-appt-send-notification (title msg) (shell-command (concat my-notifier-path " -message " msg " -title " title " -sender org.gnu.Emacs -active org.gnu.Emacs" " -sound Funk"))) ;; designate the window function for my-appt-send-notification (defun my-appt-display (min-to-app new-time msg) (my-appt-send-notification (format "'Appointment in %s minutes'" min-to-app) (format "'%s'" msg))) ;; Call function my-appt-display before function appt-display-window. (advice-add 'appt-disp-window :before 'my-appt-display) ; 保存時にorg-agenda-to-apptを実行 (add-hook 'org-mode-hook (lambda() (add-hook 'before-save-hook 'org-agenda-to-appt t)))