summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Porter <adam@alphapapa.net>2017-08-19 21:26:12 -0500
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2017-09-06 13:13:59 +0200
commitb6c5a174da7523864d82f6d91cce272d38c1dc95 (patch)
tree1616b2b1381f0f9f2d6baeba3a53a2316bdb093b
parent601b8e1d52c36a75da1361074855d92f3da111b6 (diff)
downloadorg-mode-b6c5a174da7523864d82f6d91cce272d38c1dc95.tar.gz
org-agenda: Refactor org-agenda-overriding-header code
* lisp/org-agenda.el (org-agenda--insert-overriding-header): Add macro. (org-agenda-list) (org-search-view) (org-todo-list) (org-tags-view): Use macro. (org-agenda-overriding-header): Update docstring. * etc/ORG-NEWS: Explain that header can be disabled with empty string. Replace org-agenda-overriding-header tests in these four functions with calls to a macro, eliminating the duplicate code. Also, disable the header when the variable is set to the empty string.
-rw-r--r--etc/ORG-NEWS4
-rw-r--r--lisp/org-agenda.el139
2 files changed, 82 insertions, 61 deletions
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 9f3e624..05b1418 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -135,6 +135,10 @@ See docstring for details.
=org-agenda-tags-column= can now be set to =auto=, which will
automatically align tags to the right edge of the window. This is now
the default setting.
+**** Disable =org-agenda-overriding-header= by setting to empty string
+
+The =org-agenda-overriding-header= inserted into agenda views can now be
+disabled by setting it to an empty string.
*** New value for ~org-publish-sitemap-sort-folders~
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 465e7e0..5482ef4 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -2064,6 +2064,22 @@ works you probably want to add it to `org-agenda-custom-commands' for good."
(setcdr ass (cdr entry))
(push entry org-agenda-custom-commands))))
+(defmacro org-agenda--insert-overriding-header (default)
+ "Insert header into agenda view depending on value of `org-agenda-overriding-header'.
+If the empty string, don't insert a header. If any other string,
+insert it as a header. If nil, insert DEFAULT, which should
+evaluate to a string."
+ (declare (debug (form)) (indent defun))
+ `(pcase org-agenda-overriding-header
+ ("" nil) ; Don't insert a header if set to empty string
+ ;; Insert user-specified string
+ ((pred stringp) (insert
+ (org-add-props (copy-sequence org-agenda-overriding-header)
+ nil 'face 'org-agenda-structure)
+ "\n"))
+ ;; When nil, make string automatically and insert it
+ ((pred null) (insert ,default))))
+
;;; Define the org-agenda-mode
(defvar org-agenda-mode-map (make-sparse-keymap)
@@ -4155,10 +4171,8 @@ items if they have an hour specification like [h]h:mm."
(w1 (org-days-to-iso-week d1))
(w2 (org-days-to-iso-week d2)))
(setq s (point))
- (if org-agenda-overriding-header
- (insert (org-add-props (copy-sequence org-agenda-overriding-header)
- nil 'face 'org-agenda-structure) "\n")
- (insert (org-agenda-span-name span)
+ (org-agenda--insert-overriding-header
+ (concat (org-agenda-span-name span)
"-agenda"
(if (< (- d2 d1) 350)
(if (= w1 w2)
@@ -4576,25 +4590,25 @@ in `org-agenda-text-search-extra-files'."
(goto-char (1- end))))))))))
(setq rtn (nreverse ee))
(setq rtnall (append rtnall rtn)))
- (if org-agenda-overriding-header
- (insert (org-add-props (copy-sequence org-agenda-overriding-header)
- nil 'face 'org-agenda-structure) "\n")
- (insert "Search words: ")
- (add-text-properties (point-min) (1- (point))
- (list 'face 'org-agenda-structure))
- (setq pos (point))
- (insert string "\n")
- (add-text-properties pos (1- (point)) (list 'face 'org-warning))
- (setq pos (point))
- (unless org-agenda-multi
- (insert (substitute-command-keys "\
+ (org-agenda--insert-overriding-header
+ (with-temp-buffer
+ (insert "Search words: ")
+ (add-text-properties (point-min) (1- (point))
+ (list 'face 'org-agenda-structure))
+ (setq pos (point))
+ (insert string "\n")
+ (add-text-properties pos (1- (point)) (list 'face 'org-warning))
+ (setq pos (point))
+ (unless org-agenda-multi
+ (insert (substitute-command-keys "\
Press `\\[org-agenda-manipulate-query-add]', \
`\\[org-agenda-manipulate-query-subtract]' to add/sub word, \
`\\[org-agenda-manipulate-query-add-re]', \
`\\[org-agenda-manipulate-query-subtract-re]' to add/sub regexp, \
`\\[universal-argument] \\[org-agenda-redo]' to edit\n"))
- (add-text-properties pos (1- (point))
- (list 'face 'org-agenda-structure))))
+ (add-text-properties pos (1- (point))
+ (list 'face 'org-agenda-structure)))
+ (buffer-string)))
(org-agenda-mark-header-line (point-min))
(when rtnall
(insert (org-agenda-finalize-entries rtnall 'search) "\n"))
@@ -4672,31 +4686,31 @@ for a keyword. A numeric prefix directly selects the Nth keyword in
(org-check-agenda-file file)
(setq rtn (org-agenda-get-day-entries file date :todo))
(setq rtnall (append rtnall rtn))))
- (if org-agenda-overriding-header
- (insert (org-add-props (copy-sequence org-agenda-overriding-header)
- nil 'face 'org-agenda-structure) "\n")
- (insert "Global list of TODO items of type: ")
- (add-text-properties (point-min) (1- (point))
- (list 'face 'org-agenda-structure
- 'short-heading
- (concat "ToDo: "
- (or org-select-this-todo-keyword "ALL"))))
- (org-agenda-mark-header-line (point-min))
- (insert (org-agenda-propertize-selected-todo-keywords
- org-select-this-todo-keyword))
- (setq pos (point))
- (unless org-agenda-multi
- (insert (substitute-command-keys "Available with \
+ (org-agenda--insert-overriding-header
+ (with-temp-buffer
+ (insert "Global list of TODO items of type: ")
+ (add-text-properties (point-min) (1- (point))
+ (list 'face 'org-agenda-structure
+ 'short-heading
+ (concat "ToDo: "
+ (or org-select-this-todo-keyword "ALL"))))
+ (org-agenda-mark-header-line (point-min))
+ (insert (org-agenda-propertize-selected-todo-keywords
+ org-select-this-todo-keyword))
+ (setq pos (point))
+ (unless org-agenda-multi
+ (insert (substitute-command-keys "Available with \
`N \\[org-agenda-redo]': (0)[ALL]"))
- (let ((n 0) s)
- (mapc (lambda (x)
- (setq s (format "(%d)%s" (setq n (1+ n)) x))
- (if (> (+ (current-column) (string-width s) 1) (frame-width))
- (insert "\n "))
- (insert " " s))
- kwds))
- (insert "\n"))
- (add-text-properties pos (1- (point)) (list 'face 'org-agenda-structure)))
+ (let ((n 0) s)
+ (mapc (lambda (x)
+ (setq s (format "(%d)%s" (setq n (1+ n)) x))
+ (if (> (+ (current-column) (string-width s) 1) (frame-width))
+ (insert "\n "))
+ (insert " " s))
+ kwds))
+ (insert "\n"))
+ (add-text-properties pos (1- (point)) (list 'face 'org-agenda-structure))
+ (buffer-string)))
(org-agenda-mark-header-line (point-min))
(when rtnall
(insert (org-agenda-finalize-entries rtnall 'todo) "\n"))
@@ -4774,24 +4788,24 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
matcher
org--matcher-tags-todo-only))
(setq rtnall (append rtnall rtn))))))))
- (if org-agenda-overriding-header
- (insert (org-add-props (copy-sequence org-agenda-overriding-header)
- nil 'face 'org-agenda-structure) "\n")
- (insert "Headlines with TAGS match: ")
- (add-text-properties (point-min) (1- (point))
- (list 'face 'org-agenda-structure
- 'short-heading
- (concat "Match: " match)))
- (setq pos (point))
- (insert match "\n")
- (add-text-properties pos (1- (point)) (list 'face 'org-warning))
- (setq pos (point))
- (unless org-agenda-multi
- (insert (substitute-command-keys
- "Press `\\[universal-argument] \\[org-agenda-redo]' \
+ (org-agenda--insert-overriding-header
+ (with-temp-buffer
+ (insert "Headlines with TAGS match: ")
+ (add-text-properties (point-min) (1- (point))
+ (list 'face 'org-agenda-structure
+ 'short-heading
+ (concat "Match: " match)))
+ (setq pos (point))
+ (insert match "\n")
+ (add-text-properties pos (1- (point)) (list 'face 'org-warning))
+ (setq pos (point))
+ (unless org-agenda-multi
+ (insert (substitute-command-keys
+ "Press `\\[universal-argument] \\[org-agenda-redo]' \
to search again with new search string\n")))
- (add-text-properties pos (1- (point))
- (list 'face 'org-agenda-structure)))
+ (add-text-properties pos (1- (point))
+ (list 'face 'org-agenda-structure))
+ (buffer-string)))
(org-agenda-mark-header-line (point-min))
(when rtnall
(insert (org-agenda-finalize-entries rtnall 'tags) "\n"))
@@ -4815,8 +4829,11 @@ used by user-defined selections using `org-agenda-skip-function'.")
(defvar org-agenda-overriding-header nil
"When set during agenda, todo and tags searches it replaces the header.
-This variable should not be set directly, but custom commands can bind it
-in the options section.")
+If an empty string, no header will be inserted. If any other
+string, it will be inserted as a header. If nil, a header will
+be generated automatically according to the command. This
+variable should not be set directly, but custom commands can bind
+it in the options section.")
(defun org-agenda-skip-entry-if (&rest conditions)
"Skip entry if any of CONDITIONS is true.