Function: org-refresh-category-properties

org-refresh-category-properties is a byte-compiled function defined in org.el.gz.

Signature

(org-refresh-category-properties)

Documentation

Refresh category text properties in the buffer.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org-refresh-category-properties ()
  "Refresh category text properties in the buffer."
  (unless (org-element--cache-active-p)
    (let ((case-fold-search t)
	  (inhibit-read-only t)
	  (default-category
	    (cond ((null org-category)
		   (if buffer-file-name
		       (file-name-sans-extension
                        (file-name-nondirectory buffer-file-name))
		     "???"))
		  ((symbolp org-category) (symbol-name org-category))
		  (t org-category))))
      (let ((category (catch 'buffer-category
                        (org-with-wide-buffer
                         (goto-char (point-max))
                         (while (re-search-backward "^[ \t]*#\\+CATEGORY:" (point-min) t)
                           (let ((element (org-element-at-point-no-context)))
                             (when (eq (org-element-type element) 'keyword)
                               (throw 'buffer-category
                                      (org-element-property :value element))))))
                        default-category)))
        (with-silent-modifications
          (org-with-wide-buffer
           ;; Set buffer-wide property from keyword.  Search last #+CATEGORY
           ;; keyword.  If none is found, fall-back to `org-category' or
           ;; buffer file name, or set it by the document property drawer.
           (put-text-property (point-min) (point-max)
                              'org-category category)
           ;; Set categories from the document property drawer or
           ;; property drawers in the outline.  If category is found in
           ;; the property drawer for the whole buffer that value
           ;; overrides the keyword-based value set above.
           (goto-char (point-min))
           (let ((regexp (org-re-property "CATEGORY")))
             (while (re-search-forward regexp nil t)
               (let ((value (match-string-no-properties 3)))
                 (when (org-at-property-p)
                   (put-text-property
                    (save-excursion (org-back-to-heading-or-point-min t))
                    (save-excursion (if (org-before-first-heading-p)
                                        (point-max)
                                      (org-end-of-subtree t t)))
                    'org-category
                    value)))))))))))