el/dot-emacs.el: Distinguish whether diary entries are processed for Org.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 22 Mar 2016 01:52:40 +0000 (01:52 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 22 Mar 2016 01:52:40 +0000 (01:52 +0000)
If not, then strip off Orgish hyperlink markup.  If so, then more
whitespace trimming is wanted for entries with times attached.

Also, add a diary sexp hack for hiding drivellous things from the Org
mode agenda.

el/dot-emacs.el

index b307dc2..d254154 100644 (file)
@@ -259,6 +259,11 @@ it's currently off."
 
 ;; Functions for sexp diary entries.
 
+(defun mdw-not-org-mode (form)
+  "As FORM, but not in Org mode agenda."
+  (and (not mdw-diary-for-org-mode-p)
+       (eval form)))
+
 (defun mdw-weekday (l)
   "Return non-nil if `date' falls on one of the days of the week in L.
 L is a list of day numbers (from 0 to 6 for Sunday through to
@@ -333,13 +338,33 @@ as output rather than a string."
                                (nth 2 when))))))))
     (eq w d)))
 
+(defvar mdw-diary-for-org-mode-p nil)
+
+(defadvice org-agenda-list (around mdw-preserve-links activate)
+  (let ((mdw-diary-for-org-mode-p t))
+    ad-do-it))
+
 (defadvice diary-add-to-list (before mdw-trim-leading-space activate)
   "Trim leading space from the diary entry string."
   (save-match-data
     (let ((str (ad-get-arg 1)))
-      (if (and str (string-match "^[ \t]+" str))
-         (let ((new (replace-match "" nil nil str)))
-           (ad-set-arg 1 new))))))
+      (ad-set-arg 1
+                 (cond ((null str) nil)
+                       ((and mdw-diary-for-org-mode-p
+                             (string-match (concat
+                                            "^[ \t]*"
+                                            "\\(" diary-time-regexp
+                                            "\\(-" diary-time-regexp "\\)?"
+                                            "\\)[ \t]+")
+                                           str))
+                        (replace-match "\\1 " nil nil str))
+                       ((string-match "^[ \t]+" str)
+                        (replace-match "" nil nil str))
+                       ((and (not mdw-diary-for-org-mode-p)
+                             (string-match "\\[\\[[^][]*]\\[\\([^][]*\\)]]"
+                                           str))
+                        (replace-match "\\1" nil nil str))
+                       (t str))))))
 
 ;; Fighting with Org-mode's evil key maps.