emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [babel] [PATCH] enhanced org-babel-goto-named-src-block


From: Eric Schulte
Subject: Re: [O] [babel] [PATCH] enhanced org-babel-goto-named-src-block
Date: Sat, 25 Feb 2012 09:36:27 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.93 (gnu/linux)

Applied, Thanks!

Andreas Leha <address@hidden> writes:

> Hi all,
>
> attached is a patch that enhances org-babel-goto-named-src-block (bound
> to C-c C-v g by default).  Included are two enhancements:
>
>  1. the point is pushed to the org-mark-ring, such that returning with
>     C-c & becomes possible
>  2. the target src block is guessed from
>      a) noweb-reference
>      b) #+call:
>      c) #+results:
>      d) symbol-at-point
>     if one of these is found (in that order)
>
> - Andreas
>
>
> diff --git a/lisp/ob.el b/lisp/ob.el
> index f021943..9962817 100644
> --- a/lisp/ob.el
> +++ b/lisp/ob.el
> @@ -1457,13 +1457,35 @@ If the point is not on a source block then return 
> nil."
>  (defun org-babel-goto-named-src-block (name)
>    "Go to a named source-code block."
>    (interactive
> -   (let ((completion-ignore-case t))
> +   (let ((completion-ignore-case t)
> +      (under-point (thing-at-point 'line)))
>       (list (org-icompleting-read "source-block name: "
> -                              (org-babel-src-block-names) nil t))))
> +                              (org-babel-src-block-names)
> +                              nil
> +                              t
> +                              (cond
> +                               ;; noweb
> +                               ((string-match (org-babel-noweb-wrap) 
> under-point)
> +                                (let ((block-name (match-string 1 
> under-point)))
> +                                  (string-match "[^(]*" block-name)
> +                                  (match-string 0 block-name)))
> +                               ;; #+call:
> +                               ((string-match org-babel-lob-one-liner-regexp 
> under-point)
> +                                (let ((source-info (car 
> (org-babel-lob-get-info))))
> +                                  (if (string-match 
> "^\\([^\\[]+?\\)\\(\\[.*\\]\\)?(" source-info)
> +                                      (let ((source-name (match-string 1 
> source-info)))
> +                                        source-name))))
> +                               ;; #+results:
> +                               ((string-match (concat "#\\+" 
> org-babel-results-keyword "\\:\s+\\([^\\(]*\\)") under-point)
> +                                (match-string 1 under-point))
> +                               ;; symbol-at-point
> +                               ((and (thing-at-point 'symbol) 
> )(org-babel-find-named-block (thing-at-point 'symbol))
> +                                (thing-at-point 'symbol))
> +                               (""))))))
>    (let ((point (org-babel-find-named-block name)))
>      (if point
>          ;; taken from `org-open-at-point'
> -        (progn (goto-char point) (org-show-context))
> +        (progn (org-mark-ring-push) (goto-char point) (org-show-context))
>        (message "source-code block '%s' not found in this buffer" name))))
>  
>  (defun org-babel-find-named-block (name)

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]