brantou/ob-hy

run-hy usage is broken

Opened this issue · 1 comments

Hi! I've tried using ob-hy and I've got and error for the following code:

#+begin_src hy :session pandas :results output
  42
#+end_src

Error:

Debugger entered--Lisp error: (wrong-number-of-arguments (0 . 0) 1)
  run-hy("hy")
  (let ((hy-shell-buffer-name (org-babel-hy-without-earmuffs hy-buffer))) (run-hy cmd))
  (let* ((session (if session (intern session) :default)) (hy-buffer (org-babel-hy-session-buffer session)) (cmd org-babel-hy-command)) (if hy-buffer nil (setq hy-buffer (org-babel-hy-with-earmuffs session))) (let ((hy-shell-buffer-name (org-babel-hy-without-earmuffs hy-buffer))) (run-hy cmd)) (setq org-babel-hy-buffers (cons (cons session hy-buffer) (assq-delete-all session org-babel-hy-buffers))) session)
  (progn (let* ((session (if session (intern session) :default)) (hy-buffer (org-babel-hy-session-buffer session)) (cmd org-babel-hy-command)) (if hy-buffer nil (setq hy-buffer (org-babel-hy-with-earmuffs session))) (let ((hy-shell-buffer-name (org-babel-hy-without-earmuffs hy-buffer))) (run-hy cmd)) (setq org-babel-hy-buffers (cons (cons session hy-buffer) (assq-delete-all session org-babel-hy-buffers))) session))
  (unwind-protect (progn (let* ((session (if session (intern session) :default)) (hy-buffer (org-babel-hy-session-buffer session)) (cmd org-babel-hy-command)) (if hy-buffer nil (setq hy-buffer (org-babel-hy-with-earmuffs session))) (let ((hy-shell-buffer-name (org-babel-hy-without-earmuffs hy-buffer))) (run-hy cmd)) (setq org-babel-hy-buffers (cons (cons session hy-buffer) (assq-delete-all session org-babel-hy-buffers))) session)) (set-window-configuration wconfig))
  (let ((wconfig (current-window-configuration))) (unwind-protect (progn (let* ((session (if session (intern session) :default)) (hy-buffer (org-babel-hy-session-buffer session)) (cmd org-babel-hy-command)) (if hy-buffer nil (setq hy-buffer (org-babel-hy-with-earmuffs session))) (let ((hy-shell-buffer-name (org-babel-hy-without-earmuffs hy-buffer))) (run-hy cmd)) (setq org-babel-hy-buffers (cons (cons session hy-buffer) (assq-delete-all session org-babel-hy-buffers))) session)) (set-window-configuration wconfig)))
  org-babel-hy-initiate-session-by-key("pandas")
  org-babel-hy-initiate-session("pandas")
  org-babel-execute:hy("42" ((:colname-names) (:rowname-names) (:result-params "replace" "output") (:result-type . output) (:results . "replace output") (:exports . "code") (:cache . "no") (:noweb . "no") (:hlines . "no") (:tangle . "no") (:session . "pandas")))
  org-babel-execute-src-block(nil ("hy" "42" ((:colname-names) (:rowname-names) (:result-params "output" "replace") (:result-type . output) (:results . "output replace") (:exports . "code") (:session . "pandas") (:tangle . "no") (:hlines . "no") (:noweb . "no") (:cache . "no")) "" nil 122 "(ref:%s)"))
  org-ctrl-c-ctrl-c(nil)

... snip ...

It seems that run-hy no longer takes an argument, so I fixed that and it worked.

Another issue is with sessions:

#+begin_src hy :session pandas :results output

Doesn't work:

Debugger entered--Lisp error: (error "Buffer *pandas* does not exist or has no process")

But this does, because I guess hy-mode create buffer *Hy* by default.

#+begin_src hy :session Hy :results output

I fiddle with this a bit more and have gotten it to to function partially.

(cl-defun ++hy-init-named-session (&optional session)
  (condition-case err
      (unless (and (featurep 'hy-mode) (fboundp 'run-python))
        (require 'hy-mode))
    (error (error "No function available for running an inferior Hy")))

  (save-window-excursion
    (let ((session (if session (intern session) :default)))
      (unless (org-babel-hy-session-buffer session)
        (let* ((hy-shell--buffer-name (org-babel-hy-with-earmuffs session))
               (hy-shell--name (org-babel-hy-without-earmuffs hy-shell--buffer-name)))
          (run-hy)
          (setq org-babel-hy-buffers
                (cons (cons session hy-shell--buffer-name)
                      (assq-delete-all session org-babel-hy-buffers)))))
      session)))

(add-function :override (symbol-function 'org-babel-hy-initiate-session-by-key) #'++hy-init-named-session)

Adding the :override advice for org-babel-hy-initiate-session-by-key gets org-babel-hy-buffers set correctly.
I'm getting some strange output in the results block though.

#+begin_src hy :results output :session hylang
(import [matplotlib :as mp]
        [numpy :as np])
(print "stuff")
#+end_src

#+RESULTS:
: ... import matplotlib as mp
: import numpy as np
: None
: print('stuff')
: 
: stuff
: import builtins
: None

I'm not certain if that is out of the ordinary; I have never used this package before. I do not see the code echoed in the results when executed outside of a session.