Get scheme to work with org-mode
This commit is contained in:
parent
87ba4bf2fd
commit
514147ea52
1 changed files with 43 additions and 14 deletions
|
@ -44,29 +44,58 @@ The [[https://www.nongnu.org/geiser/][geiser project]] attempts to be the interf
|
||||||
(setq geiser-mit-binary "/usr/local/bin/scheme"
|
(setq geiser-mit-binary "/usr/local/bin/scheme"
|
||||||
geiser-racket-binary "/usr/local/bin/racket"
|
geiser-racket-binary "/usr/local/bin/racket"
|
||||||
geiser-guile-binary "/usr/local/bin/guile"
|
geiser-guile-binary "/usr/local/bin/guile"
|
||||||
geiser-active-implementations '(guile)
|
geiser-active-implementations '(guile mit)
|
||||||
geiser-default-implementations '(guile))
|
geiser-default-implementations '(guile))
|
||||||
:config
|
:config
|
||||||
(use-package geiser-mit)
|
(use-package geiser-mit)
|
||||||
(use-package geiser-guile)
|
(use-package geiser-guile)
|
||||||
(use-package geiser-racket)
|
(use-package geiser-racket))
|
||||||
|
|
||||||
(add-to-list 'org-babel-load-languages '(scheme . t)))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
Do we need a Scheme work for Org Babel? According to [[https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-scheme.html][this document]], we just need to make sure we add the =:session= variable to start the REPL.
|
** Org Mode
|
||||||
** Try it Out
|
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:scheme: :session *scheming* :results value
|
:header-args:scheme: :session *scheming* :results value replace
|
||||||
:END:
|
:END:
|
||||||
|
Do we need a Scheme work for Org Babel? According to [[https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-scheme.html][this document]], we just need to make sure we add the =:session= variable to start the REPL.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package ob-scheme
|
||||||
|
:straight (:type built-in)
|
||||||
|
:config
|
||||||
|
(add-to-list 'org-babel-load-languages '(scheme . t)))
|
||||||
|
|
||||||
This should work?
|
#+END_SRC
|
||||||
#+name: hello-world
|
|
||||||
#+header: :var message="Hello World! What?"
|
|
||||||
#+begin_src scheme
|
|
||||||
message
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
However, it doesn’t output the results /back into/ this buffer. What is the point of connecting it to =ob=?
|
Since the version of Scheme hasn't been updated with the deprecation, and subsequent removal of =org-babel-get-header=, we include it here:
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun org-babel-get-header (params key &optional others)
|
||||||
|
(delq nil
|
||||||
|
(mapcar
|
||||||
|
(lambda (p) (when (funcall (if others #'not #'identity) (eq (car p) key)) p))
|
||||||
|
params)))
|
||||||
|
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Let’s test it out by defining a variable:
|
||||||
|
#+BEGIN_SRC scheme
|
||||||
|
(define a 42)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
And simply using it:
|
||||||
|
#+BEGIN_SRC scheme :var b=8
|
||||||
|
(+ a b)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
: ;Value: 50
|
||||||
|
|
||||||
|
And what about Scheme-specific stuff needed for SICP?
|
||||||
|
#+BEGIN_SRC scheme
|
||||||
|
(inc 42)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
** Install SICP
|
** Install SICP
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
|
|
Loading…
Reference in a new issue