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.
This commit is contained in:
parent
601b8e1d52
commit
b6c5a174da
|
@ -135,6 +135,10 @@ See docstring for details.
|
||||||
=org-agenda-tags-column= can now be set to =auto=, which will
|
=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
|
automatically align tags to the right edge of the window. This is now
|
||||||
the default setting.
|
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~
|
*** New value for ~org-publish-sitemap-sort-folders~
|
||||||
|
|
||||||
|
|
|
@ -2064,6 +2064,22 @@ works you probably want to add it to `org-agenda-custom-commands' for good."
|
||||||
(setcdr ass (cdr entry))
|
(setcdr ass (cdr entry))
|
||||||
(push entry org-agenda-custom-commands))))
|
(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
|
;;; Define the org-agenda-mode
|
||||||
|
|
||||||
(defvar org-agenda-mode-map (make-sparse-keymap)
|
(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))
|
(w1 (org-days-to-iso-week d1))
|
||||||
(w2 (org-days-to-iso-week d2)))
|
(w2 (org-days-to-iso-week d2)))
|
||||||
(setq s (point))
|
(setq s (point))
|
||||||
(if org-agenda-overriding-header
|
(org-agenda--insert-overriding-header
|
||||||
(insert (org-add-props (copy-sequence org-agenda-overriding-header)
|
(concat (org-agenda-span-name span)
|
||||||
nil 'face 'org-agenda-structure) "\n")
|
|
||||||
(insert (org-agenda-span-name span)
|
|
||||||
"-agenda"
|
"-agenda"
|
||||||
(if (< (- d2 d1) 350)
|
(if (< (- d2 d1) 350)
|
||||||
(if (= w1 w2)
|
(if (= w1 w2)
|
||||||
|
@ -4576,25 +4590,25 @@ in `org-agenda-text-search-extra-files'."
|
||||||
(goto-char (1- end))))))))))
|
(goto-char (1- end))))))))))
|
||||||
(setq rtn (nreverse ee))
|
(setq rtn (nreverse ee))
|
||||||
(setq rtnall (append rtnall rtn)))
|
(setq rtnall (append rtnall rtn)))
|
||||||
(if org-agenda-overriding-header
|
(org-agenda--insert-overriding-header
|
||||||
(insert (org-add-props (copy-sequence org-agenda-overriding-header)
|
(with-temp-buffer
|
||||||
nil 'face 'org-agenda-structure) "\n")
|
(insert "Search words: ")
|
||||||
(insert "Search words: ")
|
(add-text-properties (point-min) (1- (point))
|
||||||
(add-text-properties (point-min) (1- (point))
|
(list 'face 'org-agenda-structure))
|
||||||
(list 'face 'org-agenda-structure))
|
(setq pos (point))
|
||||||
(setq pos (point))
|
(insert string "\n")
|
||||||
(insert string "\n")
|
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
|
||||||
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
|
(setq pos (point))
|
||||||
(setq pos (point))
|
(unless org-agenda-multi
|
||||||
(unless org-agenda-multi
|
(insert (substitute-command-keys "\
|
||||||
(insert (substitute-command-keys "\
|
|
||||||
Press `\\[org-agenda-manipulate-query-add]', \
|
Press `\\[org-agenda-manipulate-query-add]', \
|
||||||
`\\[org-agenda-manipulate-query-subtract]' to add/sub word, \
|
`\\[org-agenda-manipulate-query-subtract]' to add/sub word, \
|
||||||
`\\[org-agenda-manipulate-query-add-re]', \
|
`\\[org-agenda-manipulate-query-add-re]', \
|
||||||
`\\[org-agenda-manipulate-query-subtract-re]' to add/sub regexp, \
|
`\\[org-agenda-manipulate-query-subtract-re]' to add/sub regexp, \
|
||||||
`\\[universal-argument] \\[org-agenda-redo]' to edit\n"))
|
`\\[universal-argument] \\[org-agenda-redo]' to edit\n"))
|
||||||
(add-text-properties pos (1- (point))
|
(add-text-properties pos (1- (point))
|
||||||
(list 'face 'org-agenda-structure))))
|
(list 'face 'org-agenda-structure)))
|
||||||
|
(buffer-string)))
|
||||||
(org-agenda-mark-header-line (point-min))
|
(org-agenda-mark-header-line (point-min))
|
||||||
(when rtnall
|
(when rtnall
|
||||||
(insert (org-agenda-finalize-entries rtnall 'search) "\n"))
|
(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)
|
(org-check-agenda-file file)
|
||||||
(setq rtn (org-agenda-get-day-entries file date :todo))
|
(setq rtn (org-agenda-get-day-entries file date :todo))
|
||||||
(setq rtnall (append rtnall rtn))))
|
(setq rtnall (append rtnall rtn))))
|
||||||
(if org-agenda-overriding-header
|
(org-agenda--insert-overriding-header
|
||||||
(insert (org-add-props (copy-sequence org-agenda-overriding-header)
|
(with-temp-buffer
|
||||||
nil 'face 'org-agenda-structure) "\n")
|
(insert "Global list of TODO items of type: ")
|
||||||
(insert "Global list of TODO items of type: ")
|
(add-text-properties (point-min) (1- (point))
|
||||||
(add-text-properties (point-min) (1- (point))
|
(list 'face 'org-agenda-structure
|
||||||
(list 'face 'org-agenda-structure
|
'short-heading
|
||||||
'short-heading
|
(concat "ToDo: "
|
||||||
(concat "ToDo: "
|
(or org-select-this-todo-keyword "ALL"))))
|
||||||
(or org-select-this-todo-keyword "ALL"))))
|
(org-agenda-mark-header-line (point-min))
|
||||||
(org-agenda-mark-header-line (point-min))
|
(insert (org-agenda-propertize-selected-todo-keywords
|
||||||
(insert (org-agenda-propertize-selected-todo-keywords
|
org-select-this-todo-keyword))
|
||||||
org-select-this-todo-keyword))
|
(setq pos (point))
|
||||||
(setq pos (point))
|
(unless org-agenda-multi
|
||||||
(unless org-agenda-multi
|
(insert (substitute-command-keys "Available with \
|
||||||
(insert (substitute-command-keys "Available with \
|
|
||||||
`N \\[org-agenda-redo]': (0)[ALL]"))
|
`N \\[org-agenda-redo]': (0)[ALL]"))
|
||||||
(let ((n 0) s)
|
(let ((n 0) s)
|
||||||
(mapc (lambda (x)
|
(mapc (lambda (x)
|
||||||
(setq s (format "(%d)%s" (setq n (1+ n)) x))
|
(setq s (format "(%d)%s" (setq n (1+ n)) x))
|
||||||
(if (> (+ (current-column) (string-width s) 1) (frame-width))
|
(if (> (+ (current-column) (string-width s) 1) (frame-width))
|
||||||
(insert "\n "))
|
(insert "\n "))
|
||||||
(insert " " s))
|
(insert " " s))
|
||||||
kwds))
|
kwds))
|
||||||
(insert "\n"))
|
(insert "\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))
|
(org-agenda-mark-header-line (point-min))
|
||||||
(when rtnall
|
(when rtnall
|
||||||
(insert (org-agenda-finalize-entries rtnall 'todo) "\n"))
|
(insert (org-agenda-finalize-entries rtnall 'todo) "\n"))
|
||||||
|
@ -4774,24 +4788,24 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
|
||||||
matcher
|
matcher
|
||||||
org--matcher-tags-todo-only))
|
org--matcher-tags-todo-only))
|
||||||
(setq rtnall (append rtnall rtn))))))))
|
(setq rtnall (append rtnall rtn))))))))
|
||||||
(if org-agenda-overriding-header
|
(org-agenda--insert-overriding-header
|
||||||
(insert (org-add-props (copy-sequence org-agenda-overriding-header)
|
(with-temp-buffer
|
||||||
nil 'face 'org-agenda-structure) "\n")
|
(insert "Headlines with TAGS match: ")
|
||||||
(insert "Headlines with TAGS match: ")
|
(add-text-properties (point-min) (1- (point))
|
||||||
(add-text-properties (point-min) (1- (point))
|
(list 'face 'org-agenda-structure
|
||||||
(list 'face 'org-agenda-structure
|
'short-heading
|
||||||
'short-heading
|
(concat "Match: " match)))
|
||||||
(concat "Match: " match)))
|
(setq pos (point))
|
||||||
(setq pos (point))
|
(insert match "\n")
|
||||||
(insert match "\n")
|
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
|
||||||
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
|
(setq pos (point))
|
||||||
(setq pos (point))
|
(unless org-agenda-multi
|
||||||
(unless org-agenda-multi
|
(insert (substitute-command-keys
|
||||||
(insert (substitute-command-keys
|
"Press `\\[universal-argument] \\[org-agenda-redo]' \
|
||||||
"Press `\\[universal-argument] \\[org-agenda-redo]' \
|
|
||||||
to search again with new search string\n")))
|
to search again with new search string\n")))
|
||||||
(add-text-properties pos (1- (point))
|
(add-text-properties pos (1- (point))
|
||||||
(list 'face 'org-agenda-structure)))
|
(list 'face 'org-agenda-structure))
|
||||||
|
(buffer-string)))
|
||||||
(org-agenda-mark-header-line (point-min))
|
(org-agenda-mark-header-line (point-min))
|
||||||
(when rtnall
|
(when rtnall
|
||||||
(insert (org-agenda-finalize-entries rtnall 'tags) "\n"))
|
(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
|
(defvar org-agenda-overriding-header nil
|
||||||
"When set during agenda, todo and tags searches it replaces the header.
|
"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
|
If an empty string, no header will be inserted. If any other
|
||||||
in the options section.")
|
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)
|
(defun org-agenda-skip-entry-if (&rest conditions)
|
||||||
"Skip entry if any of CONDITIONS is true.
|
"Skip entry if any of CONDITIONS is true.
|
||||||
|
|
Loading…
Reference in New Issue