Is there an inverse of
org-babel-tangle-jump-to-org allowing one to jump from a source block to the corresponding place in the tangled file?
Is there an inverse of
I am not aware of a function shipped with org that jumps to the tangled file.
Furthermore, there is no separate function that generates the file name(s) for the tangled file(s) in
org-babel-tangle. That makes the job a bit cumbersome.
write-region temporarily modified such that it does not write the region contents to a file but just delivers the file name that is passed to it in a variable
file locally bound in
org-babel-tangle-jump opens the file with that name if it already exists.
(defun org-babel-tangle-jump () "Jump to tangle file for the source block at point." (interactive) (let (file org-babel-pre-tangle-hook org-babel-post-tangle-hook) (cl-letf (((symbol-function 'write-region) (lambda (start end filename &rest _ignore) (setq file filename))) ((symbol-function 'delete-file) #'ignore)) (org-babel-tangle '(4))) (when file (setq file (expand-file-name file)) (if (file-readable-p file) (find-file file) (error "Cannot open tangle file %S" file)))))
Here is a solution if you use
:comments link in your code blocks header and if tangle multiple blocks into a single file. With cursor at code block it will jump to a point where this block was tangled using these comment links.
;; this is optional but might look better than defaults (setq org-babel-tangle-comment-format-beg "-------->> [[%link][%source-name]]") (setq org-babel-tangle-comment-format-end "--------<< %source-name ends here\n\n") (defun sv-org-babel-tangle-jump-to-src () "The opposite of `org-babel-tangle-jump-to-org'. Jumps at tangled code from org src block." (interactive) (if (org-in-src-block-p) (let* ((header (car (org-babel-tangle-single-block 1 'only-this-block))) (tangle (car header)) (lang (caadr header)) (buffer (nth 2 (cadr header))) (org-id (nth 3 (cadr header))) (source-name (nth 4 (cadr header))) (search-comment (org-fill-template org-babel-tangle-comment-format-beg `(("link" . ,org-id) ("source-name" . ,source-name)))) (file (expand-file-name (org-babel-effective-tangled-filename buffer lang tangle)))) (if (not (file-exists-p file)) (message "File does not exist. 'org-babel-tangle' first to create file.") (find-file file) (beginning-of-buffer) (search-forward search-comment))) (message "Cannot jump to tangled file because point is not at org src block.")))