|
@@ -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.
|