diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 6a6149613..80a8bc388 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -3,12 +3,8 @@ ORG NEWS -- history of user-visible changes. -*- mode: org; coding: utf-8 -*- #+STARTUP: overview #+LINK: doc https://orgmode.org/worg/doc.html#%s -<<<<<<< HEAD -#+LINK: git https://code.orgmode.org/bzg/org-mode/commit/%s -#+LINK: msg https://orgmode.org/list/%s/ -======= +#+LINK: msg https://list.orgmode.org/%s/ #+LINK: git https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=%s ->>>>>>> bugfix Copyright (C) 2012-2021 Free Software Foundation, Inc. See the end of the file for license conditions. @@ -70,6 +66,25 @@ Hopefully problems have been fixed. See [[https://orgmode.org/worg/org-faq.html Setting ~org-speed-commands-user~ in your configuration won't have any effect. Please set ~org-speed-commands~ instead, which see. +*** Some =ob-*.el= files have migrate to the org-contrib repo + +These files have been moved to https://git.sr.ht/~bzg/org-contrib: + +- ob-vala.el +- ob-shen.el +- ob-picolisp.el +- ob-mscgen.el +- ob-ledger.el +- ob-io.el +- ob-hledger.el +- ob-ebnf.el +- ob-coq.el +- ob-asymptote.el +- ob-abc.el +- ob-J.el + +See the discussion [[msg::87bl9rq29m.fsf@gnu.org][here]]. + ** New options and settings *** Option ~org-hidden-keywords~ now also applies to #+SUBTITLE: diff --git a/lisp/ob-J.el b/lisp/ob-J.el deleted file mode 100644 index 306ad0f67..000000000 --- a/lisp/ob-J.el +++ /dev/null @@ -1,189 +0,0 @@ -;;; ob-J.el --- Babel Functions for J -*- lexical-binding: t; -*- - -;; Copyright (C) 2011-2021 Free Software Foundation, Inc. - -;; Author: Oleh Krehel -;; Maintainer: Joseph Novakovich -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Org-Babel support for evaluating J code. -;; -;; Session interaction depends on `j-console' from package `j-mode' -;; (available in MELPA). - -;;; Code: - -(require 'ob) -(require 'org-macs) - -(declare-function j-console-ensure-session "ext:j-console" ()) - -(defcustom org-babel-J-command "jconsole" - "Command to call J." - :group 'org-babel - :version "26.1" - :package-version '(Org . "9.0") - :type 'string) - -(defun org-babel-expand-body:J (body _params &optional _processed-params) - "Expand BODY according to PARAMS, return the expanded body. -PROCESSED-PARAMS isn't used yet." - (org-babel-J-interleave-echos-except-functions body)) - -(defun org-babel-J-interleave-echos (body) - "Interleave echo',' between each source line of BODY." - (mapconcat #'identity (split-string body "\n") "\necho','\n")) - -(defun org-babel-J-interleave-echos-except-functions (body) - "Interleave echo',' between source lines of BODY that aren't functions." - (if (obj-string-match-m "\\(?:^\\|\n\\)[^\n]*\\(?:0\\|1\\|2\\|3\\|4\\|dyad\\) : 0\n.*\n)\\(?:\n\\|$\\)" body) - (let ((s1 (substring body 0 (match-beginning 0))) - (s2 (match-string 0 body)) - (s3 (substring body (match-end 0)))) - (concat - (if (string= s1 "") - "" - (concat (org-babel-J-interleave-echos s1) - "\necho','\n")) - s2 - "\necho','\n" - (org-babel-J-interleave-echos-except-functions s3))) - (org-babel-J-interleave-echos body))) - -(defalias 'org-babel-execute:j 'org-babel-execute:J) - -(defun org-babel-execute:J (body params) - "Execute a block of J code BODY. -PARAMS are given by org-babel. -This function is called by `org-babel-execute-src-block'." - (message "executing J source code block") - (let* ((processed-params (org-babel-process-params params)) - (sessionp (cdr (assq :session params))) - (sit-time (let ((sit (assq :sit params))) - (if sit (cdr sit) .1))) - (full-body (org-babel-expand-body:J - body params processed-params)) - (tmp-script-file (org-babel-temp-file "J-src"))) - (org-babel-j-initiate-session sessionp) - (org-babel-J-strip-whitespace - (if (string= sessionp "none") - (progn - (with-temp-file tmp-script-file - (insert full-body)) - (org-babel-eval (format "%s < %s" org-babel-J-command tmp-script-file) "")) - (org-babel-J-eval-string full-body sit-time))))) - -(defun org-babel-J-eval-string (str sit-time) - "Sends STR to the `j-console-cmd' session and execute it." - (let ((session (j-console-ensure-session))) - (with-current-buffer (process-buffer session) - (goto-char (point-max)) - (insert (format "\n%s\n" str)) - (let ((beg (point))) - (comint-send-input) - (sit-for sit-time) - (buffer-substring-no-properties - beg (point-max)))))) - -(defun org-babel-J-strip-whitespace (str) - "Remove whitespace from jconsole output STR." - (mapconcat - #'identity - (delete "" (mapcar - #'org-babel-J-print-block - (split-string str "^ *,\n" t))) - "\n\n")) - -(defun obj-get-string-alignment (str) - "Return a number to describe STR alignment. -STR represents a table. -Positive/negative/zero result means right/left/undetermined. -Don't trust first line." - (let* ((str (org-trim str)) - (lines (split-string str "\n" t)) - n1 n2) - (cond ((<= (length lines) 1) - 0) - ((= (length lines) 2) - ;; numbers are right-aligned - (if (and - (numberp (read (car lines))) - (numberp (read (cadr lines))) - (setq n1 (obj-match-second-space-right (nth 0 lines))) - (setq n2 (obj-match-second-space-right (nth 1 lines)))) - n2 - 0)) - ((not (obj-match-second-space-left (nth 0 lines))) - 0) - ((and - (setq n1 (obj-match-second-space-left (nth 1 lines))) - (setq n2 (obj-match-second-space-left (nth 2 lines))) - (= n1 n2)) - n1) - ((and - (setq n1 (obj-match-second-space-right (nth 1 lines))) - (setq n2 (obj-match-second-space-right (nth 2 lines))) - (= n1 n2)) - (- n1)) - (t 0)))) - -(defun org-babel-J-print-block (x) - "Prettify jconsole output X." - (let* ((x (org-trim x)) - (a (obj-get-string-alignment x)) - (lines (split-string x "\n" t)) - b) - (cond ((< a 0) - (setq b (obj-match-second-space-right (nth 0 lines))) - (concat (make-string (+ a b) ? ) x)) - ((> a 0) - (setq b (obj-match-second-space-left (nth 0 lines))) - (concat (make-string (- a b) ? ) x)) - (t x)))) - -(defun obj-match-second-space-left (s) - "Return position of leftmost space in second space block of S or nil." - (and (string-match "^ *[^ ]+\\( \\)" s) - (match-beginning 1))) - -(defun obj-match-second-space-right (s) - "Return position of rightmost space in second space block of S or nil." - (and (string-match "^ *[^ ]+ *\\( \\)[^ ]" s) - (match-beginning 1))) - -(defun obj-string-match-m (regexp string &optional start) - "Call (string-match REGEXP STRING START). -REGEXP is modified so that .* matches newlines as well." - (string-match - (replace-regexp-in-string "\\.\\*" "[\0-\377[:nonascii:]]*" regexp) - string - start)) - -(defun org-babel-j-initiate-session (&optional session) - "Initiate a J session. -SESSION is a parameter given by org-babel." - (unless (string= session "none") - (require 'j-console) - (j-console-ensure-session))) - -(provide 'ob-J) - -;;; ob-J.el ends here diff --git a/lisp/ob-abc.el b/lisp/ob-abc.el deleted file mode 100644 index 83a38a876..000000000 --- a/lisp/ob-abc.el +++ /dev/null @@ -1,94 +0,0 @@ -;;; ob-abc.el --- Org Babel Functions for ABC -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2021 Free Software Foundation, Inc. - -;; Author: William Waites -;; Maintainer: William Waites -;; Keywords: literate programming, music -;; Homepage: https://www.tardis.ed.ac.uk/~wwaites - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;;; This file adds support to Org Babel for music in ABC notation. -;;; It requires that the abcm2ps program is installed. -;;; See http://moinejf.free.fr/ - -;;; Code: - -(require 'ob) - -;; optionally define a file extension for this language - -(add-to-list 'org-babel-tangle-lang-exts '("abc" . "abc")) - -;; optionally declare default header arguments for this language -(defvar org-babel-default-header-args:abc - '((:results . "file") (:exports . "results")) - "Default arguments to use when evaluating an ABC source block.") - -(defun org-babel-expand-body:abc (body params) - "Expand BODY according to PARAMS, return the expanded body." - (let ((vars (org-babel--get-vars params))) - (mapc - (lambda (pair) - (let ((name (symbol-name (car pair))) - (value (cdr pair))) - (setq body - (replace-regexp-in-string - (concat "\\$" (regexp-quote name)) - (if (stringp value) value (format "%S" value)) - body)))) - vars) - body)) - -(defun org-babel-execute:abc (body params) - "Execute a block of ABC code with org-babel. -This function is called by `org-babel-execute-src-block'." - (message "executing Abc source code block") - (let* ((cmdline (cdr (assq :cmdline params))) - (out-file (let ((file (cdr (assq :file params)))) - (if file (replace-regexp-in-string "\\.pdf$" ".ps" file) - (error "abc code block requires :file header argument")))) - (in-file (org-babel-temp-file "abc-")) - (render (concat "abcm2ps" " " cmdline - " -O " (org-babel-process-file-name out-file) - " " (org-babel-process-file-name in-file)))) - (with-temp-file in-file (insert (org-babel-expand-body:abc body params))) - (org-babel-eval render "") - ;;; handle where abcm2ps changes the file name (to support multiple files - (when (or (string= (file-name-extension out-file) "eps") - (string= (file-name-extension out-file) "svg")) - (rename-file (concat - (file-name-sans-extension out-file) "001." - (file-name-extension out-file)) - out-file t)) - ;;; if we were asked for a pdf... - (when (string= (file-name-extension (cdr (assq :file params))) "pdf") - (org-babel-eval (concat "ps2pdf" " " out-file " " (cdr (assq :file params))) "")) - ;;; indicate that the file has been written - nil)) - -;; This function should be used to assign any variables in params in -;; the context of the session environment. -(defun org-babel-prep-session:abc (_session _params) - "Return an error because abc does not support sessions." - (error "ABC does not support sessions")) - -(provide 'ob-abc) - -;;; ob-abc.el ends here diff --git a/lisp/ob-asymptote.el b/lisp/ob-asymptote.el deleted file mode 100644 index 5c89c5d83..000000000 --- a/lisp/ob-asymptote.el +++ /dev/null @@ -1,138 +0,0 @@ -;;; ob-asymptote.el --- Babel Functions for Asymptote -*- lexical-binding: t; -*- - -;; Copyright (C) 2009-2021 Free Software Foundation, Inc. - -;; Author: Eric Schulte -;; Maintainer: Luc Pellissier -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Org-Babel support for evaluating asymptote source code. -;; -;; This differs from most standard languages in that -;; -;; 1) there is no such thing as a "session" in asymptote -;; -;; 2) we are generally only going to return results of type "file" -;; -;; 3) we are adding the "file" and "cmdline" header arguments, if file -;; is omitted then the -V option is passed to the asy command for -;; interactive viewing - -;;; Requirements: - -;; - The asymptote program :: http://asymptote.sourceforge.net/ -;; -;; - asy-mode :: Major mode for editing asymptote files - -;;; Code: -(require 'ob) - -(defvar org-babel-tangle-lang-exts) -(add-to-list 'org-babel-tangle-lang-exts '("asymptote" . "asy")) - -(defvar org-babel-default-header-args:asymptote - '((:results . "file") (:exports . "results")) - "Default arguments when evaluating an Asymptote source block.") - -(defun org-babel-execute:asymptote (body params) - "Execute a block of Asymptote code. -This function is called by `org-babel-execute-src-block'." - (let* ((out-file (cdr (assq :file params))) - (format (or (file-name-extension out-file) - "pdf")) - (cmdline (cdr (assq :cmdline params))) - (in-file (org-babel-temp-file "asymptote-")) - (cmd - (concat "asy " - (if out-file - (concat - "-globalwrite -f " format - " -o " (org-babel-process-file-name out-file)) - "-V") - " " cmdline - " " (org-babel-process-file-name in-file)))) - (with-temp-file in-file - (insert (org-babel-expand-body:generic - body params - (org-babel-variable-assignments:asymptote params)))) - (message cmd) (shell-command cmd) - nil)) ;; signal that output has already been written to file - -(defun org-babel-prep-session:asymptote (_session _params) - "Return an error if the :session header argument is set. -Asymptote does not support sessions." - (error "Asymptote does not support sessions")) - -(defun org-babel-variable-assignments:asymptote (params) - "Return list of asymptote statements assigning the block's variables." - (mapcar #'org-babel-asymptote-var-to-asymptote - (org-babel--get-vars params))) - -(defun org-babel-asymptote-var-to-asymptote (pair) - "Convert an elisp value into an Asymptote variable. -The elisp value PAIR is converted into Asymptote code specifying -a variable of the same value." - (let ((var (car pair)) - (val (let ((v (cdr pair))) - (if (symbolp v) (symbol-name v) v)))) - (cond - ((integerp val) - (format "int %S=%S;" var val)) - ((floatp val) - (format "real %S=%S;" var val)) - ((stringp val) - (format "string %S=\"%s\";" var val)) - ((and (listp val) (not (listp (car val)))) - (let* ((type (org-babel-asymptote-define-type val)) - (fmt (if (eq 'string type) "\"%s\"" "%s")) - (vect (mapconcat (lambda (e) (format fmt e)) val ", "))) - (format "%s[] %S={%s};" type var vect))) - ((listp val) - (let* ((type (org-babel-asymptote-define-type val)) - (fmt (if (eq 'string type) "\"%s\"" "%s")) - (array (mapconcat (lambda (row) - (concat "{" - (mapconcat (lambda (e) (format fmt e)) - row ", ") - "}")) - val ","))) - (format "%S[][] %S={%s};" type var array)))))) - -(defun org-babel-asymptote-define-type (data) - "Determine type of DATA. - -DATA is a list. Return type as a symbol. - -The type is `string' if any element in DATA is a string. -Otherwise, it is either `real', if some elements are floats, or -`int'." - (letrec ((type 'int) - (find-type - (lambda (row) - (dolist (e row type) - (cond ((listp e) (setq type (funcall find-type e))) - ((stringp e) (throw 'exit 'string)) - ((floatp e) (setq type 'real))))))) - (catch 'exit (funcall find-type data)) type)) - -(provide 'ob-asymptote) - -;;; ob-asymptote.el ends here diff --git a/lisp/ob-coq.el b/lisp/ob-coq.el deleted file mode 100644 index 61746a26e..000000000 --- a/lisp/ob-coq.el +++ /dev/null @@ -1,81 +0,0 @@ -;;; ob-coq.el --- Babel Functions for Coq -*- lexical-binding: t; -*- - -;; Copyright (C) 2010-2021 Free Software Foundation, Inc. - -;; Author: Eric Schulte -;; Maintainer: Luc Pellissier -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Rudimentary support for evaluating Coq code blocks. Currently only -;; session evaluation is supported. Requires both coq.el and -;; coq-inferior.el, both of which are distributed with Coq. -;; -;; https://coq.inria.fr/ - -;;; Code: -(require 'ob) - -(declare-function run-coq "ext:coq-inferior.el" (cmd)) -(declare-function coq-proc "ext:coq-inferior.el" ()) - -(defvar coq-program-name "coqtop" - "Name of the coq toplevel to run.") - -(defvar org-babel-coq-buffer "*coq*" - "Buffer in which to evaluate coq code blocks.") - -(defun org-babel-coq-clean-prompt (string) - (if (string-match "^[^[:space:]]+ < " string) - (substring string 0 (match-beginning 0)) - string)) - -(defun org-babel-execute:coq (body params) - (let ((full-body (org-babel-expand-body:generic body params)) - (session (org-babel-coq-initiate-session)) - (pt (lambda () - (marker-position - (process-mark (get-buffer-process (current-buffer))))))) - (org-babel-coq-clean-prompt - (org-babel-comint-in-buffer session - (let ((start (funcall pt))) - (with-temp-buffer - (insert full-body) - (comint-send-region (coq-proc) (point-min) (point-max)) - (comint-send-string (coq-proc) - (if (string= (buffer-substring (- (point-max) 1) (point-max)) ".") - "\n" - ".\n"))) - (while (equal start (funcall pt)) (sleep-for 0.1)) - (buffer-substring start (funcall pt))))))) - -(defun org-babel-coq-initiate-session () - "Initiate a coq session. -If there is not a current inferior-process-buffer in SESSION then -create one. Return the initialized session." - (unless (fboundp 'run-coq) - (error "`run-coq' not defined, load coq-inferior.el")) - (save-window-excursion (run-coq coq-program-name)) - (sit-for 0.1) - (get-buffer org-babel-coq-buffer)) - -(provide 'ob-coq) - -;;; ob-coq.el ends here diff --git a/lisp/ob-ebnf.el b/lisp/ob-ebnf.el deleted file mode 100644 index 77975e530..000000000 --- a/lisp/ob-ebnf.el +++ /dev/null @@ -1,81 +0,0 @@ -;;; ob-ebnf.el --- Babel Functions for EBNF -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2021 Free Software Foundation, Inc. - -;; Author: Michael Gauland -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Org-Babel support for using ebnf2ps to generate encapsulated postscript -;; railroad diagrams. It recognizes these arguments: -;; -;; :file is required; it must include the extension '.eps.' All the rules -;; in the block will be drawn in the same file. This is done by -;; inserting a '[' comment at the start of the block (see the -;; documentation for ebnf-eps-buffer for more information). -;; -;; :style specifies a value in ebnf-style-database. This provides the -;; ability to customize the output. The style can also specify the -;; grammar syntax (by setting ebnf-syntax); note that only ebnf, -;; iso-ebnf, and yacc are supported by this file. - -;;; Requirements: - -;;; Code: -(require 'ob) -(require 'ebnf2ps) - -;; optionally declare default header arguments for this language -(defvar org-babel-default-header-args:ebnf '((:style . nil))) - -;; Use ebnf-eps-buffer to produce an encapsulated postscript file. -;; -(defun org-babel-execute:ebnf (body params) - "Execute a block of Ebnf code with org-babel. -This function is called by `org-babel-execute-src-block'." - (save-excursion - (let* ((dest-file (cdr (assq :file params))) - (dest-dir (file-name-directory dest-file)) - (dest-root (file-name-sans-extension - (file-name-nondirectory dest-file))) - (style (cdr (assq :style params))) - (result nil)) - (with-temp-buffer - (when style (ebnf-push-style style)) - (let ((comment-format - (cond ((string= ebnf-syntax 'yacc) "/*%s*/") - ((string= ebnf-syntax 'ebnf) ";%s") - ((string= ebnf-syntax 'iso-ebnf) "(*%s*)") - (t (setq result - (format "EBNF error: format %s not supported." - ebnf-syntax)))))) - (setq ebnf-eps-prefix dest-dir) - (insert (format comment-format (format "[%s" dest-root))) - (newline) - (insert body) - (newline) - (insert (format comment-format (format "]%s" dest-root))) - (ebnf-eps-buffer) - (when style (ebnf-pop-style)))) - result))) - -(provide 'ob-ebnf) - -;;; ob-ebnf.el ends here diff --git a/lisp/ob-hledger.el b/lisp/ob-hledger.el deleted file mode 100644 index 48dcb8cea..000000000 --- a/lisp/ob-hledger.el +++ /dev/null @@ -1,69 +0,0 @@ -;;; ob-hledger.el --- Babel Functions for hledger -*- lexical-binding: t; -*- - -;; Copyright (C) 2010-2021 Free Software Foundation, Inc. - -;; Author: Simon Michael -;; Keywords: literate programming, reproducible research, plain text accounting -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Babel support for evaluating hledger entries. -;; -;; Based on ob-ledger.el. -;; If the source block is empty, hledger will use a default journal file, -;; probably ~/.hledger.journal (it may not notice your $LEDGER_FILE env var). -;; So make ~/.hledger.journal a symbolic link to the real file if necessary. - -;; TODO Unit tests are more than welcome, too. - -;;; Code: -(require 'ob) - -(defvar org-babel-default-header-args:hledger - '((:results . "output") (:exports . "results") (:cmdline . "bal")) - "Default arguments to use when evaluating a hledger source block.") - -(defun org-babel-execute:hledger (body params) - "Execute a block of hledger entries with org-babel. -This function is called by `org-babel-execute-src-block'." - (message "executing hledger source code block") - (letrec ( ;(result-params (split-string (or (cdr (assq :results params)) ""))) - (cmdline (cdr (assq :cmdline params))) - (in-file (org-babel-temp-file "hledger-")) - (out-file (org-babel-temp-file "hledger-output-")) - (hledgercmd (concat "hledger" - (if (> (length body) 0) - (concat " -f " (org-babel-process-file-name in-file)) - "") - " " cmdline))) - (with-temp-file in-file (insert body)) -;; TODO This is calling for some refactoring: -;; (concat "hledger" (if ...) " " cmdline) -;; could be built only once and bound to a symbol. - (message "%s" hledgercmd) - (with-output-to-string - (shell-command (concat hledgercmd " > " (org-babel-process-file-name out-file)))) - (with-temp-buffer (insert-file-contents out-file) (buffer-string)))) - -(defun org-babel-prep-session:hledger (_session _params) - (error "hledger does not support sessions")) - -(provide 'ob-hledger) - -;;; ob-hledger.el ends here diff --git a/lisp/ob-io.el b/lisp/ob-io.el deleted file mode 100644 index 5955977a9..000000000 --- a/lisp/ob-io.el +++ /dev/null @@ -1,105 +0,0 @@ -;;; ob-io.el --- Babel Functions for Io -*- lexical-binding: t; -*- - -;; Copyright (C) 2012-2021 Free Software Foundation, Inc. - -;; Author: Andrzej Lichnerowicz -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: -;; Currently only supports the external execution. No session support yet. -;; :results output -- runs in scripting mode -;; :results output repl -- runs in repl mode - -;;; Requirements: -;; - Io language :: https://iolanguage.org/ -;; - Io major mode :: Can be installed from Io sources -;; https://github.com/stevedekorte/io/blob/master/extras/SyntaxHighlighters/Emacs/io-mode.el - -;;; Code: -(require 'ob) - -(defvar org-babel-tangle-lang-exts) ;; Autoloaded -(add-to-list 'org-babel-tangle-lang-exts '("io" . "io")) -(defvar org-babel-default-header-args:io '()) -(defvar org-babel-io-command "io" - "Name of the command to use for executing Io code.") - -(defun org-babel-execute:io (body params) - "Execute a block of Io code with org-babel. -This function is called by `org-babel-execute-src-block'." - (message "executing Io source code block") - (let* ((processed-params (org-babel-process-params params)) - (session (org-babel-io-initiate-session (nth 0 processed-params))) - (result-params (nth 2 processed-params)) - (result-type (cdr (assq :result-type params))) - (full-body (org-babel-expand-body:generic - body params)) - (result (org-babel-io-evaluate - session full-body result-type result-params))) - - (org-babel-reassemble-table - result - (org-babel-pick-name - (cdr (assq :colname-names params)) (cdr (assq :colnames params))) - (org-babel-pick-name - (cdr (assq :rowname-names params)) (cdr (assq :rownames params)))))) - -(defvar org-babel-io-wrapper-method - "( -%s -) asString print -") - - -(defun org-babel-io-evaluate (session body &optional result-type result-params) - "Evaluate BODY in external Io process. -If RESULT-TYPE equals `output' then return standard output as a string. -If RESULT-TYPE equals `value' then return the value of the last statement -in BODY as elisp." - (when session (error "Sessions are not (yet) supported for Io")) - (pcase result-type - (`output - (if (member "repl" result-params) - (org-babel-eval org-babel-io-command body) - (let ((src-file (org-babel-temp-file "io-"))) - (progn (with-temp-file src-file (insert body)) - (org-babel-eval - (concat org-babel-io-command " " src-file) ""))))) - (`value (let* ((src-file (org-babel-temp-file "io-")) - (wrapper (format org-babel-io-wrapper-method body))) - (with-temp-file src-file (insert wrapper)) - (let ((raw (org-babel-eval - (concat org-babel-io-command " " src-file) ""))) - (org-babel-result-cond result-params - raw - (org-babel-script-escape raw))))))) - -(defun org-babel-prep-session:io (_session _params) - "Prepare SESSION according to the header arguments specified in PARAMS." - (error "Sessions are not (yet) supported for Io")) - -(defun org-babel-io-initiate-session (&optional _session) - "If there is not a current inferior-process-buffer in SESSION then create. -Return the initialized session. Sessions are not -supported in Io." - nil) - -(provide 'ob-io) - -;;; ob-io.el ends here diff --git a/lisp/ob-ledger.el b/lisp/ob-ledger.el deleted file mode 100644 index 291c35bf6..000000000 --- a/lisp/ob-ledger.el +++ /dev/null @@ -1,69 +0,0 @@ -;;; ob-ledger.el --- Babel Functions for Ledger -*- lexical-binding: t; -*- - -;; Copyright (C) 2010-2021 Free Software Foundation, Inc. - -;; Author: Eric S Fraga -;; Maintainer: Eric S Fraga -;; Keywords: literate programming, reproducible research, accounting -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Org-Babel support for evaluating ledger entries. -;; -;; This differs from most standard languages in that -;; -;; 1) there is no such thing as a "session" in ledger -;; -;; 2) we are generally only going to return output from the ledger program -;; -;; 3) we are adding the "cmdline" header argument -;; -;; 4) there are no variables - -;;; Code: -(require 'ob) - -(defvar org-babel-default-header-args:ledger - '((:results . "output") (:cmdline . "bal")) - "Default arguments to use when evaluating a ledger source block.") - -(defun org-babel-execute:ledger (body params) - "Execute a block of Ledger entries with org-babel. -This function is called by `org-babel-execute-src-block'." - (message "executing Ledger source code block") - (let ((cmdline (cdr (assq :cmdline params))) - (in-file (org-babel-temp-file "ledger-")) - (out-file (org-babel-temp-file "ledger-output-"))) - (with-temp-file in-file (insert body)) - (message "%s" (concat "ledger" - " -f " (org-babel-process-file-name in-file) - " " cmdline)) - (with-output-to-string - (shell-command (concat "ledger" - " -f " (org-babel-process-file-name in-file) - " " cmdline - " > " (org-babel-process-file-name out-file)))) - (with-temp-buffer (insert-file-contents out-file) (buffer-string)))) - -(defun org-babel-prep-session:ledger (_session _params) - (error "Ledger does not support sessions")) - -(provide 'ob-ledger) - -;;; ob-ledger.el ends here diff --git a/lisp/ob-mscgen.el b/lisp/ob-mscgen.el deleted file mode 100644 index 8c699d424..000000000 --- a/lisp/ob-mscgen.el +++ /dev/null @@ -1,82 +0,0 @@ -;;; ob-mscgen.el --- Babel Functions for Mscgen -*- lexical-binding: t; -*- - -;; Copyright (C) 2010-2021 Free Software Foundation, Inc. - -;; Author: Juan Pechiar -;; Maintainer: Justin Abrahms -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: -;; -;; This software provides EMACS org-babel export support for message -;; sequence charts. The mscgen utility is used for processing the -;; sequence definition, and must therefore be installed in the system. -;; -;; Mscgen is available and documented at -;; https://www.mcternan.me.uk/mscgen/index.html -;; -;; This code is directly inspired by Eric Schulte's ob-dot.el -;; -;; Example: -;; -;; #+begin_src mscgen :file example.png -;; msc { -;; A,B; -;; A -> B [ label = "send message" ]; -;; A <- B [ label = "get answer" ]; -;; } -;; #+end_src -;; -;; Header for alternative file type: -;; -;; #+begin_src mscgen :file ex2.svg :filetype svg - -;; This differs from most standard languages in that -;; -;; 1) there is no such thing as a "session" in mscgen -;; 2) we are generally only going to return results of type "file" -;; 3) we are adding the "file" and "filetype" header arguments -;; 4) there are no variables - -;;; Code: -(require 'ob) - -(defvar org-babel-default-header-args:mscgen - '((:results . "file") (:exports . "results")) - "Default arguments to use when evaluating a mscgen source block.") - -(defun org-babel-execute:mscgen (body params) - "Execute a block of Mscgen code with Babel. -This function is called by `org-babel-execute-src-block'. -Default filetype is png. Modify by setting :filetype parameter to -mscgen supported formats." - (let* ((out-file (or (cdr (assq :file params)) "output.png" )) - (filetype (or (cdr (assq :filetype params)) "png" ))) - (unless (cdr (assq :file params)) - (error "ERROR: no output file specified. Add \":file name.png\" to the src header")) - (org-babel-eval (concat "mscgen -T " filetype " -o " out-file) body) - nil)) ;; signal that output has already been written to file - -(defun org-babel-prep-session:mscgen (_session _params) - "Raise an error because Mscgen doesn't support sessions." - (error "Mscgen does not support sessions")) - -(provide 'ob-mscgen) - -;;; ob-mscgen.el ends here diff --git a/lisp/ob-picolisp.el b/lisp/ob-picolisp.el deleted file mode 100644 index 102389d58..000000000 --- a/lisp/ob-picolisp.el +++ /dev/null @@ -1,185 +0,0 @@ -;;; ob-picolisp.el --- Babel Functions for Picolisp -*- lexical-binding: t; -*- - -;; Copyright (C) 2010-2021 Free Software Foundation, Inc. - -;; Authors: Thorsten Jolitz -;; Eric Schulte -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; This library enables the use of PicoLisp in the multi-language -;; programming framework Org-Babel. PicoLisp is a minimal yet -;; fascinating Lisp dialect and a highly productive application -;; framework for web-based client-server applications on top of -;; object-oriented databases. A good way to learn PicoLisp is to first -;; read Paul Grahams essay "The hundred year language" -;; (http://www.paulgraham.com/hundred.html) and then study the various -;; documents and essays published in the PicoLisp wiki -;; (https://picolisp.com/5000/-2.html). PicoLisp is included in some -;; GNU/Linux Distributions, and can be downloaded here: -;; https://software-lab.de/down.html. It ships with a picolisp-mode and -;; an inferior-picolisp-mode for Emacs (to be found in the /lib/el/ -;; directory). - -;; Although it might seem more natural to use Emacs Lisp for most -;; Lisp-based programming tasks inside Org, an Emacs library written -;; in Emacs Lisp, PicoLisp has at least two outstanding features that -;; make it a valuable addition to Org Babel: - -;; PicoLisp _is_ an object-oriented database with a Prolog-based query -;; language implemented in PicoLisp (Pilog). Database objects are -;; first-class members of the language. - -;; PicoLisp is an extremely productive framework for the development -;; of interactive web-applications (on top of a database). - -;;; Requirements: - -;;; Code: -(require 'ob) -(require 'comint) - -(declare-function run-picolisp "ext:inferior-picolisp" (cmd)) -(defvar org-babel-tangle-lang-exts) ;; Autoloaded - -;; optionally define a file extension for this language -(add-to-list 'org-babel-tangle-lang-exts '("picolisp" . "l")) - -;;; interferes with settings in org-babel buffer? -;; optionally declare default header arguments for this language -;; (defvar org-babel-default-header-args:picolisp -;; '((:colnames . "no")) -;; "Default arguments for evaluating a picolisp source block.") - -(defvar org-babel-picolisp-eoe "org-babel-picolisp-eoe" - "String to indicate that evaluation has completed.") - -(defcustom org-babel-picolisp-cmd "pil" - "Name of command used to evaluate picolisp blocks." - :group 'org-babel - :version "24.1" - :type 'string) - -(defun org-babel-expand-body:picolisp (body params) - "Expand BODY according to PARAMS, return the expanded body." - (let ((vars (org-babel--get-vars params)) - (print-level nil) - (print-length nil)) - (if (> (length vars) 0) - (concat "(prog (let (" - (mapconcat - (lambda (var) - (format "%S '%S)" - (print (car var)) - (print (cdr var)))) - vars "\n ") - " \n" body ") )") - body))) - -(defun org-babel-execute:picolisp (body params) - "Execute a block of Picolisp code with org-babel. -This function is called by `org-babel-execute-src-block'." - (message "executing Picolisp source code block") - (let* ( - ;; Name of the session or "none". - (session-name (cdr (assq :session params))) - ;; Set the session if the session variable is non-nil. - (session (org-babel-picolisp-initiate-session session-name)) - ;; Either OUTPUT or VALUE which should behave as described above. - (result-params (cdr (assq :result-params params))) - ;; Expand the body with `org-babel-expand-body:picolisp'. - (full-body (org-babel-expand-body:picolisp body params)) - ;; Wrap body appropriately for the type of evaluation and results. - (wrapped-body - (cond - ((or (member "code" result-params) - (member "pp" result-params)) - (format "(pretty (out \"%s\" %s))" null-device full-body)) - ((and (member "value" result-params) (not session)) - (format "(print (out \"%s\" %s))" null-device full-body)) - ((member "value" result-params) - (format "(out \"%s\" %s)" null-device full-body)) - (t full-body))) - (result - (if (not (string= session-name "none")) - ;; Session based evaluation. - (mapconcat ;; <- joins the list back into a single string - #'identity - (butlast ;; <- remove the org-babel-picolisp-eoe line - (delq nil - (mapcar - (lambda (line) - (org-babel-chomp ;; Remove trailing newlines. - (when (> (length line) 0) ;; Remove empty lines. - (cond - ;; Remove leading "-> " from return values. - ((and (>= (length line) 3) - (string= "-> " (substring line 0 3))) - (substring line 3)) - ;; Remove trailing "-> <>" on the - ;; last line of output. - ((and (member "output" result-params) - (string-match-p "->" line)) - (substring line 0 (string-match "->" line))) - (t line) - ) - ;;(if (and (>= (length line) 3);Remove leading "<-" - ;; (string= "-> " (substring line 0 3))) - ;; (substring line 3) - ;; line) - ))) - ;; Returns a list of the output of each evaluated exp. - (org-babel-comint-with-output - (session org-babel-picolisp-eoe) - (insert wrapped-body) (comint-send-input) - (insert "'" org-babel-picolisp-eoe) - (comint-send-input))))) - "\n") - ;; external evaluation - (let ((script-file (org-babel-temp-file "picolisp-script-"))) - (with-temp-file script-file - (insert (concat wrapped-body "(bye)"))) - (org-babel-eval - (format "%s %s" - org-babel-picolisp-cmd - (org-babel-process-file-name script-file)) - ""))))) - (org-babel-result-cond result-params - result - (read result)))) - -(defun org-babel-picolisp-initiate-session (&optional session-name) - "If there is not a current inferior-process-buffer in SESSION then create. -Return the initialized session." - (unless (string= session-name "none") - (require 'inferior-picolisp) - ;; provide a reasonable default session name - (let ((session (or session-name "*inferior-picolisp*"))) - ;; check if we already have a live session by this name - (if (org-babel-comint-buffer-livep session) - (get-buffer session) - (save-window-excursion - (run-picolisp org-babel-picolisp-cmd) - (rename-buffer session-name) - (current-buffer)))))) - -(provide 'ob-picolisp) - -;;; ob-picolisp.el ends here diff --git a/lisp/ob-shen.el b/lisp/ob-shen.el deleted file mode 100644 index 6803b0bf6..000000000 --- a/lisp/ob-shen.el +++ /dev/null @@ -1,79 +0,0 @@ -;;; ob-shen.el --- Babel Functions for Shen -*- lexical-binding: t; -*- - -;; Copyright (C) 2010-2021 Free Software Foundation, Inc. - -;; Author: Eric Schulte -;; Keywords: literate programming, reproducible research, shen -;; Homepage: https://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Currently this only works using session evaluation as there is no -;; defined method for executing shen code outside of a session. - -;;; Requirements: - -;; - shen-mode and inf-shen will soon be available through the GNU -;; elpa, however in the interim they are available at -;; https://github.com/eschulte/shen-mode - -;;; Code: -(require 'ob) - -(declare-function shen-eval-defun "ext:inf-shen" (&optional and-go)) -(declare-function org-babel-ruby-var-to-ruby "ob-ruby" (var)) - -(defvar org-babel-default-header-args:shen '() - "Default header arguments for shen code blocks.") - -(defun org-babel-expand-body:shen (body params) - "Expand BODY according to PARAMS, return the expanded body." - (let ((vars (org-babel--get-vars params))) - (if (> (length vars) 0) - (concat "(let " - (mapconcat (lambda (var) - (format "%s %s" (car var) - (org-babel-shen-var-to-shen (cdr var)))) - vars " ") - body ")") - body))) - -(defun org-babel-shen-var-to-shen (var) - "Convert VAR into a shen variable." - (if (listp var) - (concat "[" (mapconcat #'org-babel-ruby-var-to-ruby var " ") "]") - (format "%S" var))) - -(defun org-babel-execute:shen (body params) - "Execute a block of Shen code with org-babel. -This function is called by `org-babel-execute-src-block'." - (require 'inf-shen) - (let* ((result-params (cdr (assq :result-params params))) - (full-body (org-babel-expand-body:shen body params))) - (let ((results - (with-temp-buffer - (insert full-body) - (call-interactively #'shen-eval-defun)))) - (org-babel-result-cond result-params - results - (condition-case nil (org-babel-script-escape results) - (error results)))))) - -(provide 'ob-shen) - -;;; ob-shen.el ends here diff --git a/lisp/ob-vala.el b/lisp/ob-vala.el deleted file mode 100644 index 6c3068a8b..000000000 --- a/lisp/ob-vala.el +++ /dev/null @@ -1,116 +0,0 @@ -;;; ob-vala.el --- Babel functions for Vala evaluation -*- lexical-binding: t; -*- - -;; Copyright (C) 2017-2021 Free Software Foundation, Inc. - -;; Author: Christian Garbs -;; Keywords: literate programming, reproducible research -;; Homepage: https://orgmode.org - -;;; License: - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; ob-vala.el provides Babel support for the Vala language -;; (see https://live.gnome.org/Vala for details) - -;;; Requirements: - -;; - Vala compiler binary (valac) -;; - Vala development environment (Vala libraries etc.) -;; -;; vala-mode.el is nice to have for code formatting, but is not needed -;; for ob-vala.el - -;;; Code: - -(require 'ob) -(require 'org-macs) - -;; File extension. -(add-to-list 'org-babel-tangle-lang-exts '("vala" . "vala")) - -;; Header arguments empty by default. -(defvar org-babel-default-header-args:vala '()) - -(defcustom org-babel-vala-compiler "valac" - "Command used to compile a C source code file into an executable. -May be either a command in the path, like \"valac\" -or an absolute path name, like \"/usr/local/bin/valac\". -Parameters may be used like this: \"valac -v\"" - :group 'org-babel - :version "26.1" - :package-version '(Org . "9.1") - :type 'string) - -;; This is the main function which is called to evaluate a code -;; block. -;; -;; - run Vala compiler and create a binary in a temporary file -;; - compiler/linker flags can be set via :flags header argument -;; - if compilation succeeded, run the binary -;; - commandline parameters to the binary can be set via :cmdline -;; header argument -;; - stdout will be parsed as RESULT (control via :result-params -;; header argument) -;; -;; There is no session support because Vala is a compiled language. -;; -;; This function is heavily based on ob-C.el -(defun org-babel-execute:vala (body params) - "Execute a block of Vala code with Babel. -This function is called by `org-babel-execute-src-block'." - (message "executing Vala source code block") - (let* ((tmp-src-file (org-babel-temp-file - "vala-src-" - ".vala")) - (tmp-bin-file (org-babel-temp-file "vala-bin-" org-babel-exeext)) - (cmdline (cdr (assq :cmdline params))) - (flags (cdr (assq :flags params)))) - (with-temp-file tmp-src-file (insert body)) - (org-babel-eval - (format "%s %s -o %s %s" - org-babel-vala-compiler - (mapconcat #'identity - (if (listp flags) flags (list flags)) " ") - (org-babel-process-file-name tmp-bin-file) - (org-babel-process-file-name tmp-src-file)) "") - (when (file-executable-p tmp-bin-file) - (let ((results - (org-trim - (org-babel-eval - (concat tmp-bin-file (if cmdline (concat " " cmdline) "")) "")))) - (org-babel-reassemble-table - (org-babel-result-cond (cdr (assq :result-params params)) - (org-babel-read results) - (let ((tmp-file (org-babel-temp-file "vala-"))) - (with-temp-file tmp-file (insert results)) - (org-babel-import-elisp-from-file tmp-file))) - (org-babel-pick-name - (cdr (assq :colname-names params)) (cdr (assq :colnames params))) - (org-babel-pick-name - (cdr (assq :rowname-names params)) (cdr (assq :rownames params)))))))) - -(defun org-babel-prep-session:vala (_session _params) - "Prepare a session. -This function does nothing as Vala is a compiled language with no -support for sessions." - (error "Vala is a compiled language -- no support for sessions")) - -(provide 'ob-vala) - -;;; ob-vala.el ends here