From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?ISO-8859-1?Q?=22Jos=E9_L=2E_Dom=E9nech=22?= Subject: [PATCH] An amended to the enhance Org babel for scheme blocks Date: Mon, 17 Jul 2017 19:55:32 +0200 Message-ID: <87eftfq76z.wl-domenechjosel@gmail.com> References: <87o9skwbrh.wl-domenechjosel@gmail.com> Mime-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: multipart/mixed; boundary="Multipart_Mon_Jul_17_19:55:32_2017-1" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47734) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXAGl-0003vb-OV for emacs-orgmode@gnu.org; Mon, 17 Jul 2017 13:57:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dXAGh-0004wd-Jc for emacs-orgmode@gnu.org; Mon, 17 Jul 2017 13:57:19 -0400 Received: from mail-wm0-x236.google.com ([2a00:1450:400c:c09::236]:36525) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dXAGh-0004vR-8O for emacs-orgmode@gnu.org; Mon, 17 Jul 2017 13:57:15 -0400 Received: by mail-wm0-x236.google.com with SMTP id t70so22967183wmt.1 for ; Mon, 17 Jul 2017 10:57:13 -0700 (PDT) In-Reply-To: <87o9skwbrh.wl-domenechjosel@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: =?ISO-8859-1?Q?=22Jos=E9_Luis_Dom=E9nech_Mart=EDnez=22?= Cc: Org Mode --Multipart_Mon_Jul_17_19:55:32_2017-1 Content-Type: text/plain; charset=US-ASCII Hello again, I have added a :prologue param to the scheme blocks of babel. This multiple option prepends all the values in the generated code of the block. This patch also includes the previous one that enabled returning a table when evaluating a scheme block. A changelog: Enhance the babel block for scheme. Allows scheme code blocks to return a table and add a :prologue param to the scheme blocks. All :prologue params are prepended to the body of code. * lisp/ob-scheme.el (org-babel-scheme-null-to): New custom option that allows to use a empty list to format the table output, initially assigned to 'hlines. (org-babel-scheme-table-or-string): New helper function to convert the return value from the block as a table or a string. (org-babel-execute-src-block): Changed to allow the return of a table for the output. (org-babel-expand-body:scheme) Add :prologue param support. The patch: --Multipart_Mon_Jul_17_19:55:32_2017-1 Content-Type: text/plain; type=patch; name="0001-Enhance-the-babel-block-for-scheme.patch"; charset=US-ASCII Content-Disposition: attachment; filename="0001-Enhance-the-babel-block-for-scheme.patch" Content-Transfer-Encoding: base64 RnJvbSBjODc3ODZiYzRiNGQ0MGNkZGE5OWE3ZmIwMDYzODJjOGE4NTI5MjhhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Sm9zPUMzPUE5PTIwTD0yRT0yMERvbT1DMz1B OW5lY2g/PSA8ZG9tZW5lY2hqb3NlbEBnbWFpbC5jb20+CkRhdGU6IE1vbiwgMTcgSnVsIDIwMTcg MDg6NDI6MzIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBFbmhhbmNlIHRoZSBiYWJlbCBibG9jayBm b3Igc2NoZW1lLgoKQWxsb3dzIHNjaGVtZSBjb2RlIGJsb2NrcyB0byByZXR1cm4gYSB0YWJsZSBh bmQgYWRkIGEgOnByb2xvZ3VlIHBhcmFtCnRvIHRoZSBzY2hlbWUgYmxvY2tzLiBBbGwgOnByb2xv Z3VlIHBhcmFtcyBhcmUgcHJlcGVuZGVkIHRvIHRoZQpib2R5IG9mIGNvZGUuCgoqIGxpc3Avb2It c2NoZW1lLmVsIChvcmctYmFiZWwtc2NoZW1lLW51bGwtdG8pOiBOZXcgY3VzdG9tIG9wdGlvbiB0 aGF0CiAgYWxsb3dzIHRvIHVzZSBhIGVtcHR5IGxpc3QgdG8gZm9ybWF0IHRoZSB0YWJsZSBvdXRw dXQsIGluaXRpYWxseQogIGFzc2lnbmVkIHRvICdobGluZXMuCiAgKG9yZy1iYWJlbC1zY2hlbWUt dGFibGUtb3Itc3RyaW5nKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0CiAgdGhlIHJl dHVybiB2YWx1ZSBmcm9tIHRoZSBibG9jayBhcyBhIHRhYmxlIG9yIGEgc3RyaW5nLgogIChvcmct YmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spOiBDaGFuZ2VkIHRvIGFsbG93IHRoZSByZXR1cm4gb2Yg YQogIHRhYmxlIGZvciB0aGUgb3V0cHV0LgogIChvcmctYmFiZWwtZXhwYW5kLWJvZHk6c2NoZW1l KSBBZGQgOnByb2xvZ3VlIHBhcmFtIHN1cHBvcnQuCi0tLQogbGlzcC9vYi1zY2hlbWUuZWwgfCA1 MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2xpc3Avb2Itc2NoZW1lLmVsIGIvbGlzcC9vYi1zY2hlbWUuZWwKaW5kZXggY2Q4YzM4 Ni4uNTk5ZWNlNyAxMDA2NDQKLS0tIGEvbGlzcC9vYi1zY2hlbWUuZWwKKysrIGIvbGlzcC9vYi1z Y2hlbWUuZWwKQEAgLTUxLDE0ICs1MSwyNCBAQAogICAgICAgICAgICAgICAgICAgKHN0YXJ0IGVu ZCAmb3B0aW9uYWwgYW5kLWdvIHJhdyBub21zZykpCiAoZGVjbGFyZS1mdW5jdGlvbiBnZWlzZXIt cmVwbC1leGl0ICJleHQ6Z2Vpc2VyLXJlcGwiICgmb3B0aW9uYWwgYXJnKSkKIAorKGRlZmN1c3Rv bSBvcmctYmFiZWwtc2NoZW1lLW51bGwtdG8gJ2hsaW5lCisgICJSZXBsYWNlIGBudWxsJyBpbiBz Y2hlbWUgdGFibGVzIHdpdGggdGhpcyBiZWZvcmUgcmV0dXJuaW5nLiIKKyAgOmdyb3VwICdvcmct YmFiZWwKKyAgOnZlcnNpb24gIjI0LjQiCisgIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4w IikKKyAgOnR5cGUgJ3N5bWJvbCkKKwogKGRlZnZhciBvcmctYmFiZWwtZGVmYXVsdC1oZWFkZXIt YXJnczpzY2hlbWUgJygpCiAgICJEZWZhdWx0IGhlYWRlciBhcmd1bWVudHMgZm9yIHNjaGVtZSBj b2RlIGJsb2Nrcy4iKQogCiAoZGVmdW4gb3JnLWJhYmVsLWV4cGFuZC1ib2R5OnNjaGVtZSAoYm9k eSBwYXJhbXMpCiAgICJFeHBhbmQgQk9EWSBhY2NvcmRpbmcgdG8gUEFSQU1TLCByZXR1cm4gdGhl IGV4cGFuZGVkIGJvZHkuIgotICAobGV0ICgodmFycyAob3JnLWJhYmVsLS1nZXQtdmFycyBwYXJh bXMpKSkKKyAgKGxldCAoKHZhcnMgKG9yZy1iYWJlbC0tZ2V0LXZhcnMgcGFyYW1zKSkKKwkocHJl cGVuZHMgKGNsLXJlbW92ZS1pZi1ub3QgKGxhbWJkYSAoeCkgKGVxIChjYXIgeCkgOnByb2xvZ3Vl KSkgcGFyYW1zKSkpCiAgICAgKGlmICg+IChsZW5ndGggdmFycykgMCkKLSAgICAgICAgKGNvbmNh dCAiKGxldCAoIgorICAgICAgICAoY29uY2F0IChtYXBjb25jYXQgKGxhbWJkYSAocCkgKGZvcm1h dCAiJXMiIChjZHIgcCkpKQorCQkJICAgcHJlcGVuZHMgIlxuICAgICAiKQorCSAgICAgICAgIihs ZXQgKCIKICAgICAgICAgICAgICAgICAobWFwY29uY2F0CiAgICAgICAgICAgICAgICAgIChsYW1i ZGEgKHZhcikgKGZvcm1hdCAiJVMiIChwcmludCBgKCwoY2FyIHZhcikgJywoY2RyIHZhcikpKSkp CiAgICAgICAgICAgICAgICAgIHZhcnMgIlxuICAgICAgIikKQEAgLTE3Niw2ICsxODYsMTggQEAg aXMgdHJ1ZTsgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGxhc3QgdmFsdWUuIgogCQkgICAgICAgcmVz dWx0KSkpKQogICAgIHJlc3VsdCkpCiAKKyhkZWZ1biBvcmctYmFiZWwtc2NoZW1lLXRhYmxlLW9y LXN0cmluZyAocmVzdWx0cykKKyAgIkNvbnZlcnQgUkVTVUxUUyBpbnRvIGFuIGFwcHJvcHJpYXRl IGVsaXNwIHZhbHVlLgorSWYgdGhlIHJlc3VsdHMgbG9vayBsaWtlIGEgbGlzdCBvciB0dXBsZSwg dGhlbiBjb252ZXJ0IHRoZW0gaW50byBhbgorRW1hY3MtbGlzcCB0YWJsZSwgb3RoZXJ3aXNlIHJl dHVybiB0aGUgcmVzdWx0cyBhcyBhIHN0cmluZy4iCisgIChsZXQgKChyZXMgKG9yZy1iYWJlbC1z Y3JpcHQtZXNjYXBlIHJlc3VsdHMpKSkKKyAgICAoaWYgKGxpc3RwIHJlcykKKyAgICAgICAgKG1h cGNhciAobGFtYmRhIChlbCkgKGlmIChvciAoZXEgZWwgJygpKSAoZXEgZWwgJ251bGwpKQorCQkJ CSBvcmctYmFiZWwtc2NoZW1lLW51bGwtdG8KKwkJCSAgICAgICBlbCkpCisgICAgICAgICAgICAg ICAgcmVzKQorICAgICAgcmVzKSkpCisKIChkZWZ1biBvcmctYmFiZWwtZXhlY3V0ZTpzY2hlbWUg KGJvZHkgcGFyYW1zKQogICAiRXhlY3V0ZSBhIGJsb2NrIG9mIFNjaGVtZSBjb2RlIHdpdGggb3Jn LWJhYmVsLgogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG9yZy1iYWJlbC1leGVjdXRlLXNy Yy1ibG9jayciCkBAIC0xODQsNyArMjA2LDYgQEAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkg YG9yZy1iYWJlbC1leGVjdXRlLXNyYy1ibG9jayciCiAJCQkgICAgICAiXiA/XFwqXFwoW14qXStc XClcXCoiICJcXDEiCiAJCQkgICAgICAoYnVmZmVyLW5hbWUgc291cmNlLWJ1ZmZlcikpKSkKICAg ICAoc2F2ZS1leGN1cnNpb24KLSAgICAgIChvcmctYmFiZWwtcmVhc3NlbWJsZS10YWJsZQogICAg ICAgIChsZXQqICgocmVzdWx0LXR5cGUgKGNkciAoYXNzcSA6cmVzdWx0LXR5cGUgcGFyYW1zKSkp CiAJICAgICAgKGltcGwgKG9yICh3aGVuIChjZHIgKGFzc3EgOnNjaGVtZSBwYXJhbXMpKQogCQkJ ICAoaW50ZXJuIChjZHIgKGFzc3EgOnNjaGVtZSBwYXJhbXMpKSkpCkBAIC0xOTIsMTYgKzIxMywy MiBAQCBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgb3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJs b2NrJyIKIAkJCShjYXIgZ2Vpc2VyLWFjdGl2ZS1pbXBsZW1lbnRhdGlvbnMpKSkKIAkgICAgICAo c2Vzc2lvbiAob3JnLWJhYmVsLXNjaGVtZS1tYWtlLXNlc3Npb24tbmFtZQogCQkJc291cmNlLWJ1 ZmZlci1uYW1lIChjZHIgKGFzc3EgOnNlc3Npb24gcGFyYW1zKSkgaW1wbCkpCi0JICAgICAgKGZ1 bGwtYm9keSAob3JnLWJhYmVsLWV4cGFuZC1ib2R5OnNjaGVtZSBib2R5IHBhcmFtcykpKQotCSAo b3JnLWJhYmVsLXNjaGVtZS1leGVjdXRlLXdpdGgtZ2Vpc2VyCi0JICBmdWxsLWJvZHkJCQkgOyBj b2RlCi0JICAoc3RyaW5nPSByZXN1bHQtdHlwZSAib3V0cHV0IikgOyBvdXRwdXQ/Ci0JICBpbXBs CQkJCSA7IGltcGxlbWVudGF0aW9uCi0JICAoYW5kIChub3QgKHN0cmluZz0gc2Vzc2lvbiAibm9u ZSIpKSBzZXNzaW9uKSkpIDsgc2Vzc2lvbgotICAgICAgIChvcmctYmFiZWwtcGljay1uYW1lIChj ZHIgKGFzc3EgOmNvbG5hbWUtbmFtZXMgcGFyYW1zKSkKLQkJCSAgICAoY2RyIChhc3NxIDpjb2xu YW1lcyBwYXJhbXMpKSkKLSAgICAgICAob3JnLWJhYmVsLXBpY2stbmFtZSAoY2RyIChhc3NxIDpy b3duYW1lLW5hbWVzIHBhcmFtcykpCi0JCQkgICAgKGNkciAoYXNzcSA6cm93bmFtZXMgcGFyYW1z KSkpKSkpKQorCSAgICAgIChmdWxsLWJvZHkgKG9yZy1iYWJlbC1leHBhbmQtYm9keTpzY2hlbWUg Ym9keSBwYXJhbXMpKQorCSAgICAgIChyZXN1bHQKKwkgICAgICAgKG9yZy1iYWJlbC1zY2hlbWUt ZXhlY3V0ZS13aXRoLWdlaXNlcgorCQlmdWxsLWJvZHkJCQkgOyBjb2RlCisJCShzdHJpbmc9IHJl c3VsdC10eXBlICJvdXRwdXQiKSAgIDsgb3V0cHV0PworCQlpbXBsCQkJCSA7IGltcGxlbWVudGF0 aW9uCisJCShhbmQgKG5vdCAoc3RyaW5nPSBzZXNzaW9uICJub25lIikpIHNlc3Npb24pKSkgOyBz ZXNzaW9uCisJICAgICAgKQorCSAobGV0ICgodGFibGUKKwkJKG9yZy1iYWJlbC1yZWFzc2VtYmxl LXRhYmxlCisJCSByZXN1bHQKKwkJIChvcmctYmFiZWwtcGljay1uYW1lIChjZHIgKGFzc3EgOmNv bG5hbWUtbmFtZXMgcGFyYW1zKSkKKwkJCQkgICAgICAoY2RyIChhc3NxIDpjb2xuYW1lcyBwYXJh bXMpKSkKKwkJIChvcmctYmFiZWwtcGljay1uYW1lIChjZHIgKGFzc3EgOnJvd25hbWUtbmFtZXMg cGFyYW1zKSkKKwkJCQkgICAgICAoY2RyIChhc3NxIDpyb3duYW1lcyBwYXJhbXMpKSkpKSkKKwkg ICAob3JnLWJhYmVsLXNjaGVtZS10YWJsZS1vci1zdHJpbmcgdGFibGUpKSkpKSkKIAogKHByb3Zp ZGUgJ29iLXNjaGVtZSkKIAotLSAKMi43LjQKCg== --Multipart_Mon_Jul_17_19:55:32_2017-1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I hope it will be useful for someone. Jos=E9 L. Dom=E9nech On Sun, 16 Jul 2017 19:08:02 +0200, Jos=E9 L. Dom=E9nech wrote: >=20 > [1 ] > Hello, I have modified 'ob-scheme.el' to be able to return org tables. >=20 > This is a quick patch. I hope you find it useful buut I could modify, > document or write test for it if necesary. >=20 > I have already assigned the copyright for Emacs to the FSF. >=20 >=20 > Enhance the scheme babel block output. >=20 > Allow scheme code blocks to return a table. >=20 > * lisp/ob-scheme.el (org-babel-scheme-null-to): New custom option that > allows to use a empty list to format the table output, initially assign= ed > to 'hlines. > (org-babel-scheme-table-or-string): New helper function to convert the > return value from the block as a table or a string. > (org-babel-execute-src-block): Changed to allow the return of a table f= or > the output. >=20 > [2 ob-scheme.el.diff ] > 1 file changed, 35 insertions(+), 11 deletions(-) > lisp/ob-scheme.el | 46 +++++++++++++++++++++++++++++++++++----------- >=20 > modified lisp/ob-scheme.el > @@ -51,6 +51,13 @@ > (start end &optional and-go raw nomsg)) > (declare-function geiser-repl-exit "ext:geiser-repl" (&optional arg)) > =20 > +(defcustom org-babel-scheme-null-to 'hline > + "Replace `null' in scheme tables with this before returning." > + :group 'org-babel > + :version "24.4" > + :package-version '(Org . "8.0") > + :type 'symbol) > + > (defvar org-babel-default-header-args:scheme '() > "Default header arguments for scheme code blocks.") > =20 > @@ -176,6 +183,18 @@ is true; otherwise returns the last value." > result)))) > result)) > =20 > +(defun org-babel-scheme-table-or-string (results) > + "Convert RESULTS into an appropriate elisp value. > +If the results look like a list or tuple, then convert them into an > +Emacs-lisp table, otherwise return the results as a string." > + (let ((res (org-babel-script-escape results))) > + (if (listp res) > + (mapcar (lambda (el) (if (or (eq el '()) (eq el 'null)) > + org-babel-scheme-null-to > + el)) > + res) > + res))) > + > (defun org-babel-execute:scheme (body params) > "Execute a block of Scheme code with org-babel. > This function is called by `org-babel-execute-src-block'" > @@ -184,7 +203,6 @@ This function is called by `org-babel-execute-src-blo= ck'" > "^ ?\\*\\([^*]+\\)\\*" "\\1" > (buffer-name source-buffer)))) > (save-excursion > - (org-babel-reassemble-table > (let* ((result-type (cdr (assq :result-type params))) > (impl (or (when (cdr (assq :scheme params)) > (intern (cdr (assq :scheme params)))) > @@ -192,16 +210,22 @@ This function is called by `org-babel-execute-src-b= lock'" > (car geiser-active-implementations))) > (session (org-babel-scheme-make-session-name > source-buffer-name (cdr (assq :session params)) impl)) > - (full-body (org-babel-expand-body:scheme body params))) > - (org-babel-scheme-execute-with-geiser > - full-body ; code > - (string=3D result-type "output") ; output? > - impl ; implementation > - (and (not (string=3D session "none")) session))) ; session > - (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))))))) > + (full-body (org-babel-expand-body:scheme body params)) > + (result > + (org-babel-scheme-execute-with-geiser > + full-body ; code > + (string=3D result-type "output") ; output? > + impl ; implementation > + (and (not (string=3D session "none")) session))) ; session > + ) > + (let ((table > + (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)))))) > + (org-babel-scheme-table-or-string table)))))) > =20 > (provide 'ob-scheme) > =20 > [3 ] >=20 >=20 > Best regards: >=20 > Jos=E9 L. Dom=E9nech --Multipart_Mon_Jul_17_19:55:32_2017-1--