org-modeのagendaを月カレンダー形式で表示してくれるcalfw.elだが、以前から、数日間にわたるイベントの表示が乱れる。どうやらorg-modeの仕様変更に、calfwが対応していないことが原因らしい。Webを検索すると、calfw.elを修正するパッチがあるが、ソースを変更すると今後面倒なことになりそうなので、init.elに関数をオーバーライドする記述を加える方式を採用する。
;; the code is cited from https://github.com/kiwanami/emacs-calfw/issues/111 :config ;; hotfix: incorrect time range display ;; source: https://github.com/zemaye/emacs-calfw/commit/3d17649c545423d919fd3bb9de2efe6dfff210fe (defun cfw:org-get-timerange (text) "Return a range object (begin end text). If TEXT does not have a range, return nil." (let* ((dotime (cfw:org-tp text 'dotime))) (and (stringp dotime) (string-match org-ts-regexp dotime) (let* ((matches (s-match-strings-all org-ts-regexp dotime)) (start-date (nth 1 (car matches))) (end-date (nth 1 (nth 1 matches))) (extra (cfw:org-tp text 'extra))) (if (string-match "(\\([0-9]+\\)/\\([0-9]+\\)): " extra) ( list( calendar-gregorian-from-absolute (time-to-days (org-read-date nil t start-date)) ) (calendar-gregorian-from-absolute (time-to-days (org-read-date nil t end-date))) text))))))