From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: New patches WAS Re: [PATCH] inline src block results can be removed Date: Fri, 16 Jan 2015 23:41:59 +0100 Message-ID: <87lhl2s5zc.fsf@nicolasgoaziou.fr> References: <87egt81acy.fsf@gmail.com> <8761ejq9ek.fsf@nicolasgoaziou.fr> <87sihltt3v.fsf@selenimh.mobile.lan> <87zjbqrapy.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:52520) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YCFZc-0006vu-Om for emacs-orgmode@gnu.org; Fri, 16 Jan 2015 17:41:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YCFZZ-0003jx-Fx for emacs-orgmode@gnu.org; Fri, 16 Jan 2015 17:41:00 -0500 Received: from relay5-d.mail.gandi.net ([2001:4b98:c:538::197]:34692) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YCFZZ-0003jj-3O for emacs-orgmode@gnu.org; Fri, 16 Jan 2015 17:40:57 -0500 In-Reply-To: (Charles C. Berry's message of "Mon, 12 Jan 2015 16:48:00 -0800") 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: "Charles C. Berry" Cc: Aaron Ecay , Andreas Leha , emacs-orgmode@gnu.org, Ista Zahn , mcg "Charles C. Berry" writes: > I've attached three patches and two files that show the behavior under > the current master (12 Jan 2015, > e0879b03d08bb4acc663084076370482f61e8698) and under the patched > version. Thank you. Some comments follow. > With the patches, inline source block results can be removed by > re-executing the source block if they are wrapped in > a `{{{results(...)}}}' macro. The schema for the RESULT-PARAMS is as > follows, but see the examples for caveats: > > | Param | Example output | > |-----------------+-----------------------------------+ > | default/replace | {{{results(=42=)}}} | > | list | \n: - 42\n\n | > | raw | 42 | > | drawer/wrap | {{{results(42)}}} | > | org | {{{results(src_org{...})}}} | > | html | {{{results(@@html:...@@)}}} | > | latex | {{{results(@@latex:...@@)}}} | > | code | {{{results(src_emacs-lisp{...})}}}| > | table | \n| 42 |\n\n | > |-----------------+-----------------------------------+ I don't think inline Babel blocks should be able to generate lists or tables. Org cannot contain inline lists or tables. If you need a real table or list, a regular Babel call will do. I suggest to ignore :results table and :results list, or even return an error, since this is bound to breaking the document structure. > The `results' macro is hard coded to wrap `value' except when list, > table, or raw is specified as a RESULT-PARAM or when (listp value). > And obviously, :file I thought :file produced {{{results([[file:...]]}}} ? > * lisp/ob-core.el (org-babel-insert-result): Delete any `results' > macro following current inline src block; insert current value in > 'results' macro possibly wrapping RESULT in an export snippet or > inline source block first. Protect commas and backslash commas in the > RESULT with backslashes if the macro form is used. I think the "protect commas and backslashes commas" should be factored out of "ob-core.el" (and "org-element.el") and moved into "org-macro.el". > +By default RESULT is inserted after the end of the current source > +block. The RESULT of an inline source block usually will be > +wrapped inside a `results' macro and placed on the same line as > +the inline source block. The macro is stripped upon Two spaces. > +export. Multiline and non-scalar RESULTS from inline source > +blocks are fragile and should be avoided. With optional argument Ditto. > +RESULT-PARAMS controls insertion of results in the org-mode file. Org mode file. > + ;; escape commas, e.g. {{{results(a\,b)}}} > + ((and inlinep > + (not (member "raw" result-params))) > + (goto-char beg) > + (insert > + ;; Escape commas and preceding backslash per > + ;; (info "(org) Macro replacement"). > + (replace-regexp-in-string > + "\\(\\\\*\\)\\(,\\)" > + (lambda (str) > + (let ((len (length (match-string 1 str)))) > + (concat (make-string (* 2 (/ len 2)) ?\\) "\\,"))) > + result nil t))) See remark about factoring it out. > +(defun org-babel-remove-inline-result () > + "Remove the result of the current inline-src-block if it is > + wrapped in a `results' macro and trim extraneous leading whitespace." Docstring's first sentence has to fit on a single line. > + (let ((el (org-element-context)) post-blank) (let* ((el (org-element-context)) (post-blank (org-element-property :post-blank el))) ...) > + (when (eq (org-element-type el) 'inline-src-block) > + (save-excursion `org-with-wide-buffer' is better: results might be outside the narrowed part of the buffer. > + (setq post-blank (org-element-property :post-blank el)) See above. > + (goto-char (org-element-property :end el)) > + (setq el (org-element-context)) (let ((el (org-element-context)))) > + (when (and (eq (org-element-type el) 'macro) > + (equal (org-element-property :key el) "results")) Nitpick: `equal' => `string=' Regards,