mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-09-29 19:37:52 +00:00
org-table: Speed-up `org-table-{begin,end}'
* lisp/org-table.el (org-table-border-regexp): Improve docstring. (org-table-begin): (org-table-end): Assume point is in a table already. In this case, using parser is not necessary anymore.
This commit is contained in:
parent
57883f7957
commit
8344f29dac
|
@ -403,7 +403,7 @@ prevents it from hanging emacs."
|
|||
(defconst org-table-calculate-mark-regexp "^[ \t]*| *[!$^_#*] *\\(|\\|$\\)"
|
||||
"Detects a table line marked for automatic recalculation.")
|
||||
(defconst org-table-border-regexp "^[ \t]*[^| \t]"
|
||||
"Searching from within a table (any type) this finds the first line outside the table.")
|
||||
"Regexp matching any line outside an Org table.")
|
||||
(defvar org-table-last-highlighted-reference nil)
|
||||
(defvar org-table-formula-history nil)
|
||||
|
||||
|
@ -860,22 +860,37 @@ edit. Full value is:\n")
|
|||
;;;###autoload
|
||||
(defun org-table-begin (&optional table-type)
|
||||
"Find the beginning of the table and return its position.
|
||||
With argument TABLE-TYPE, go to the beginning of a table.el-type table."
|
||||
(let ((table (org-element-lineage (org-element-at-point) '(table) t)))
|
||||
(and table (org-element-property :post-affiliated table))))
|
||||
With a non-nil optional argument TABLE-TYPE, return the beginning
|
||||
of a table.el-type table. This function assumes point is on
|
||||
a table."
|
||||
(cond (table-type
|
||||
(org-element-property :post-affiliated (org-element-at-point)))
|
||||
((save-excursion
|
||||
(and (re-search-backward org-table-border-regexp nil t)
|
||||
(line-beginning-position 2))))
|
||||
(t (point-min))))
|
||||
|
||||
;;;###autoload
|
||||
(defun org-table-end (&optional table-type)
|
||||
"Find the end of the table and return its position.
|
||||
With argument TABLE-TYPE, go to the end of a table.el-type table."
|
||||
(let ((table (org-element-lineage (org-element-at-point) '(table) t)))
|
||||
(and table
|
||||
(let ((type (org-element-property :type table)))
|
||||
(if (eq type 'org) (org-element-property :contents-end table)
|
||||
(save-excursion
|
||||
(goto-char (org-element-property :end table))
|
||||
(skip-chars-backward " \t\n")
|
||||
(line-beginning-position 2)))))))
|
||||
With a non-nil optional argument TABLE-TYPE, return the end of
|
||||
a table.el-type table. This function assumes point is on
|
||||
a table."
|
||||
(save-excursion
|
||||
(cond (table-type
|
||||
(goto-char (org-element-property :end (org-element-at-point)))
|
||||
(skip-chars-backward " \t\n")
|
||||
(line-beginning-position 2))
|
||||
((re-search-forward org-table-border-regexp nil t)
|
||||
(match-beginning 0))
|
||||
;; When the line right after the table is the last line in
|
||||
;; the buffer with trailing spaces but no final newline
|
||||
;; character, trailing spaces, be sure to catch the correct
|
||||
;; ending at its beginning. In any other case, ending is
|
||||
;; expected to be at point max.
|
||||
(t (goto-char (point-max))
|
||||
(skip-chars-backward " \t")
|
||||
(if (bolp) (point) (line-end-position))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun org-table-justify-field-maybe (&optional new)
|
||||
|
|
Loading…
Reference in a new issue