run-hy usage is broken
Opened this issue · 1 comments
TatriX commented
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
oolonc commented
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.