diff --git a/lisp/org.el b/lisp/org.el index 72e6a483d..0c0751254 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -4222,6 +4222,9 @@ This works for both table types.") (org-autoload "org-table" '(org-table-begin org-table-blank-field org-table-end))) +(defconst org-TBLFM-regexp "^[ \t]*#\\+TBLFM: " + "Detect a #+TBLFM line.") + ;;;###autoload (defun turn-on-orgtbl () "Unconditionally turn on `orgtbl-mode'." @@ -4316,6 +4319,15 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables." (declare-function org-clock-update-mode-line "org-clock" ()) (declare-function org-resolve-clocks "org-clock" (&optional also-non-dangling-p prompt last-valid)) + +(defun org-at-TBLFM-p (&optional pos) + "Return t when point (or POS) is in #+TBLFM line." + (save-excursion + (let ((pos pos))) + (goto-char (or pos (point))) + (beginning-of-line 1) + (looking-at org-TBLFM-regexp))) + (defvar org-clock-start-time) (defvar org-clock-marker (make-marker) "Marker recording the last clock-in.") diff --git a/testing/lisp/test-org-table.el b/testing/lisp/test-org-table.el index 4c09239c5..ea8c4d8f6 100644 --- a/testing/lisp/test-org-table.el +++ b/testing/lisp/test-org-table.el @@ -749,6 +749,25 @@ reference (with row). Format specifier N." ;; "Remote reference." ;; (should ;; (string= "$3 = remote(FOO, @@#$2)" (org-table-convert-refs-to-rc "C& = remote(FOO, @@#B&)")))) +(ert-deftest test-org-table/org-at-TBLFM-p () + (org-test-with-temp-text-in-file + " +| 1 | +| 2 | +#+TBLFM: $2=$1*2 + +" + (goto-char (point-min)) + (forward-line 2) + (should (equal (org-at-TBLFM-p) nil)) + + (goto-char (point-min)) + (forward-line 3) + (should (equal (org-at-TBLFM-p) t)) + + (goto-char (point-min)) + (forward-line 4) + (should (equal (org-at-TBLFM-p) nil)))) (provide 'test-org-table)