From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bastien Subject: Re: [PATCH 03/10] Clean up various org-babel-*-maybe commands Date: Wed, 03 Apr 2013 16:18:59 +0200 Message-ID: <87sj37snn0.fsf@bzg.ath.cx> References: <1364794944-13826-1-git-send-email-aaronecay@gmail.com> <1364794944-13826-4-git-send-email-aaronecay@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([208.118.235.92]:52691) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UNOkC-0004cp-Bl for emacs-orgmode@gnu.org; Wed, 03 Apr 2013 10:33:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UNOk7-0007Vf-HK for emacs-orgmode@gnu.org; Wed, 03 Apr 2013 10:32:56 -0400 Received: from mail-wi0-x22e.google.com ([2a00:1450:400c:c05::22e]:63736) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UNOk7-0007VT-7O for emacs-orgmode@gnu.org; Wed, 03 Apr 2013 10:32:51 -0400 Received: by mail-wi0-f174.google.com with SMTP id hj8so3695040wib.13 for ; Wed, 03 Apr 2013 07:32:50 -0700 (PDT) In-Reply-To: <1364794944-13826-4-git-send-email-aaronecay@gmail.com> (Aaron Ecay's message of "Mon, 1 Apr 2013 01:42:17 -0400") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Aaron Ecay Cc: emacs-orgmode@gnu.org Hi Aaron, Aaron Ecay writes: > * lisp/ob-core.el (org-babel-if-in-src-block): New macro > (org-babel-execute-src-block-maybe), > (org-babel-expand-src-block-maybe), > (org-babel-load-in-session-maybe), > (org-babel-pop-to-session-maybe): Use it A slightly enhanced version: * lisp/ob-core.el (org-babel-if-in-src-block): New macro. (org-babel-execute-src-block-maybe) (org-babel-expand-src-block-maybe) (org-babel-load-in-session-maybe, org-babel-pop-to-session-maybe): Use it. In a nutshell: 1. No commas outside parentheses; 2. A full-stop at the end of sentences... C-x 4 a and M-q should be all what you need. > org-babel-get-src-block-info is a potentially expensive operation, which > is why its ‘light’ argument exists. But in any case, it is overkill to > query the whole info, if all that is needed is whether point is in a > block or not. Factor the simplified common code out into a macro. The let-bound info variable is not only used to check if we are within a src block, it is also passed as an argument to functions, see the ^^ marks below. > --- > lisp/ob-core.el | 31 +++++++++++++++++-------------- > 1 file changed, 17 insertions(+), 14 deletions(-) > > diff --git a/lisp/ob-core.el b/lisp/ob-core.el > index 723aa9d..283628e 100644 > --- a/lisp/ob-core.el > +++ b/lisp/ob-core.el > @@ -365,15 +365,22 @@ of potentially harmful code." > (or (org-babel-execute-src-block-maybe) > (org-babel-lob-execute-maybe))) > > +(defmacro org-babel-when-in-src-block (&rest body) > + `(if (or (org-babel-where-is-src-block-head) > + (org-babel-get-inline-src-block-matches)) > + (progn > + ,@body > + t) > + nil)) (Please always add a docstring of defuns and defmacros) > (defun org-babel-execute-src-block-maybe () > "Conditionally execute a source block. > Detect if this is context for a Babel src-block and if so > then run `org-babel-execute-src-block'." > (interactive) > - (let ((info (org-babel-get-src-block-info))) > - (if info > - (progn (org-babel-eval-wipe-error-buffer) > - (org-babel-execute-src-block current-prefix-arg info) t) nil))) ^^^^ > + (org-babel-when-in-src-block > + (org-babel-eval-wipe-error-buffer) > + (org-babel-execute-src-block current-prefix-arg))) > > ;;;###autoload > (defun org-babel-view-src-block-info () > @@ -409,10 +416,8 @@ a window into the `org-babel-get-src-block-info' function." > Detect if this is context for a org-babel src-block and if so > then run `org-babel-expand-src-block'." > (interactive) > - (let ((info (org-babel-get-src-block-info))) > - (if info > - (progn (org-babel-expand-src-block current-prefix-arg info) t) ^^^^ > - nil))) > + (org-babel-when-in-src-block > + (org-babel-expand-src-block current-prefix-arg))) > > ;;;###autoload > (defun org-babel-load-in-session-maybe () > @@ -420,10 +425,8 @@ then run `org-babel-expand-src-block'." > Detect if this is context for a org-babel src-block and if so > then run `org-babel-load-in-session'." > (interactive) > - (let ((info (org-babel-get-src-block-info))) > - (if info > - (progn (org-babel-load-in-session current-prefix-arg info) t) ^^^^ > - nil))) > + (org-babel-when-in-src-block > + (org-babel-load-in-session current-prefix-arg))) > > (add-hook 'org-metaup-hook 'org-babel-load-in-session-maybe) > > @@ -433,8 +436,8 @@ then run `org-babel-load-in-session'." > Detect if this is context for a org-babel src-block and if so > then run `org-babel-pop-to-session'." > (interactive) > - (let ((info (org-babel-get-src-block-info))) > - (if info (progn (org-babel-pop-to-session current-prefix-arg info) t) nil))) ^^^^ > + (org-babel-when-in-src-block > + (org-babel-pop-to-session current-prefix-arg))) (Let's use the current name `org-babel-switch-to-session' instead of the obsolete alias.) Maybe we don't always need to pass the info as an argument, but at least for this last example it is needed. Thanks, -- Bastien