emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] New patches WAS Re: [PATCH] inline src block results can be remo


From: Nicolas Goaziou
Subject: Re: [O] New patches WAS Re: [PATCH] inline src block results can be removed
Date: Fri, 16 Jan 2015 23:41:59 +0100

"Charles C. Berry" <address@hidden> 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,



reply via email to

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