forked from mirrors/org-mode
Bug fixes to inline source block execution triggering. * lisp/ob.el: Created org-babel-get-inline-src-block-matches() to fix problems with org-ctrl-c-ctrl-c not triggering inline src block execution when point is on or after a space within the inline src block body. Also fixed execution problems where inline src block is on buffer line 1. * testing/examples/babel.org: Test data for org-babel-get-inline-src-block-matches()
* testing/lisp/test-ob.el: Tests for org-babel-get-inline-src-block-matches()
This commit is contained in:
parent
933e508e05
commit
d7d052ec7c
48
lisp/ob.el
48
lisp/ob.el
|
@ -159,6 +159,39 @@ not match KEY should be returned."
|
||||||
(lambda (p) (when (funcall (if others #'not #'identity) (eq (car p) key)) p))
|
(lambda (p) (when (funcall (if others #'not #'identity) (eq (car p) key)) p))
|
||||||
params)))
|
params)))
|
||||||
|
|
||||||
|
(defun org-babel-get-inline-src-block-matches()
|
||||||
|
"Set match data if within body of an inline source block.
|
||||||
|
Returns non-nil if match-data set"
|
||||||
|
(let ((src-at-0-p (save-excursion
|
||||||
|
(beginning-of-line 1)
|
||||||
|
(string= "src" (thing-at-point 'word))))
|
||||||
|
(first-line-p (= 1 (line-number-at-pos)))
|
||||||
|
(orig (point)))
|
||||||
|
(let ((search-for (cond (src-at-0-p "src_")
|
||||||
|
(first-line-p " src_")
|
||||||
|
(t "[ \f\t\n\r\v]src_")))
|
||||||
|
(lower-limit (if (= 1 (line-number-at-pos))
|
||||||
|
nil
|
||||||
|
(- (point-at-bol) 1))))
|
||||||
|
(save-excursion
|
||||||
|
(when (or (and src-at-0-p (bobp))
|
||||||
|
(and (re-search-forward "}" (point-at-eol) t)
|
||||||
|
(re-search-backward search-for lower-limit t)
|
||||||
|
(> orig (point))))
|
||||||
|
(when (looking-at org-babel-inline-src-block-regexp)
|
||||||
|
t ))))))
|
||||||
|
|
||||||
|
(defun org-babel-get-lob-one-liner-matches()
|
||||||
|
"Set match data if on line of an lob one liner.
|
||||||
|
Returns non-nil if match-data set"
|
||||||
|
|
||||||
|
(save-excursion
|
||||||
|
(unless (= (point) (point-at-bol)) ;; move before inline block
|
||||||
|
(re-search-backward "[ \f\t\n\r\v]" nil t))
|
||||||
|
(if (looking-at org-babel-inline-lob-one-liner-regexp)
|
||||||
|
t
|
||||||
|
nil)))
|
||||||
|
|
||||||
(defun org-babel-get-src-block-info (&optional light)
|
(defun org-babel-get-src-block-info (&optional light)
|
||||||
"Get information on the current source block.
|
"Get information on the current source block.
|
||||||
|
|
||||||
|
@ -191,8 +224,7 @@ Returns a list
|
||||||
(org-babel-ref-split-args (match-string 6)))
|
(org-babel-ref-split-args (match-string 6)))
|
||||||
(nth 2 info))))))
|
(nth 2 info))))))
|
||||||
;; inline source block
|
;; inline source block
|
||||||
(when (save-excursion (re-search-backward "[ \f\t\n\r\v]" nil t)
|
(when (org-babel-get-inline-src-block-matches)
|
||||||
(looking-at org-babel-inline-src-block-regexp))
|
|
||||||
(setq info (org-babel-parse-inline-src-block-match))))
|
(setq info (org-babel-parse-inline-src-block-match))))
|
||||||
;; resolve variable references and add summary parameters
|
;; resolve variable references and add summary parameters
|
||||||
(when (and info (not light))
|
(when (and info (not light))
|
||||||
|
@ -1387,10 +1419,8 @@ following the source block."
|
||||||
(let* ((on-lob-line (save-excursion
|
(let* ((on-lob-line (save-excursion
|
||||||
(beginning-of-line 1)
|
(beginning-of-line 1)
|
||||||
(looking-at org-babel-lob-one-liner-regexp)))
|
(looking-at org-babel-lob-one-liner-regexp)))
|
||||||
(inlinep (save-excursion
|
(inlinep (when (org-babel-get-inline-src-block-matches)
|
||||||
(re-search-backward "[ \f\t\n\r\v]" nil t)
|
(match-end 0)))
|
||||||
(when (looking-at org-babel-inline-src-block-regexp)
|
|
||||||
(match-end 0))))
|
|
||||||
(name (if on-lob-line
|
(name (if on-lob-line
|
||||||
(nth 0 (org-babel-lob-get-info))
|
(nth 0 (org-babel-lob-get-info))
|
||||||
(nth 4 (or info (org-babel-get-src-block-info 'light)))))
|
(nth 4 (or info (org-babel-get-src-block-info 'light)))))
|
||||||
|
@ -1578,10 +1608,8 @@ code ---- the results are extracted in the syntax of the source
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(let* ((inlinep
|
(let* ((inlinep
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(unless (= (point) (point-at-bol)) ;; move before inline block
|
(when (or (org-babel-get-inline-src-block-matches)
|
||||||
(re-search-backward "[ \f\t\n\r\v]" nil t))
|
(org-babel-get-lob-one-liner-matches))
|
||||||
(when (or (looking-at org-babel-inline-src-block-regexp)
|
|
||||||
(looking-at org-babel-inline-lob-one-liner-regexp))
|
|
||||||
(goto-char (match-end 0))
|
(goto-char (match-end 0))
|
||||||
(insert (if (listp result) "\n" " "))
|
(insert (if (listp result) "\n" " "))
|
||||||
(point))))
|
(point))))
|
||||||
|
|
|
@ -279,3 +279,12 @@ this is simple
|
||||||
:ID: d4faa7b3-072b-4dcf-813c-dd7141c633f3
|
:ID: d4faa7b3-072b-4dcf-813c-dd7141c633f3
|
||||||
:END:
|
:END:
|
||||||
has length 14
|
has length 14
|
||||||
|
* org-babel-get-inline-src-block-matches
|
||||||
|
:PROPERTIES:
|
||||||
|
:results: silent
|
||||||
|
:ID: 0D0983D4-DE33-400A-8A05-A225A567BC74
|
||||||
|
:END:
|
||||||
|
src_sh{echo "One"} block at start of line
|
||||||
|
One spaced block in src_sh{ echo "middle" } of line
|
||||||
|
src_sh{echo 2} blocks on the src_emacs-lisp{"same"} line
|
||||||
|
Inline block with src_sh[:results silent]{ echo "parameters" }.
|
||||||
|
|
|
@ -223,6 +223,29 @@
|
||||||
(next) (should (equal 2 (org-babel-execute-src-block)))
|
(next) (should (equal 2 (org-babel-execute-src-block)))
|
||||||
(next) (should (equal 3 (org-babel-execute-src-block))))))
|
(next) (should (equal 3 (org-babel-execute-src-block))))))
|
||||||
|
|
||||||
|
(ert-deftest test-org-babel/org-babel-get-inline-src-block-matches ()
|
||||||
|
(org-test-at-id "0D0983D4-DE33-400A-8A05-A225A567BC74"
|
||||||
|
(should (fboundp 'org-babel-get-inline-src-block-matches))
|
||||||
|
(should (re-search-forward "src_" nil t)) ;; 1
|
||||||
|
(should (= 6132 (match-end 0)))
|
||||||
|
(should (org-babel-get-inline-src-block-matches))
|
||||||
|
(should (re-search-forward "}" nil (point-at-bol))) ;; 1
|
||||||
|
(should-not (org-babel-get-inline-src-block-matches))
|
||||||
|
(should (re-search-forward "in" nil t)) ;; 2
|
||||||
|
(should-not (org-babel-get-inline-src-block-matches))
|
||||||
|
(should (re-search-forward "echo" nil t)) ;; 2
|
||||||
|
(should (org-babel-get-inline-src-block-matches))
|
||||||
|
(should (re-search-forward "blocks" nil t)) ;; 3
|
||||||
|
(left-char 8) ;; 3
|
||||||
|
(should (org-babel-get-inline-src-block-matches))
|
||||||
|
(right-char 1) ;;3
|
||||||
|
(should-not (org-babel-get-inline-src-block-matches))
|
||||||
|
(should (re-search-forward ":results" nil t)) ;; 4
|
||||||
|
(should (org-babel-get-inline-src-block-matches))
|
||||||
|
(end-of-line)
|
||||||
|
(should-not (org-babel-get-inline-src-block-matches))
|
||||||
|
))
|
||||||
|
|
||||||
(provide 'test-ob)
|
(provide 'test-ob)
|
||||||
|
|
||||||
;;; test-ob ends here
|
;;; test-ob ends here
|
||||||
|
|
Loading…
Reference in New Issue