Merge branch 'maint'
This commit is contained in:
commit
b63867726b
|
@ -3005,6 +3005,8 @@ This ensures the export commands can easily use it."
|
|||
(kill-buffer bufname)))))))
|
||||
(def-edebug-spec org-batch-store-agenda-views (&rest sexp))
|
||||
|
||||
(defvar org-agenda-current-span nil
|
||||
"The current span used in the agenda view.") ; local variable in the agenda buffer
|
||||
(defun org-agenda-mark-header-line (pos)
|
||||
"Mark the line at POS as an agenda structure header."
|
||||
(save-excursion
|
||||
|
@ -3818,8 +3820,6 @@ When EMPTY is non-nil, also include days without any entries."
|
|||
"Start day for the agenda view.
|
||||
Custom commands can set this variable in the options section.")
|
||||
(defvar org-starting-day nil) ; local variable in the agenda buffer
|
||||
(defvar org-agenda-current-span nil
|
||||
"The current span used in the agenda view.") ; local variable in the agenda buffer
|
||||
(defvar org-arg-loc nil) ; local variable
|
||||
|
||||
(defvar org-agenda-entry-types '(:deadline :scheduled :timestamp :sexp)
|
||||
|
@ -4131,9 +4131,6 @@ as a whole, to include whitespace.
|
|||
This command searches the agenda files, and in addition the files listed
|
||||
in `org-agenda-text-search-extra-files'."
|
||||
(interactive "P")
|
||||
(org-agenda-prepare "SEARCH")
|
||||
(org-compile-prefix-format 'search)
|
||||
(org-set-sorting-strategy 'search)
|
||||
(let* ((props (list 'face nil
|
||||
'done-face 'org-agenda-done
|
||||
'org-not-done-regexp org-not-done-regexp
|
||||
|
@ -4157,177 +4154,186 @@ in `org-agenda-text-search-extra-files'."
|
|||
((integerp edit-at) (cons string edit-at))
|
||||
(edit-at string))
|
||||
'org-agenda-search-history)))
|
||||
(org-set-local 'org-todo-only todo-only)
|
||||
(setq org-agenda-redo-command
|
||||
(list 'org-search-view (if todo-only t nil) string
|
||||
'(if current-prefix-arg 1 nil)))
|
||||
(setq org-agenda-query-string string)
|
||||
|
||||
(if (equal (string-to-char string) ?*)
|
||||
(setq hdl-only t
|
||||
words (substring string 1))
|
||||
(setq words string))
|
||||
(when (equal (string-to-char words) ?!)
|
||||
(setq todo-only t
|
||||
words (substring words 1)))
|
||||
(when (equal (string-to-char words) ?:)
|
||||
(setq full-words t
|
||||
words (substring words 1)))
|
||||
(if (or org-agenda-search-view-always-boolean
|
||||
(member (string-to-char words) '(?- ?+ ?\{)))
|
||||
(setq boolean t))
|
||||
(setq words (org-split-string words))
|
||||
(let (www w)
|
||||
(while (setq w (pop words))
|
||||
(while (and (string-match "\\\\\\'" w) words)
|
||||
(setq w (concat (substring w 0 -1) " " (pop words))))
|
||||
(push w www))
|
||||
(setq words (nreverse www) www nil)
|
||||
(while (setq w (pop words))
|
||||
(when (and (string-match "\\`[-+]?{" w)
|
||||
(not (string-match "}\\'" w)))
|
||||
(while (and words (not (string-match "}\\'" (car words))))
|
||||
(setq w (concat w " " (pop words))))
|
||||
(setq w (concat w " " (pop words))))
|
||||
(push w www))
|
||||
(setq words (nreverse www)))
|
||||
(setq org-agenda-last-search-view-search-was-boolean boolean)
|
||||
(when boolean
|
||||
(let (wds w)
|
||||
(catch 'exit
|
||||
(if org-agenda-sticky
|
||||
(setq org-agenda-buffer-name
|
||||
(if (stringp string)
|
||||
(format "*Org Agenda(%s:%s)*"
|
||||
(or keys (or (and todo-only "S") "s")) string)
|
||||
(format "*Org Agenda(%s)*" (or (and todo-only "S") "s")))))
|
||||
(org-agenda-prepare "SEARCH")
|
||||
(org-compile-prefix-format 'search)
|
||||
(org-set-sorting-strategy 'search)
|
||||
(org-set-local 'org-todo-only todo-only)
|
||||
(setq org-agenda-redo-command
|
||||
(list 'org-search-view (if todo-only t nil) string
|
||||
'(if current-prefix-arg 1 nil)))
|
||||
(setq org-agenda-query-string string)
|
||||
(if (equal (string-to-char string) ?*)
|
||||
(setq hdl-only t
|
||||
words (substring string 1))
|
||||
(setq words string))
|
||||
(when (equal (string-to-char words) ?!)
|
||||
(setq todo-only t
|
||||
words (substring words 1)))
|
||||
(when (equal (string-to-char words) ?:)
|
||||
(setq full-words t
|
||||
words (substring words 1)))
|
||||
(if (or org-agenda-search-view-always-boolean
|
||||
(member (string-to-char words) '(?- ?+ ?\{)))
|
||||
(setq boolean t))
|
||||
(setq words (org-split-string words))
|
||||
(let (www w)
|
||||
(while (setq w (pop words))
|
||||
(if (or (equal (substring w 0 1) "\"")
|
||||
(and (> (length w) 1)
|
||||
(member (substring w 0 1) '("+" "-"))
|
||||
(equal (substring w 1 2) "\"")))
|
||||
(while (and words (not (equal (substring w -1) "\"")))
|
||||
(setq w (concat w " " (pop words)))))
|
||||
(and (string-match "\\`\\([-+]?\\)\"" w)
|
||||
(setq w (replace-match "\\1" nil nil w)))
|
||||
(and (equal (substring w -1) "\"") (setq w (substring w 0 -1)))
|
||||
(push w wds))
|
||||
(setq words (nreverse wds))))
|
||||
(if boolean
|
||||
(mapc (lambda (w)
|
||||
(setq c (string-to-char w))
|
||||
(if (equal c ?-)
|
||||
(setq neg t w (substring w 1))
|
||||
(if (equal c ?+)
|
||||
(setq neg nil w (substring w 1))
|
||||
(setq neg nil)))
|
||||
(if (string-match "\\`{.*}\\'" w)
|
||||
(setq re (substring w 1 -1))
|
||||
(if full-words
|
||||
(setq re (concat "\\<" (regexp-quote (downcase w)) "\\>"))
|
||||
(setq re (regexp-quote (downcase w)))))
|
||||
(if neg (push re regexps-) (push re regexps+)))
|
||||
words)
|
||||
(push (mapconcat (lambda (w) (regexp-quote w)) words "\\s-+")
|
||||
regexps+))
|
||||
(setq regexps+ (sort regexps+ (lambda (a b) (> (length a) (length b)))))
|
||||
(if (not regexps+)
|
||||
(setq regexp org-outline-regexp-bol)
|
||||
(setq regexp (pop regexps+))
|
||||
(if hdl-only (setq regexp (concat org-outline-regexp-bol ".*?"
|
||||
regexp))))
|
||||
(setq files (org-agenda-files nil 'ifmode))
|
||||
(when (eq (car org-agenda-text-search-extra-files) 'agenda-archives)
|
||||
(pop org-agenda-text-search-extra-files)
|
||||
(setq files (org-add-archive-files files)))
|
||||
(setq files (append files org-agenda-text-search-extra-files)
|
||||
rtnall nil)
|
||||
(while (setq file (pop files))
|
||||
(setq ee nil)
|
||||
(catch 'nextfile
|
||||
(org-check-agenda-file file)
|
||||
(setq buffer (if (file-exists-p file)
|
||||
(org-get-agenda-file-buffer file)
|
||||
(error "No such file %s" file)))
|
||||
(if (not buffer)
|
||||
;; If file does not exist, make sure an error message is sent
|
||||
(setq rtn (list (format "ORG-AGENDA-ERROR: No such org-file %s"
|
||||
file))))
|
||||
(with-current-buffer buffer
|
||||
(with-syntax-table (org-search-syntax-table)
|
||||
(unless (derived-mode-p 'org-mode)
|
||||
(error "Agenda file %s is not in `org-mode'" file))
|
||||
(let ((case-fold-search t))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(if org-agenda-restrict
|
||||
(narrow-to-region org-agenda-restrict-begin
|
||||
org-agenda-restrict-end)
|
||||
(widen))
|
||||
(goto-char (point-min))
|
||||
(unless (or (org-at-heading-p)
|
||||
(outline-next-heading))
|
||||
(throw 'nextfile t))
|
||||
(goto-char (max (point-min) (1- (point))))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(org-back-to-heading t)
|
||||
(skip-chars-forward "* ")
|
||||
(setq beg (point-at-bol)
|
||||
beg1 (point)
|
||||
end (progn (outline-next-heading) (point)))
|
||||
(catch :skip
|
||||
(goto-char beg)
|
||||
(org-agenda-skip)
|
||||
(setq str (buffer-substring-no-properties
|
||||
(point-at-bol)
|
||||
(if hdl-only (point-at-eol) end)))
|
||||
(mapc (lambda (wr) (when (string-match wr str)
|
||||
(goto-char (1- end))
|
||||
(throw :skip t)))
|
||||
regexps-)
|
||||
(mapc (lambda (wr) (unless (string-match wr str)
|
||||
(goto-char (1- end))
|
||||
(throw :skip t)))
|
||||
(if todo-only
|
||||
(cons (concat "^\*+[ \t]+" org-not-done-regexp)
|
||||
regexps+)
|
||||
regexps+))
|
||||
(goto-char beg)
|
||||
(setq marker (org-agenda-new-marker (point))
|
||||
category (org-get-category)
|
||||
category-pos (get-text-property (point) 'org-category-position)
|
||||
tags (org-get-tags-at (point))
|
||||
txt (org-agenda-format-item
|
||||
""
|
||||
(buffer-substring-no-properties
|
||||
beg1 (point-at-eol))
|
||||
category tags))
|
||||
(org-add-props txt props
|
||||
'org-marker marker 'org-hd-marker marker
|
||||
'org-todo-regexp org-todo-regexp
|
||||
'org-complex-heading-regexp org-complex-heading-regexp
|
||||
'priority 1000 'org-category category
|
||||
'org-category-position category-pos
|
||||
'type "search")
|
||||
(push txt ee)
|
||||
(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 "Press `[', `]' to add/sub word, `{', `}' to add/sub regexp, `C-u r' to edit\n")
|
||||
(add-text-properties pos (1- (point))
|
||||
(list 'face 'org-agenda-structure))))
|
||||
(org-agenda-mark-header-line (point-min))
|
||||
(when rtnall
|
||||
(insert (org-finalize-agenda-entries rtnall) "\n"))
|
||||
(goto-char (point-min))
|
||||
(or org-agenda-multi (org-agenda-fit-window-to-buffer))
|
||||
(add-text-properties (point-min) (point-max) '(org-agenda-type search))
|
||||
(org-finalize-agenda)
|
||||
(setq buffer-read-only t)))
|
||||
(while (and (string-match "\\\\\\'" w) words)
|
||||
(setq w (concat (substring w 0 -1) " " (pop words))))
|
||||
(push w www))
|
||||
(setq words (nreverse www) www nil)
|
||||
(while (setq w (pop words))
|
||||
(when (and (string-match "\\`[-+]?{" w)
|
||||
(not (string-match "}\\'" w)))
|
||||
(while (and words (not (string-match "}\\'" (car words))))
|
||||
(setq w (concat w " " (pop words))))
|
||||
(setq w (concat w " " (pop words))))
|
||||
(push w www))
|
||||
(setq words (nreverse www)))
|
||||
(setq org-agenda-last-search-view-search-was-boolean boolean)
|
||||
(when boolean
|
||||
(let (wds w)
|
||||
(while (setq w (pop words))
|
||||
(if (or (equal (substring w 0 1) "\"")
|
||||
(and (> (length w) 1)
|
||||
(member (substring w 0 1) '("+" "-"))
|
||||
(equal (substring w 1 2) "\"")))
|
||||
(while (and words (not (equal (substring w -1) "\"")))
|
||||
(setq w (concat w " " (pop words)))))
|
||||
(and (string-match "\\`\\([-+]?\\)\"" w)
|
||||
(setq w (replace-match "\\1" nil nil w)))
|
||||
(and (equal (substring w -1) "\"") (setq w (substring w 0 -1)))
|
||||
(push w wds))
|
||||
(setq words (nreverse wds))))
|
||||
(if boolean
|
||||
(mapc (lambda (w)
|
||||
(setq c (string-to-char w))
|
||||
(if (equal c ?-)
|
||||
(setq neg t w (substring w 1))
|
||||
(if (equal c ?+)
|
||||
(setq neg nil w (substring w 1))
|
||||
(setq neg nil)))
|
||||
(if (string-match "\\`{.*}\\'" w)
|
||||
(setq re (substring w 1 -1))
|
||||
(if full-words
|
||||
(setq re (concat "\\<" (regexp-quote (downcase w)) "\\>"))
|
||||
(setq re (regexp-quote (downcase w)))))
|
||||
(if neg (push re regexps-) (push re regexps+)))
|
||||
words)
|
||||
(push (mapconcat (lambda (w) (regexp-quote w)) words "\\s-+")
|
||||
regexps+))
|
||||
(setq regexps+ (sort regexps+ (lambda (a b) (> (length a) (length b)))))
|
||||
(if (not regexps+)
|
||||
(setq regexp org-outline-regexp-bol)
|
||||
(setq regexp (pop regexps+))
|
||||
(if hdl-only (setq regexp (concat org-outline-regexp-bol ".*?"
|
||||
regexp))))
|
||||
(setq files (org-agenda-files nil 'ifmode))
|
||||
(when (eq (car org-agenda-text-search-extra-files) 'agenda-archives)
|
||||
(pop org-agenda-text-search-extra-files)
|
||||
(setq files (org-add-archive-files files)))
|
||||
(setq files (append files org-agenda-text-search-extra-files)
|
||||
rtnall nil)
|
||||
(while (setq file (pop files))
|
||||
(setq ee nil)
|
||||
(catch 'nextfile
|
||||
(org-check-agenda-file file)
|
||||
(setq buffer (if (file-exists-p file)
|
||||
(org-get-agenda-file-buffer file)
|
||||
(error "No such file %s" file)))
|
||||
(if (not buffer)
|
||||
;; If file does not exist, make sure an error message is sent
|
||||
(setq rtn (list (format "ORG-AGENDA-ERROR: No such org-file %s"
|
||||
file))))
|
||||
(with-current-buffer buffer
|
||||
(with-syntax-table (org-search-syntax-table)
|
||||
(unless (derived-mode-p 'org-mode)
|
||||
(error "Agenda file %s is not in `org-mode'" file))
|
||||
(let ((case-fold-search t))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(if org-agenda-restrict
|
||||
(narrow-to-region org-agenda-restrict-begin
|
||||
org-agenda-restrict-end)
|
||||
(widen))
|
||||
(goto-char (point-min))
|
||||
(unless (or (org-at-heading-p)
|
||||
(outline-next-heading))
|
||||
(throw 'nextfile t))
|
||||
(goto-char (max (point-min) (1- (point))))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(org-back-to-heading t)
|
||||
(skip-chars-forward "* ")
|
||||
(setq beg (point-at-bol)
|
||||
beg1 (point)
|
||||
end (progn (outline-next-heading) (point)))
|
||||
(catch :skip
|
||||
(goto-char beg)
|
||||
(org-agenda-skip)
|
||||
(setq str (buffer-substring-no-properties
|
||||
(point-at-bol)
|
||||
(if hdl-only (point-at-eol) end)))
|
||||
(mapc (lambda (wr) (when (string-match wr str)
|
||||
(goto-char (1- end))
|
||||
(throw :skip t)))
|
||||
regexps-)
|
||||
(mapc (lambda (wr) (unless (string-match wr str)
|
||||
(goto-char (1- end))
|
||||
(throw :skip t)))
|
||||
(if todo-only
|
||||
(cons (concat "^\*+[ \t]+" org-not-done-regexp)
|
||||
regexps+)
|
||||
regexps+))
|
||||
(goto-char beg)
|
||||
(setq marker (org-agenda-new-marker (point))
|
||||
category (org-get-category)
|
||||
category-pos (get-text-property (point) 'org-category-position)
|
||||
tags (org-get-tags-at (point))
|
||||
txt (org-agenda-format-item
|
||||
""
|
||||
(buffer-substring-no-properties
|
||||
beg1 (point-at-eol))
|
||||
category tags))
|
||||
(org-add-props txt props
|
||||
'org-marker marker 'org-hd-marker marker
|
||||
'org-todo-regexp org-todo-regexp
|
||||
'org-complex-heading-regexp org-complex-heading-regexp
|
||||
'priority 1000 'org-category category
|
||||
'org-category-position category-pos
|
||||
'type "search")
|
||||
(push txt ee)
|
||||
(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 "Press `[', `]' to add/sub word, `{', `}' to add/sub regexp, `C-u r' to edit\n")
|
||||
(add-text-properties pos (1- (point))
|
||||
(list 'face 'org-agenda-structure))))
|
||||
(org-agenda-mark-header-line (point-min))
|
||||
(when rtnall
|
||||
(insert (org-finalize-agenda-entries rtnall) "\n"))
|
||||
(goto-char (point-min))
|
||||
(or org-agenda-multi (org-agenda-fit-window-to-buffer))
|
||||
(add-text-properties (point-min) (point-max) '(org-agenda-type search))
|
||||
(org-finalize-agenda)
|
||||
(setq buffer-read-only t))))
|
||||
|
||||
;;; Agenda TODO list
|
||||
|
||||
|
@ -4342,9 +4348,6 @@ the list to these. When using \\[universal-argument], you will be prompted
|
|||
for a keyword. A numeric prefix directly selects the Nth keyword in
|
||||
`org-todo-keywords-1'."
|
||||
(interactive "P")
|
||||
(org-agenda-prepare "TODO")
|
||||
(org-compile-prefix-format 'todo)
|
||||
(org-set-sorting-strategy 'todo)
|
||||
(if (and (stringp arg) (not (string-match "\\S-" arg))) (setq arg nil))
|
||||
(let* ((today (org-today))
|
||||
(date (calendar-gregorian-from-absolute today))
|
||||
|
@ -4360,49 +4363,59 @@ for a keyword. A numeric prefix directly selects the Nth keyword in
|
|||
(org-icompleting-read "Keyword (or KWD1|K2D2|...): "
|
||||
(mapcar 'list kwds) nil nil)))
|
||||
(and (equal 0 arg) (setq org-select-this-todo-keyword nil))
|
||||
(org-set-local 'org-last-arg arg)
|
||||
(setq org-agenda-redo-command
|
||||
'(org-todo-list (or current-prefix-arg org-last-arg)))
|
||||
(setq files (org-agenda-files nil 'ifmode)
|
||||
rtnall nil)
|
||||
(while (setq file (pop files))
|
||||
(catch 'nextfile
|
||||
(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"))))
|
||||
(catch 'exit
|
||||
(if org-agenda-sticky
|
||||
(setq org-agenda-buffer-name
|
||||
(if (stringp org-select-this-todo-keyword)
|
||||
(format "*Org Agenda(%s:%s)*" (or keys "t")
|
||||
org-select-this-todo-keyword)
|
||||
(format "*Org Agenda(%s)*" (or keys "t")))))
|
||||
(org-agenda-prepare "TODO")
|
||||
(org-compile-prefix-format 'todo)
|
||||
(org-set-sorting-strategy 'todo)
|
||||
(org-set-local 'org-last-arg arg)
|
||||
(setq org-agenda-redo-command
|
||||
'(org-todo-list (or current-prefix-arg org-last-arg)))
|
||||
(setq files (org-agenda-files nil 'ifmode)
|
||||
rtnall nil)
|
||||
(while (setq file (pop files))
|
||||
(catch 'nextfile
|
||||
(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))
|
||||
(setq pos (point))
|
||||
(insert (or org-select-this-todo-keyword "ALL") "\n")
|
||||
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
|
||||
(setq pos (point))
|
||||
(unless org-agenda-multi
|
||||
(insert "Available with `N r': (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)))
|
||||
(org-agenda-mark-header-line (point-min))
|
||||
(setq pos (point))
|
||||
(insert (or org-select-this-todo-keyword "ALL") "\n")
|
||||
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
|
||||
(setq pos (point))
|
||||
(unless org-agenda-multi
|
||||
(insert "Available with `N r': (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)))
|
||||
(org-agenda-mark-header-line (point-min))
|
||||
(when rtnall
|
||||
(insert (org-finalize-agenda-entries rtnall) "\n"))
|
||||
(goto-char (point-min))
|
||||
(or org-agenda-multi (org-agenda-fit-window-to-buffer))
|
||||
(add-text-properties (point-min) (point-max) '(org-agenda-type todo))
|
||||
(org-finalize-agenda)
|
||||
(setq buffer-read-only t)))
|
||||
(when rtnall
|
||||
(insert (org-finalize-agenda-entries rtnall) "\n"))
|
||||
(goto-char (point-min))
|
||||
(or org-agenda-multi (org-agenda-fit-window-to-buffer))
|
||||
(add-text-properties (point-min) (point-max) '(org-agenda-type todo))
|
||||
(org-finalize-agenda)
|
||||
(setq buffer-read-only t))))
|
||||
|
||||
;;; Agenda tags match
|
||||
|
||||
|
@ -4420,60 +4433,67 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
|
|||
(setq match nil))
|
||||
(setq matcher (org-make-tags-matcher match)
|
||||
match (car matcher) matcher (cdr matcher))
|
||||
(org-agenda-prepare (concat "TAGS " match))
|
||||
(org-compile-prefix-format 'tags)
|
||||
(org-set-sorting-strategy 'tags)
|
||||
(setq org-agenda-query-string match)
|
||||
(setq org-agenda-redo-command
|
||||
(list 'org-tags-view (list 'quote todo-only)
|
||||
(list 'if 'current-prefix-arg nil 'org-agenda-query-string)))
|
||||
(setq files (org-agenda-files nil 'ifmode)
|
||||
rtnall nil)
|
||||
(while (setq file (pop files))
|
||||
(catch 'nextfile
|
||||
(org-check-agenda-file file)
|
||||
(setq buffer (if (file-exists-p file)
|
||||
(org-get-agenda-file-buffer file)
|
||||
(error "No such file %s" file)))
|
||||
(if (not buffer)
|
||||
;; If file does not exist, error message to agenda
|
||||
(setq rtn (list
|
||||
(format "ORG-AGENDA-ERROR: No such org-file %s" file))
|
||||
rtnall (append rtnall rtn))
|
||||
(with-current-buffer buffer
|
||||
(unless (derived-mode-p 'org-mode)
|
||||
(error "Agenda file %s is not in `org-mode'" file))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(if org-agenda-restrict
|
||||
(narrow-to-region org-agenda-restrict-begin
|
||||
org-agenda-restrict-end)
|
||||
(widen))
|
||||
(setq rtn (org-scan-tags 'agenda matcher 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 "Press `C-u r' to search again with new search string\n"))
|
||||
(add-text-properties pos (1- (point)) (list 'face 'org-agenda-structure)))
|
||||
(org-agenda-mark-header-line (point-min))
|
||||
(when rtnall
|
||||
(insert (org-finalize-agenda-entries rtnall) "\n"))
|
||||
(goto-char (point-min))
|
||||
(or org-agenda-multi (org-agenda-fit-window-to-buffer))
|
||||
(add-text-properties (point-min) (point-max) '(org-agenda-type tags))
|
||||
(org-finalize-agenda)
|
||||
(setq buffer-read-only t)))
|
||||
(catch 'exit
|
||||
(if org-agenda-sticky
|
||||
(setq org-agenda-buffer-name
|
||||
(if (stringp match)
|
||||
(format "*Org Agenda(%s:%s)*"
|
||||
(or keys (or (and todo-only "M") "m")) match)
|
||||
(format "*Org Agenda(%s)*" (or (and todo-only "M") "m")))))
|
||||
(org-agenda-prepare (concat "TAGS " match))
|
||||
(org-compile-prefix-format 'tags)
|
||||
(org-set-sorting-strategy 'tags)
|
||||
(setq org-agenda-query-string match)
|
||||
(setq org-agenda-redo-command
|
||||
(list 'org-tags-view (list 'quote todo-only)
|
||||
(list 'if 'current-prefix-arg nil 'org-agenda-query-string)))
|
||||
(setq files (org-agenda-files nil 'ifmode)
|
||||
rtnall nil)
|
||||
(while (setq file (pop files))
|
||||
(catch 'nextfile
|
||||
(org-check-agenda-file file)
|
||||
(setq buffer (if (file-exists-p file)
|
||||
(org-get-agenda-file-buffer file)
|
||||
(error "No such file %s" file)))
|
||||
(if (not buffer)
|
||||
;; If file does not exist, error message to agenda
|
||||
(setq rtn (list
|
||||
(format "ORG-AGENDA-ERROR: No such org-file %s" file))
|
||||
rtnall (append rtnall rtn))
|
||||
(with-current-buffer buffer
|
||||
(unless (derived-mode-p 'org-mode)
|
||||
(error "Agenda file %s is not in `org-mode'" file))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(if org-agenda-restrict
|
||||
(narrow-to-region org-agenda-restrict-begin
|
||||
org-agenda-restrict-end)
|
||||
(widen))
|
||||
(setq rtn (org-scan-tags 'agenda matcher 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 "Press `C-u r' to search again with new search string\n"))
|
||||
(add-text-properties pos (1- (point)) (list 'face 'org-agenda-structure)))
|
||||
(org-agenda-mark-header-line (point-min))
|
||||
(when rtnall
|
||||
(insert (org-finalize-agenda-entries rtnall) "\n"))
|
||||
(goto-char (point-min))
|
||||
(or org-agenda-multi (org-agenda-fit-window-to-buffer))
|
||||
(add-text-properties (point-min) (point-max) '(org-agenda-type tags))
|
||||
(org-finalize-agenda)
|
||||
(setq buffer-read-only t))))
|
||||
|
||||
;;; Agenda Finding stuck projects
|
||||
|
||||
|
|
Loading…
Reference in New Issue