ob-ipython icon indicating copy to clipboard operation
ob-ipython copied to clipboard

Non-Python kernel blocks fail on `org-edit-special` and `font-lock-fontify-block`

Open dabro opened this issue 8 years ago • 1 comments

This is an awesome project. I tried running Haskell and Elixir kernels with success -- thank you.

Is it possible to get the babel source blocks to behave properly for non-Python kernels? org-src-lang-modes lists ("ipython" . python); I'm not sure if there's a way to put a function there that would lookup the :kernel header param. Or maybe some entirely different approach? org-src.el and ob-core.el seems to handle all the logic that's problematic.

As far as I can tell, org-edit-src-code (what org-edit-special calls) fails when it in-turn calls org-babel-get-src-block-info, which fails on apply #'org-babel-merge-params :

(apply #'org-babel-merge-params
       (if inline org-babel-default-inline-header-args
         org-babel-default-header-args)
       (and (boundp lang-headers) (eval lang-headers t))
       (append
        ;; If DATUM is provided, make sure we get node
        ;; properties applicable to its location within
        ;; the document.
        (org-with-point-at (org-element-property :begin datum)
          (org-babel-params-from-properties lang))
        (mapcar #'org-babel-parse-header-arguments
                (cons (org-element-property :parameters datum)
                      (org-element-property :header datum)))))

The above results in "Wrong type argument: stringp". At first I thought this was because of nils: the append produces

(nil nil ((:session) (:kernel . "haskell") (:results) (:header . "haskell"))).

Those particular nils come from (org-babel-params-from-properties lang), ie (nil nil). However, the same occurs when the block's kernel is python with no issues.

The problem appears in org-babel-merge-params:

(`(:results . ,value)
	   (setq results (funcall merge
				  results-exclusive-groups
				  results
				  (split-string
				   (if (stringp value) value (eval value t))))))

but I'm not sure quite where in the function; my elisp-foo isn't sufficient to understand what's going on. The description of the function is

  "Combine all parameter association lists in PLISTS.
Later elements of PLISTS override the values of previous elements.
This takes into account some special considerations for certain
parameters when merging lists."

dabro avatar Oct 17 '17 19:10 dabro

Think this is done now or we've at least made steps toward it.

gregsexton avatar Dec 03 '17 09:12 gregsexton