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
|
||||
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~
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue