3.4 KiB
Why do I even?
Org-mode makes literate programming easy via Library of Babel. Il simply allows to mix text with executable code blocks (which can also be extracted (tangled) into separate, executable files. The beauty the Library of Babel implementation in org-mode lies in the fact that it supports many languages. I craved support for SuperCollider and craving became an itch when I needed to document a working pipeline alternating between executing sclang and shell scripts. I scratched an itch with this little module.
How to install?
First of all, you will need emacs and SuperCollider (with emacs
support) installed. Modern emacsen (>25) and Spacemacs come with
bundled org-mode. At this point I am the sole user of this plugin and
have just written it so I am not itching yet for MELPA or inclusion in
the official org-mode repositories, so installation is manual. You can
either drop file:ob-sclang.el somewhere in
your Emacs' path or add its containing directory to
load-path
in .init
file:
(add-to-list 'load-path "/path/to/ob-sclang/")
You will also have to add it to (org-babel-do-load-languages)
(require 'ob-sclang)
(org-babel-do-load-languages
'org-babel-load-languages
'((sclang . t)))
And then?
well, then you type a block like this one:
#+BEGIN_SRC sclang
"boo".postln;
#+END_SRC
And after you hit C-c C-c you should see the string appear
in your SCLang:PostBuffer*
Note:, that if you have not already started
SuperCollider process, the plugin will do it for you as soon as you
create a source block of type sclang
.
Use of variables
You can also include variables to be passed to you sclang code:
#+BEGIN_SRC sclang :var boo="hoo" :var pi=3.14159 :var year=2000 :var buf='foo
boo.postln;
pi.postln;
year.postln;
buf.postln;
#+END_SRC
Will reformat your sclang body to:
"hoo".postln;
3.141590.postln;
2000.postln;
"foo".asSymbol.postln;
Before passing it on to the sclang process.
The use of sclang's own global variables is persistent between code
blocks so ~boo
#+BEGIN_SRC sclang
~boo = "hoo";
#+END_SRC
is accessible here:
#+BEGIN_SRC sclang
~boo.postln;
#+END_SRC
Known issues
At this point, this plugin has a very crude functionality. It allows unidirectional control of SuperCollider process running inside Emacs. As such, here is a list of issues:
- sclang process has a tendency to replace Emacs frames with
Workspace
andPostBuffer
when it lunches, therefore if have not already started sclang, your code block with start it for you, but your current buffer will loose focus. - The code you execute will not return anything back to the document
you are working in (well, it just prints back all lines it executed so
simply use
:results none
to limit the noise.
I may raise the first point with the current sclang-mode maintainer…
The last point is probably more problematic but it may be useful to get some datatypes from sclang. It merits some thought.
Of course feel free to open questions, suggestions, discussions and even pull requests.