summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Berry <ccberry@ucsd.edu>2016-06-14 09:35:03 -0700
committerCharles Berry <ccberry@ucsd.edu>2016-06-14 09:40:35 -0700
commitdd944fb5903046a88312a3ec33f6d5789cfb165f (patch)
treed8680e3a1a11a5b4b84baf1ff3f5b2e6d039819e
parent0cf76b7a3fae6ccc14ef7921bac173511202bbe2 (diff)
downloadorg-mode-dd944fb5903046a88312a3ec33f6d5789cfb165f.tar.gz
org-babel-goto-named-src-block bugfix
* lisp/ob-core.el (org-babel-goto-named-src-block): The user prompt (i.e. `initial-input' arg of `completing-read') will be the name of the results block, noweb reference, call reference, or symbol if point is in such. * testing/lisp/test-ob.el (test-ob/goto-named-src-block): Simulate interactive use of `org-babel-goto-named-src-block'.
-rw-r--r--lisp/ob-core.el16
-rw-r--r--testing/lisp/test-ob.el42
2 files changed, 53 insertions, 5 deletions
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 2e9a4d1..7221eb4 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -1691,15 +1691,21 @@ If the point is not on a source block then return nil."
(list (completing-read
"source-block name: " all-block-names nil t
(let* ((context (org-element-context))
- (type (org-element-type context)))
+ (type (org-element-type context))
+ (noweb-ref
+ (and (memq type '(inline-src-block src-block))
+ (org-in-regexp (org-babel-noweb-wrap)))))
(cond
- ((and (memq type '(inline-src-block src-block)) ;<<noweb>>
- (org-in-regexp (org-babel-noweb-wrap))))
+ (noweb-ref
+ (buffer-substring
+ (+ (car noweb-ref) (length org-babel-noweb-wrap-start))
+ (- (cdr noweb-ref) (length org-babel-noweb-wrap-end))))
((memq type '(babel-call inline-babel-call)) ;#+CALL:
(org-element-property :call context))
- ((org-element-property :results context)) ;#+RESULTS:
+ ((car (org-element-property :results context))) ;#+RESULTS:
((let ((symbol (thing-at-point 'symbol))) ;Symbol.
- (and (member-ignore-case symbol all-block-names)
+ (and symbol
+ (member-ignore-case symbol all-block-names)
symbol)))
(t "")))))))
(let ((point (org-babel-find-named-block name)))
diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
index aa26602..7085e8f 100644
--- a/testing/lisp/test-ob.el
+++ b/testing/lisp/test-ob.el
@@ -1697,6 +1697,48 @@ echo \"$data\"
(goto-char (org-babel-where-is-src-block-result t nil "bbbb")))
(org-trim (buffer-substring-no-properties (point) (point-max)))))))
+(ert-deftest test-ob/goto-named-src-block ()
+ "Test interactive use of `org-babel-goto-named-src-block'."
+ (org-test-with-temp-text-in-file
+ "
+#+NAME: abc
+#+BEGIN_SRC emacs-lisp :results value
+(1+ 1)
+#+END_SRC
+#+CALL: abc( lorem() ) :results raw :wrap EXAMPLE
+#+BEGIN_SRC emacs-lisp
+<<abc>>
+#+END_SRC
+abc
+#+RESULTS: abc
+: 2
+"
+ ;; non-existent name
+ (should-not
+ (execute-kbd-macro "\M-xorg-babel-goto-named-src-block\nno-name\n"))
+ ;; correct name
+ (execute-kbd-macro "\M-xorg-babel-goto-named-src-block\nabc\n")
+ (should (= 14 (point)))
+ ;; call line - autocompletion
+ (forward-line 3)
+ (execute-kbd-macro "\M-xorg-babel-goto-named-src-block\n\n")
+ (should (= 14 (point)))
+ ;; noweb reference - autocompletion
+ (forward-line 5)
+ (execute-kbd-macro "\M-xorg-babel-goto-named-src-block\n\n")
+ (should (= 14 (point)))
+ ;; at symbol - autocompletion
+ (forward-line 7)
+ (execute-kbd-macro "\M-xorg-babel-goto-named-src-block\n\n")
+ (should (= 14 (point)))
+ ;; in results - autocompletion
+ (forward-line 8)
+ (execute-kbd-macro "\M-xorg-babel-goto-named-src-block\n\n")
+ (should (= 14 (point)))
+ (forward-line 9)
+ (execute-kbd-macro "\M-xorg-babel-goto-named-src-block\n\n")
+ (should (= 14 (point)))))
+
(provide 'test-ob)
;;; test-ob ends here