Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

run-hy usage is broken #7

Open
TatriX opened this issue Apr 4, 2020 · 1 comment
Open

run-hy usage is broken #7

TatriX opened this issue Apr 4, 2020 · 1 comment

Comments

@TatriX
Copy link

TatriX commented Apr 4, 2020

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
@TatriX TatriX changed the title run-hy is broken run-hy usage is broken Apr 5, 2020
@oolonc
Copy link

oolonc commented Sep 3, 2021

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants