From mboxrd@z Thu Jan 1 00:00:00 1970 From: stardiviner Subject: [PATCH] migrate ob-clojure initiate session code from ob-clojure-literate.el into ob-clojure.el Date: Thu, 19 Apr 2018 18:22:32 +0800 Message-ID: <87a7tza42f.fsf@gmail.com> Reply-To: numbchild@gmail.com Mime-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:36091) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f96iH-0004nN-Ju for emacs-orgmode@gnu.org; Thu, 19 Apr 2018 06:22:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f96iE-0003EC-8T for emacs-orgmode@gnu.org; Thu, 19 Apr 2018 06:22:49 -0400 Received: from [183.249.136.165] (port=3676 helo=dark.localdomain) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f96iD-000378-8s for emacs-orgmode@gnu.org; Thu, 19 Apr 2018 06:22:46 -0400 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: org-mode --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain Those code belongs to ob-clojure.el. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-ob-clojure.el-support-org-babel-initiate-session-to-.patch Content-Transfer-Encoding: quoted-printable From=207306147a55ea29be7a685cd7a92dc158612dfccd Mon Sep 17 00:00:00 2001 From: stardiviner Date: Thu, 19 Apr 2018 18:16:27 +0800 Subject: [PATCH] * ob-clojure.el: support `org-babel-initiate-session' to initialize. Migrate from ob-clojure-literate.el into ob-clojure.el. =2D-- contrib/lisp/ob-clojure-literate.el | 56 ----------------------------- lisp/ob-clojure.el | 55 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 56 deletions(-) diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-= literate.el index e702582d9..ecf786df7 100644 =2D-- a/contrib/lisp/ob-clojure-literate.el +++ b/contrib/lisp/ob-clojure-literate.el @@ -185,62 +185,6 @@ If it is a directory, `ob-clojure-literate' will try t= o create Clojure project a org-babel-default-header-args:clojure))) )) =20 =2D;;; Support `org-babel-initiate-session' / [C-c C-v z] to initialize Clo= jure session. =2D =2D(defun org-babel-clojure-initiate-session (&optional session _params) =2D "Initiate a session named SESSION according to PARAMS." =2D (when (and session (not (string=3D session "none"))) =2D (save-window-excursion =2D (unless (org-babel-comint-buffer-livep session) =2D ;; CIDER jack-in to the Clojure project directory. =2D (cond =2D ((eq org-babel-clojure-backend 'cider) =2D (require 'cider) =2D (let ((session-buffer (save-window-excursion =2D (cider-jack-in t) =2D (current-buffer)))) =2D (if (org-babel-comint-buffer-livep session-buffer) =2D (progn (sit-for .25) session-buffer)))) =2D ((eq org-babel-clojure-backend 'slime) =2D (error "Session evaluation with SLIME is not supported")) =2D (t =2D (error "Session initiate failed"))) =2D ) =2D (get-buffer session) =2D ))) =2D =2D(defun org-babel-prep-session:clojure (session params) =2D "Prepare SESSION according to the header arguments specified in PARAMS= ." =2D (let* ((session (org-babel-clojure-initiate-session session)) =2D (var-lines (org-babel-variable-assignments:clojure params))) =2D (when session =2D (org-babel-comint-in-buffer session =2D (mapc (lambda (var) =2D (insert var) (comint-send-input nil t) =2D (org-babel-comint-wait-for-output session) =2D (sit-for .1) (goto-char (point-max))) var-lines))) =2D session)) =2D =2D(defun org-babel-clojure-var-to-clojure (var) =2D "Convert src block's `VAR' to Clojure variable." =2D (if (listp var) =2D (replace-regexp-in-string "(" "'(" var) =2D (cond =2D ((stringp var) =2D ;; wrap org-babel passed in header argument value with quote in Cl= ojure. =2D (format "\"%s\"" var)) =2D (t =2D (format "%s" var)))) =2D ) =2D =2D(defun org-babel-variable-assignments:clojure (params) =2D "Return a list of Clojure statements assigning the block's variables i= n `PARAMS'." =2D (mapcar =2D (lambda (pair) =2D (format "(def %s %s)" =2D (car pair) =2D (org-babel-clojure-var-to-clojure (cdr pair)))) =2D (org-babel--get-vars params))) =20 ;;; Support header arguments :results graphics :file "image.png" by injec= t Clojure code. (defun ob-clojure-literate-inject-code (args) diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index 93674b552..f647a3282 100644 =2D-- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -211,6 +211,61 @@ using the :show-process parameter." (condition-case nil (org-babel-script-escape result) (error result))))) =20 +(defun org-babel-clojure-initiate-session (&optional session _params) + "Initiate a session named SESSION according to PARAMS." + (when (and session (not (string=3D session "none"))) + (save-window-excursion + (unless (org-babel-comint-buffer-livep session) + ;; CIDER jack-in to the Clojure project directory. + (cond + ((eq org-babel-clojure-backend 'cider) + (require 'cider) + (let ((session-buffer (save-window-excursion + (cider-jack-in t) + (current-buffer)))) + (if (org-babel-comint-buffer-livep session-buffer) + (progn (sit-for .25) session-buffer)))) + ((eq org-babel-clojure-backend 'slime) + (error "Session evaluation with SLIME is not supported")) + (t + (error "Session initiate failed"))) + ) + (get-buffer session) + ))) + +(defun org-babel-prep-session:clojure (session params) + "Prepare SESSION according to the header arguments specified in PARAMS." + (let* ((session (org-babel-clojure-initiate-session session)) + (var-lines (org-babel-variable-assignments:clojure params))) + (when session + (org-babel-comint-in-buffer session + (mapc (lambda (var) + (insert var) (comint-send-input nil t) + (org-babel-comint-wait-for-output session) + (sit-for .1) (goto-char (point-max))) var-lines))) + session)) + +(defun org-babel-clojure-var-to-clojure (var) + "Convert src block's `VAR' to Clojure variable." + (if (listp var) + (replace-regexp-in-string "(" "'(" var) + (cond + ((stringp var) + ;; wrap org-babel passed in header argument value with quote in Cloj= ure. + (format "\"%s\"" var)) + (t + (format "%s" var)))) + ) + +(defun org-babel-variable-assignments:clojure (params) + "Return a list of Clojure statements assigning the block's variables in = `PARAMS'." + (mapcar + (lambda (pair) + (format "(def %s %s)" + (car pair) + (org-babel-clojure-var-to-clojure (cdr pair)))) + (org-babel--get-vars params))) + (provide 'ob-clojure) =20 ;;; ob-clojure.el ends here =2D-=20 2.17.0 --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable =2D-=20 [ stardiviner ] don't need to convince with trends. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 =20=20=20=20=20=20 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEE8J9lDX1nSBmJJZFAG13xyVromsMFAlrYbegACgkQG13xyVro msMUpQf/U4DC1GRQUjkOXGMY2TGtc+LFOjkE+7eUhtg/yJ50YEvNyi9amX0Tp/2R 0laWq4u/ED86RdtpCd7XeFnZBpL3TphVauXtUTUmzEGB36MsOM31fc0cfGdkM8N9 VpETrbzp+LV7M/KtboOCI38qNZc6W7Nn1jdmrNbxu3sw8SLKDnnj2tYiyXAcoazR h1BD6p1mhtfUiHKYRGfv1VWoiyAsl+3zOyelEyx1VUsE0eZ/+wR8AxVxiWxfkM2T Sj68dHc2/fdqMY/mIODEuSEX/BgWYqcZ1D6k4XyW/XIG+ozRinJeA1Ad8NqGb5Td v+GYT/ayHOz1SMNvrUh+PYBDCOi20g== =9I48 -----END PGP SIGNATURE----- --==-=-=--