Use `org-element-at-point-no-context' in performance-critical places

* lisp/org-compat.el (org-mode-flyspell-verify, org-indent-line,
org-indent-region, org-indent-drawer, org-indent-block): Use
`org-element-at-point-no-context' in place of `org-element-at-point'
when we are doing changes.
* lisp/org.el (org-collect-keywords): Use direct parsing in place of
`org-elemnt-at-point'
This commit is contained in:
Ihor Radchenko 2021-10-16 23:56:29 +08:00
parent e70a8aac59
commit 5aeeb4f739
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
2 changed files with 7 additions and 7 deletions

View File

@ -1047,8 +1047,8 @@ ELEMENT is the element at point."
(or (not (match-beginning 5))
(< (point) (match-beginning 5)))
;; Ignore checks in code, verbatim and others.
(org--flyspell-object-check-p (org-element-at-point)))
(let* ((element (org-element-at-point))
(org--flyspell-object-check-p (org-element-at-point-no-context)))
(let* ((element (org-element-at-point-no-context))
(post-affiliated (org-element-property :post-affiliated element)))
(cond
;; Ignore checks in all affiliated keywords but captions.

View File

@ -4537,7 +4537,7 @@ directory."
(let ((case-fold-search t)
(regexp (org-make-options-regexp keywords)))
(while (and keywords (re-search-forward regexp nil t))
(let ((element (org-element-at-point)))
(let ((element (org-with-point-at (match-beginning 0) (org-element-keyword-parser (line-end-position) (list (match-beginning 0))))))
(when (eq 'keyword (org-element-type element))
(let ((value (org-element-property :value element)))
(pcase (org-element-property :key element)
@ -19271,7 +19271,7 @@ Also align node properties according to `org-property-format'."
(skip-chars-backward "\n")
(or (org-at-heading-p)
(looking-back ":END:.*" (point-at-bol))))))
(let* ((element (save-excursion (beginning-of-line) (org-element-at-point)))
(let* ((element (save-excursion (beginning-of-line) (org-element-at-point-no-context)))
(type (org-element-type element)))
(cond ((and (memq type '(plain-list item))
(= (line-beginning-position)
@ -19344,7 +19344,7 @@ assumed to be significant there."
(end (copy-marker end)))
(while (< (point) end)
(if (or (looking-at-p " \r\t\n") (org-at-heading-p)) (forward-line)
(let* ((element (org-element-at-point))
(let* ((element (org-element-at-point-no-context))
(type (org-element-type element))
(element-end (copy-marker (org-element-property :end element)))
(ind (org--get-expected-indentation element nil)))
@ -19450,7 +19450,7 @@ assumed to be significant there."
(beginning-of-line)
(looking-at-p org-drawer-regexp))
(user-error "Not at a drawer"))
(let ((element (org-element-at-point)))
(let ((element (org-element-at-point-no-context)))
(unless (memq (org-element-type element) '(drawer property-drawer))
(user-error "Not at a drawer"))
(org-with-wide-buffer
@ -19466,7 +19466,7 @@ assumed to be significant there."
(let ((case-fold-search t))
(looking-at-p "[ \t]*#\\+\\(begin\\|end\\)_")))
(user-error "Not at a block"))
(let ((element (org-element-at-point)))
(let ((element (org-element-at-point-no-context)))
(unless (memq (org-element-type element)
'(comment-block center-block dynamic-block example-block
export-block quote-block special-block