diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 2e9a4d15f..7221eb461 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)) ;<> - (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 aa26602d8..7085e8fbe 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 +<> +#+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