Merge pull request #5 from zzkt/main

melpa compatibility
This commit is contained in:
Michal Seta 2022-07-30 10:25:39 -04:00 committed by GitHub
commit 2eb8101151
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 79 additions and 28 deletions

41
.github/workflows/test.yml vendored Normal file
View file

@ -0,0 +1,41 @@
name: CI
on:
push:
paths-ignore:
- '**.org'
pull_request:
paths-ignore:
- '**.org'
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
emacs_version:
- 28.1
- 27.2
- 26.3
- 25.3
steps:
- name: Set up Emacs
uses: purcell/setup-emacs@master
with:
version: ${{matrix.emacs_version}}
- name: Install Eldev
run: curl -fsSL https://raw.github.com/doublep/eldev/master/webinstall/github-eldev | sh
- name: Check out the elisp source code
uses: actions/checkout@v2
- name: Test the uncompiled source
run: |
eldev -p -dtT test
- name: Compile and run tests again
run: |
eldev compile
eldev -p -dtT test

3
.gitignore vendored
View file

@ -1 +1,2 @@
*~
*~
*.elc

View file

@ -3,10 +3,21 @@
#+STARTUP: showstars
** Why do I even?
[[https://orgmode.org/][Org-mode]] makes [[http://literateprogramming.com/][literate programming]] easy via [[https://orgmode.org/worg/library-of-babel.html][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 of the Library of Babel implementation in org-mode lies in the fact that it supports many languages. I craved support for [[https://github.com/supercollider/supercollider][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.
[[https://orgmode.org/][Org-mode]] makes [[http://literateprogramming.com/][literate programming]] easy via [[https://orgmode.org/worg/library-of-babel.html][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 of the Library of Babel implementation in org-mode lies in the fact that it supports many languages. I craved support for [[https://github.com/supercollider/supercollider][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 (>=25) and SuperCollider (with emacs support) installed. Modern emacsen 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:
First of all, you will need emacs (>=26) and SuperCollider (with emacs support) installed. Modern emacsen and Spacemacs come with bundled org-mode.
It can be installed as a package via [[https://melpa.org/#/i-ching][Melpa]] or manually.
#+BEGIN_SRC emacs-lisp
(use-package ob-sclang
:config (org-babel-do-load-languages
'org-babel-load-languages
'((sclang . t))))
#+END_SRC
To install manually you can either drop [[file:ob-sclang.el]] somewhere in your Emacs' path or add its containing directory to ~load-path~ in =.init= file:
#+BEGIN_SRC elisp
(add-to-list 'load-path "/path/to/ob-sclang/")

View file

@ -1,11 +1,12 @@
;;; ob-sclang.el --- org-babel functions for sclang evaluation
;;; ob-sclang.el --- Org-babel interface for SuperCollider -*- coding: utf-8;
;; Copyright (C) 2018 Michal Seta
;; Author: Michal Seta
;; Keywords: supercollider, literate programming, reproducible research
;; Homepage: https://github.com/djiamnot/ob-sclang.git
;; Version: 0.02
;; Keywords: supercollider, literate programming, multimedia, languages, tools
;; URL: https://github.com/djiamnot/ob-sclang
;; Package-Requires: ((emacs "26.1") (sclang "1.0"))
;; Version: 0.3
;;; License:
@ -24,21 +25,21 @@
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Requirements:
;;; sclang requires SuperCollider, of course. You need to have both the SuperCollider
;;; system installed and the sclang-mode
;;; SuperCollider can be found at https://github.com/supercollider/supercollider
;;; Commentary:
;; ob-sclang enables SuperCollider source blocks to be used in org files
;;; Code:
(require 'ob)
(require 'sclang)
;; optionally define a file extension for this language
;; add file extensions for sclang
(add-to-list 'org-babel-tangle-lang-exts '("sclang" . "scd"))
;; optionally declare default header arguments for this language
;; declare default header arguments for sclang code blocks
(defvar org-babel-default-header-args:sclang
'((:results . "none")))
'((:session . "*SCLang:Workspace*")
(:result . "none")))
(defun org-babel-expand-body:sclang (body params)
"Expand BODY according to PARAMS, return the expanded body."
@ -56,37 +57,34 @@
body))
(defun org-babel-sclang-var-to-sclang (var)
"Convert an elisp value to a string of sclang code represting the value of the
variable with correct type."
"Convert an elisp value VAR to a string of sclang code.
The value of the variable should be represented with correct type."
(if (listp var)
(concat "[" (mapconcat #'org-babel-sclang-var-to-sclang var ", ") "]")
(cond ((stringp var) (format "%S" var))
((floatp var) (format "%f" var))
((integerp var) (format "%d" var))
((symbolp var) (concat (format "%S" (symbol-name var)) ".asSymbol")))
))
((symbolp var) (concat (format "%S" (symbol-name var)) ".asSymbol")))))
(defun org-babel-execute:sclang (body params)
"Execute a block of Sclang code with org-babel.
This function is called by `org-babel-execute-src-block'"
(sclang-eval-string (org-babel-expand-body:sclang body params))
)
"Execute a block of sclang code with org-babel.
This function is called by `org-babel-execute-src-block' with BODY and PARAMS"
(sclang-eval-string (org-babel-expand-body:sclang body params)))
(defun org-babel-prep-session:sclang (session params)
"Prepare SESSION according to the header arguments specified in PARAMS."
(error "No need for session preparation")
)
(message "No need for session preparation"))
(defun org-babel-sclang-initiate-session (&optional session)
"If there is not a current inferior-process-buffer in SESSION then create.
"If there is not a current inferior-process-buffer in SESSION then create one.
Return the initialized session."
(unless (string= session "none")
(let (session (if sclang-library-initialized-p
(let ((session (if sclang-library-initialized-p
sclang-post-buffer
(save-window-excursion
(sclang-start)
(current-buffer) ))))))
(current-buffer)))))
session)))
(provide 'ob-sclang)
;;; ob-sclang.el ends here