emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH] ob-clojure-literate.el support :ns header and inject CIDER outside of project
@ 2018-03-21 17:49 stardiviner
  2018-03-26  1:59 ` [PATCH] ob-clojure-literate.el add some new functions stardiviner
  0 siblings, 1 reply; 5+ messages in thread
From: stardiviner @ 2018-03-21 17:49 UTC (permalink / raw)
  To: org-mode


[-- Attachment #1.1: Type: text/plain, Size: 218 bytes --]

Two patches

One is to support ob-clojure.el future coming header argument :ns.

The second is to support jack-in CIDER outside of Clojure project by 
default. Not no need to ob-clojure project to be created anymore.


[-- Attachment #1.2: Type: text/html, Size: 816 bytes --]

[-- Attachment #2: 0001-ob-clojure-literate.el-CIDER-jack-in-outside-of-proj.patch --]
[-- Type: text/x-patch, Size: 4323 bytes --]

From f262876da5744ddb7e5e8d4100a0fe02e1bd9e21 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Thu, 22 Mar 2018 01:21:22 +0800
Subject: [PATCH 1/2] * ob-clojure-literate.el: CIDER jack-in outside of
 project by default.

---
 contrib/lisp/ob-clojure-literate.el | 50 ++++++++++++++++++++++---------------
 1 file changed, 30 insertions(+), 20 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index a7ab1894d..8d419b0b4 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -35,8 +35,10 @@ Don't auto jack in by default for not rude."
   :type 'boolean
   :group 'ob-clojure-literate)
 
-(defcustom ob-clojure-literate-project-location (concat user-emacs-directory "Org-mode/")
-  "The location for `ob-clojure-literate' scaffold project."
+(defcustom ob-clojure-literate-project-location nil
+  "The location for `ob-clojure-literate' scaffold project.
+If it is nil, then `cider-jack-in' will jack-in outside of Clojure project.
+If it is a directory, `ob-clojure-literate' will try to create Clojure project automatically."
   :type 'string
   :group 'ob-clojure-literate)
 
@@ -45,7 +47,7 @@ Don't auto jack in by default for not rude."
 (defvar ob-clojure-literate-session-ns nil)
 (defvar ob-clojure-literate-cider-connections nil)
 
-(defcustom ob-clojure-literate-default-session "*cider-repl ob-clojure*"
+(defcustom ob-clojure-literate-default-session "*cider-repl localhost*"
   "The default session name for `ob-clojure-literate'."
   :type 'string
   :group 'ob-clojure-literate)
@@ -104,23 +106,31 @@ Don't auto jack in by default for not rude."
 (defun ob-clojure-literate-auto-jackin ()
   "Auto setup ob-clojure-literate scaffold and jack-in Clojure project."
   (interactive)
-  (unless (file-directory-p (expand-file-name ob-clojure-literate-project-location))
-    (make-directory ob-clojure-literate-project-location t)
-    (let ((default-directory ob-clojure-literate-project-location))
-      (shell-command "lein new ob-clojure")))
-  (unless (or
-           (and (cider-connected-p)
-                (if (not (null ob-clojure-literate-session))
-                    (seq-contains cider-connections (get-buffer ob-clojure-literate-session))))
-           cider-connections
-           (not (null ob-clojure-literate-session)))
-    ;; return back to original file.
-    (if (not (and (= (length (ob-clojure-literate-get-session-list)) 1)
-                  (-contains-p (ob-clojure-literate-get-session-list) ob-clojure-literate-default-session)))
-        (save-window-excursion
-          (find-file (expand-file-name (concat ob-clojure-literate-project-location "ob-clojure/src/ob_clojure/core.clj")))
-          (with-current-buffer "core.clj"
-            (cider-jack-in))))))
+  (cond
+   ;; jack-in outside of Clojure project.
+   ((null ob-clojure-literate-project-location)
+    (if (member (get-buffer "*cider-repl localhost*") cider-connections)
+	(message "CIDER default session already launched.")
+      (cider-jack-in nil)))
+   ((not (null ob-clojure-literate-project-location))
+    (unless (file-directory-p (expand-file-name ob-clojure-literate-project-location))
+      (make-directory ob-clojure-literate-project-location t)
+      (let ((default-directory ob-clojure-literate-project-location))
+	(shell-command "lein new ob-clojure")))
+    (unless (or
+             (and (cider-connected-p)
+                  (if (not (null ob-clojure-literate-session))
+		      (seq-contains cider-connections (get-buffer ob-clojure-literate-session))))
+             cider-connections
+             (not (null ob-clojure-literate-session)))
+      ;; return back to original file.
+      (if (not (and (= (length (ob-clojure-literate-get-session-list)) 1)
+                    (-contains-p (ob-clojure-literate-get-session-list) ob-clojure-literate-default-session)))
+          (save-window-excursion
+            (find-file (expand-file-name (concat ob-clojure-literate-project-location "ob-clojure/src/ob_clojure/core.clj")))
+            (with-current-buffer "core.clj"
+	      (cider-jack-in))))))
+   ))
 
 (defun ob-clojure-literate-set-local-cider-connections (toggle?)
   "Set buffer local `cider-connections' for `ob-clojure-literate-mode' `TOGGLE?'."
-- 
2.16.2


[-- Attachment #3: 0002-ob-clojure-literate.el-support-use-ns-header-argumen.patch --]
[-- Type: text/x-patch, Size: 2898 bytes --]

From c794c8ecd9a860727fba769b39c373aa84fe9b1f Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Thu, 22 Mar 2018 01:43:18 +0800
Subject: [PATCH 2/2] * ob-clojure-literate.el: support use :ns header
 argument.

- rename ob-clojure-literate-cider-do-not-find-ns to ob-clojure-literate-set-ns
---
 contrib/lisp/ob-clojure-literate.el | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index 8d419b0b4..71ea909ba 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -151,14 +151,15 @@ If it is a directory, `ob-clojure-literate' will try to create Clojure project a
     ;; (setq-local cider-connections '())
     ))
 
-(defun ob-clojure-literate-cider-do-not-find-ns (body params)
+(defun ob-clojure-literate-set-ns (body params)
   "Fix the issue that `cider-current-ns' try to invoke `clojure-find-ns' to extract ns from buffer."
   ;; TODO: Is it possible to find ns in `body'?
   (when (ob-clojure-literate-any-connection-p)
     (setq ob-clojure-literate-original-ns (cider-current-ns))
     (with-current-buffer ob-clojure-literate-session
       (setq ob-clojure-literate-session-ns cider-buffer-ns))
-    (setq-local cider-buffer-ns ob-clojure-literate-session-ns))
+    (setq-local cider-buffer-ns (or (cdr (assq :ns params))
+				    ob-clojure-literate-session-ns)))
   (message (format "ob-clojure-literate: current CIDER ns is [%s]." cider-buffer-ns)))
 
 (defun ob-clojure-literate-set-local-session (toggle?)
@@ -302,7 +303,7 @@ reset `RESULT' to `nil'."
              (equal major-mode 'org-mode)) ; `ob-clojure-literate-mode' only works in `org-mode'.
     (ob-clojure-literate-set-local-cider-connections ob-clojure-literate-mode)
     (ob-clojure-literate-set-local-session ob-clojure-literate-mode)
-    (advice-add 'org-babel-execute:clojure :before #'ob-clojure-literate-cider-do-not-find-ns)
+    (advice-add 'org-babel-execute:clojure :before #'ob-clojure-literate-set-ns)
     (advice-add 'org-babel-expand-body:clojure :filter-args #'ob-clojure-literate-inject-code)
     (advice-add 'org-babel-execute:clojure :filter-return #'ob-clojure-literate-support-graphics-result)
     (message "ob-clojure-literate minor mode enabled.")))
@@ -310,7 +311,7 @@ reset `RESULT' to `nil'."
 ;;;###autoload
 (defun ob-clojure-literate-disable ()
   "Disable Org-mode buffer locally for `ob-clojure-literate'."
-  (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-cider-do-not-find-ns)
+  (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-set-ns)
   (advice-remove 'org-babel-expand-body:clojure #'ob-clojure-literate-inject-code)
   (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-support-graphics-result)
   (setq-local cider-buffer-ns ob-clojure-literate-original-ns)
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] ob-clojure-literate.el add some new functions
  2018-03-21 17:49 [PATCH] ob-clojure-literate.el support :ns header and inject CIDER outside of project stardiviner
@ 2018-03-26  1:59 ` stardiviner
  2018-03-26  4:05   ` [PATCH] ob-clojure.el support :ns header argument stardiviner
  2018-03-26  4:38   ` stardiviner
  0 siblings, 2 replies; 5+ messages in thread
From: stardiviner @ 2018-03-26  1:59 UTC (permalink / raw)
  To: org-mode


[-- Attachment #1.1: Type: text/plain, Size: 510 bytes --]

- support :ns header (as discussed at here 
https://github.com/clojure-emacs/clojure-mode/pull/465#discussion_r158009538)

- supoort inject CIDER outside of project

- support :varinitialization when :session initialization prepare.


On 03/22/2018 01:49 AM, stardiviner wrote:
>
> Two patches
>
> One is to support ob-clojure.el future coming header argument :ns.
>
> The second is to support jack-in CIDER outside of Clojure project by 
> default. Not no need to ob-clojure project to be created anymore.
>


[-- Attachment #1.2: Type: text/html, Size: 1980 bytes --]

[-- Attachment #2: 0001-ob-clojure-literate.el-CIDER-jack-in-outside-of-proj.patch --]
[-- Type: text/x-patch, Size: 4323 bytes --]

From bc575705704ebff7f7630cd35ff936844c89f66a Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Thu, 22 Mar 2018 01:21:22 +0800
Subject: [PATCH 1/3] * ob-clojure-literate.el: CIDER jack-in outside of
 project by default.

---
 contrib/lisp/ob-clojure-literate.el | 50 ++++++++++++++++++++++---------------
 1 file changed, 30 insertions(+), 20 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index a7ab1894d..8d419b0b4 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -35,8 +35,10 @@ Don't auto jack in by default for not rude."
   :type 'boolean
   :group 'ob-clojure-literate)
 
-(defcustom ob-clojure-literate-project-location (concat user-emacs-directory "Org-mode/")
-  "The location for `ob-clojure-literate' scaffold project."
+(defcustom ob-clojure-literate-project-location nil
+  "The location for `ob-clojure-literate' scaffold project.
+If it is nil, then `cider-jack-in' will jack-in outside of Clojure project.
+If it is a directory, `ob-clojure-literate' will try to create Clojure project automatically."
   :type 'string
   :group 'ob-clojure-literate)
 
@@ -45,7 +47,7 @@ Don't auto jack in by default for not rude."
 (defvar ob-clojure-literate-session-ns nil)
 (defvar ob-clojure-literate-cider-connections nil)
 
-(defcustom ob-clojure-literate-default-session "*cider-repl ob-clojure*"
+(defcustom ob-clojure-literate-default-session "*cider-repl localhost*"
   "The default session name for `ob-clojure-literate'."
   :type 'string
   :group 'ob-clojure-literate)
@@ -104,23 +106,31 @@ Don't auto jack in by default for not rude."
 (defun ob-clojure-literate-auto-jackin ()
   "Auto setup ob-clojure-literate scaffold and jack-in Clojure project."
   (interactive)
-  (unless (file-directory-p (expand-file-name ob-clojure-literate-project-location))
-    (make-directory ob-clojure-literate-project-location t)
-    (let ((default-directory ob-clojure-literate-project-location))
-      (shell-command "lein new ob-clojure")))
-  (unless (or
-           (and (cider-connected-p)
-                (if (not (null ob-clojure-literate-session))
-                    (seq-contains cider-connections (get-buffer ob-clojure-literate-session))))
-           cider-connections
-           (not (null ob-clojure-literate-session)))
-    ;; return back to original file.
-    (if (not (and (= (length (ob-clojure-literate-get-session-list)) 1)
-                  (-contains-p (ob-clojure-literate-get-session-list) ob-clojure-literate-default-session)))
-        (save-window-excursion
-          (find-file (expand-file-name (concat ob-clojure-literate-project-location "ob-clojure/src/ob_clojure/core.clj")))
-          (with-current-buffer "core.clj"
-            (cider-jack-in))))))
+  (cond
+   ;; jack-in outside of Clojure project.
+   ((null ob-clojure-literate-project-location)
+    (if (member (get-buffer "*cider-repl localhost*") cider-connections)
+	(message "CIDER default session already launched.")
+      (cider-jack-in nil)))
+   ((not (null ob-clojure-literate-project-location))
+    (unless (file-directory-p (expand-file-name ob-clojure-literate-project-location))
+      (make-directory ob-clojure-literate-project-location t)
+      (let ((default-directory ob-clojure-literate-project-location))
+	(shell-command "lein new ob-clojure")))
+    (unless (or
+             (and (cider-connected-p)
+                  (if (not (null ob-clojure-literate-session))
+		      (seq-contains cider-connections (get-buffer ob-clojure-literate-session))))
+             cider-connections
+             (not (null ob-clojure-literate-session)))
+      ;; return back to original file.
+      (if (not (and (= (length (ob-clojure-literate-get-session-list)) 1)
+                    (-contains-p (ob-clojure-literate-get-session-list) ob-clojure-literate-default-session)))
+          (save-window-excursion
+            (find-file (expand-file-name (concat ob-clojure-literate-project-location "ob-clojure/src/ob_clojure/core.clj")))
+            (with-current-buffer "core.clj"
+	      (cider-jack-in))))))
+   ))
 
 (defun ob-clojure-literate-set-local-cider-connections (toggle?)
   "Set buffer local `cider-connections' for `ob-clojure-literate-mode' `TOGGLE?'."
-- 
2.16.2


[-- Attachment #3: 0002-ob-clojure-literate.el-support-use-ns-header-argumen.patch --]
[-- Type: text/x-patch, Size: 2898 bytes --]

From 25e75ded1466b413a0d098041ad40f52e1707432 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Thu, 22 Mar 2018 01:43:18 +0800
Subject: [PATCH 2/3] * ob-clojure-literate.el: support use :ns header
 argument.

- rename ob-clojure-literate-cider-do-not-find-ns to ob-clojure-literate-set-ns
---
 contrib/lisp/ob-clojure-literate.el | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index 8d419b0b4..71ea909ba 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -151,14 +151,15 @@ If it is a directory, `ob-clojure-literate' will try to create Clojure project a
     ;; (setq-local cider-connections '())
     ))
 
-(defun ob-clojure-literate-cider-do-not-find-ns (body params)
+(defun ob-clojure-literate-set-ns (body params)
   "Fix the issue that `cider-current-ns' try to invoke `clojure-find-ns' to extract ns from buffer."
   ;; TODO: Is it possible to find ns in `body'?
   (when (ob-clojure-literate-any-connection-p)
     (setq ob-clojure-literate-original-ns (cider-current-ns))
     (with-current-buffer ob-clojure-literate-session
       (setq ob-clojure-literate-session-ns cider-buffer-ns))
-    (setq-local cider-buffer-ns ob-clojure-literate-session-ns))
+    (setq-local cider-buffer-ns (or (cdr (assq :ns params))
+				    ob-clojure-literate-session-ns)))
   (message (format "ob-clojure-literate: current CIDER ns is [%s]." cider-buffer-ns)))
 
 (defun ob-clojure-literate-set-local-session (toggle?)
@@ -302,7 +303,7 @@ reset `RESULT' to `nil'."
              (equal major-mode 'org-mode)) ; `ob-clojure-literate-mode' only works in `org-mode'.
     (ob-clojure-literate-set-local-cider-connections ob-clojure-literate-mode)
     (ob-clojure-literate-set-local-session ob-clojure-literate-mode)
-    (advice-add 'org-babel-execute:clojure :before #'ob-clojure-literate-cider-do-not-find-ns)
+    (advice-add 'org-babel-execute:clojure :before #'ob-clojure-literate-set-ns)
     (advice-add 'org-babel-expand-body:clojure :filter-args #'ob-clojure-literate-inject-code)
     (advice-add 'org-babel-execute:clojure :filter-return #'ob-clojure-literate-support-graphics-result)
     (message "ob-clojure-literate minor mode enabled.")))
@@ -310,7 +311,7 @@ reset `RESULT' to `nil'."
 ;;;###autoload
 (defun ob-clojure-literate-disable ()
   "Disable Org-mode buffer locally for `ob-clojure-literate'."
-  (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-cider-do-not-find-ns)
+  (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-set-ns)
   (advice-remove 'org-babel-expand-body:clojure #'ob-clojure-literate-inject-code)
   (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-support-graphics-result)
   (setq-local cider-buffer-ns ob-clojure-literate-original-ns)
-- 
2.16.2


[-- Attachment #4: 0003-ob-clojure-literate.el-support-vars-initialization-w.patch --]
[-- Type: text/x-patch, Size: 1628 bytes --]

From fc8a9082712704f70eabe60c6c612600f16e58d1 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Mon, 26 Mar 2018 09:47:54 +0800
Subject: [PATCH 3/3] * ob-clojure-literate.el: support vars initialization
 when prepare session.

- org-babel-clojure-var-to-clojure
---
 contrib/lisp/ob-clojure-literate.el | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index 71ea909ba..2d1d30db8 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -221,7 +221,14 @@ If it is a directory, `ob-clojure-literate' will try to create Clojure project a
 
 (defun org-babel-clojure-var-to-clojure (var)
   "Convert src block's `VAR' to Clojure variable."
-  ;; TODO: reference `org-babel-python-var-to-python'
+  (if (listp var)
+      (replace-regexp-in-string "(" "'(" var)
+    (cond
+     ((stringp var)
+      ;; wrap org-babel passed in header argument value with quote in Clojure.
+      (format "\"%s\"" var))
+     (t
+      (format "%s" var))))
   )
 
 (defun org-babel-variable-assignments:clojure (params)
@@ -230,8 +237,7 @@ If it is a directory, `ob-clojure-literate' will try to create Clojure project a
    (lambda (pair)
      (format "(def %s %s)"
              (car pair)
-             ;; (org-babel-clojure-var-to-clojure (cdr pair))
-             (cdr pair)))
+             (org-babel-clojure-var-to-clojure (cdr pair))))
    (org-babel--get-vars params)))
 
 ;;; Support header arguments  :results graphics :file "image.png" by inject Clojure code.
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] ob-clojure.el support :ns header argument
  2018-03-26  1:59 ` [PATCH] ob-clojure-literate.el add some new functions stardiviner
@ 2018-03-26  4:05   ` stardiviner
  2018-03-26  4:38   ` stardiviner
  1 sibling, 0 replies; 5+ messages in thread
From: stardiviner @ 2018-03-26  4:05 UTC (permalink / raw)
  To: org-mode


[-- Attachment #1.1: Type: text/plain, Size: 652 bytes --]

This is an extra patch. Should be with previous email's three patches.


On 03/26/2018 09:59 AM, stardiviner wrote:
>
> - support :ns header (as discussed at here 
> https://github.com/clojure-emacs/clojure-mode/pull/465#discussion_r158009538)
>
> - supoort inject CIDER outside of project
>
> - support :varinitialization when :session initialization prepare.
>
>
> On 03/22/2018 01:49 AM, stardiviner wrote:
>>
>> Two patches
>>
>> One is to support ob-clojure.el future coming header argument :ns.
>>
>> The second is to support jack-in CIDER outside of Clojure project by 
>> default. Not no need to ob-clojure project to be created anymore.
>>
>


[-- Attachment #1.2: Type: text/html, Size: 2733 bytes --]

[-- Attachment #2: 0001-ob-clojure.el-org-babel-execute-clojure-support-ns-h.patch --]
[-- Type: text/x-patch, Size: 1156 bytes --]

From 624e9ab91bb09caf4c438cb9eb1cedb7680755d9 Mon Sep 17 00:00:00 2001
From: Bastien <bzg@gnu.org>
Date: Mon, 26 Mar 2018 11:35:21 +0800
Subject: [PATCH] * ob-clojure.el (org-babel-execute:clojure) support :ns
 header argument.

---
 lisp/ob-clojure.el | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 890f60ada..62c65e971 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -55,6 +55,7 @@
 (declare-function slime-eval "ext:slime" (sexp &optional package))
 
 (defvar nrepl-sync-request-timeout)
+(defvar cider-buffer-ns)
 
 (defvar org-babel-tangle-lang-exts)
 (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj"))
@@ -109,7 +110,9 @@ using the :show-process parameter."
       (cider
        (require 'cider)
        (let ((result-params (cdr (assq :result-params params)))
-	     (show (cdr (assq :show-process params))))
+	     (show (cdr (assq :show-process params)))
+	     (ns (cdr (assq :ns params))))
+	 (when ns (setq-local cider-buffer-ns ns))
          (if (member show '(nil "no"))
 	     ;; Run code without showing the process.
 	     (progn
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] ob-clojure.el support :ns header argument
  2018-03-26  1:59 ` [PATCH] ob-clojure-literate.el add some new functions stardiviner
  2018-03-26  4:05   ` [PATCH] ob-clojure.el support :ns header argument stardiviner
@ 2018-03-26  4:38   ` stardiviner
  2018-03-27  3:02     ` [PATCH] ob-clojure and ob-clojure-literate support :ns header argument [V1] stardiviner
  1 sibling, 1 reply; 5+ messages in thread
From: stardiviner @ 2018-03-26  4:38 UTC (permalink / raw)
  To: org-mode


[-- Attachment #1.1: Type: text/plain, Size: 712 bytes --]

Previous `ob-clojure.el` patch implement method is not good enough. Here 
is a better implementation.
Sorry for this over posting.


On 03/26/2018 09:59 AM, stardiviner wrote:
>
> - support :ns header (as discussed at here 
> https://github.com/clojure-emacs/clojure-mode/pull/465#discussion_r158009538)
>
> - supoort inject CIDER outside of project
>
> - support :varinitialization when :session initialization prepare.
>
>
> On 03/22/2018 01:49 AM, stardiviner wrote:
>>
>> Two patches
>>
>> One is to support ob-clojure.el future coming header argument :ns.
>>
>> The second is to support jack-in CIDER outside of Clojure project by 
>> default. Not no need to ob-clojure project to be created anymore.
>>
>


[-- Attachment #1.2: Type: text/html, Size: 2576 bytes --]

[-- Attachment #2: 0001-ob-clojure.el-org-babel-execute-clojure-support-ns-h.patch --]
[-- Type: text/x-patch, Size: 1435 bytes --]

From 8315773aaee24d49996aa26c543cc56f9adc8414 Mon Sep 17 00:00:00 2001
From: Bastien <bzg@gnu.org>
Date: Mon, 26 Mar 2018 11:35:21 +0800
Subject: [PATCH] * ob-clojure.el (org-babel-execute:clojure) support :ns
 header argument.

---
 lisp/ob-clojure.el | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 890f60ada..5989a254b 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -83,16 +83,21 @@ If the value is nil, timeout is disabled."
 (defun org-babel-expand-body:clojure (body params)
   "Expand BODY according to PARAMS, return the expanded body."
   (let* ((vars (org-babel--get-vars params))
+	 (ns (cdr (assq :ns params)))
 	 (result-params (cdr (assq :result-params params)))
 	 (print-level nil) (print-length nil)
 	 (body (org-trim
 		(if (null vars) (org-trim body)
-		  (concat "(let ["
-			  (mapconcat
-			   (lambda (var)
-			     (format "%S (quote %S)" (car var) (cdr var)))
-			   vars "\n      ")
-			  "]\n" body ")")))))
+		  (concat
+		   ;; src block specified namespace :ns
+		   "(ns " ns ")"
+		   ;; variables binding
+		   "(let ["
+		   (mapconcat
+		    (lambda (var)
+		      (format "%S (quote %S)" (car var) (cdr var)))
+		    vars "\n      ")
+		   "]\n" body ")")))))
     (if (or (member "code" result-params)
 	    (member "pp" result-params))
 	(format "(clojure.pprint/pprint (do %s))" body)
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH] ob-clojure and ob-clojure-literate support :ns header argument [V1]
  2018-03-26  4:38   ` stardiviner
@ 2018-03-27  3:02     ` stardiviner
  0 siblings, 0 replies; 5+ messages in thread
From: stardiviner @ 2018-03-27  3:02 UTC (permalink / raw)
  To: org-mode; +Cc: Nicolas Goaziou


[-- Attachment #1.1: Type: text/plain, Size: 2667 bytes --]

This should be this finalize version patch.

The whole discussion is here: 
https://github.com/clojure-emacs/clojure-mode/pull/465

After test many case (all passed):

```org

#+begin_src clojure :results pp
;; (def greeting "hi there!")
*ns*
#+end_src

#+RESULTS[<2018-03-26 14:43:51> 2d1907bb790168e9429b9b07b4409d08ac8ca274]:
: #namespace[user]

Test internal ns in body.
# TODO: this has a weird behavior, the result changes, sometimes is 
#'kk.test/he, second time will be #'user/he
- [X] confirmed org-babel-expand-body:clojure is fine
- [X] check org-babel-execute:clojure

#+begin_src clojure :results pp
(ns kk.test)
(def he "hi")
#+end_src

#+RESULTS[<2018-03-26 12:52:06> fb9ad1efe68a43d880e53205f1326c000d1522d3]:
: #'kk.test/he

Deeper testing:

#+begin_src emacs-lisp :results pp
(nrepl-sync-request:eval
  "(clojure.pprint/pprint (do (ns user)\n (ns kk.test)\n (def he 2)))"
  (cider-current-connection)
  "user"
  )
#+end_src

#+RESULTS[<2018-03-26 19:26:24> 36ac1cb6a3df8b20edb0bf11c1247399bc041390]:
: (dict "status"
:       ("done" "state")
:       "id" "362" "out" "#'user/he\n" "session" 
"5ba759a7-a80a-4b02-a934-a0d7686ee211" "ns" "kk.test" "value" "nil" 
"changed-namespaces"
:       (dict)
:       "repl-type" "clj")

#+begin_src clojure :results value :ns kk2
(def he "hi")
*ns*
#+end_src

#+RESULTS[<2018-03-26 13:43:22> 0bfbd971f26d1f097d19dc0e3230decc31cc9e6e]:
: nil#'kk2/he#namespace[kk2]

What about another src block without ~:ns~ specified after previous 
specified src block?

#+begin_src clojure :results value
(def he "hi")
*ns*
#+end_src

#+RESULTS[<2018-03-26 12:53:27> 6c547cacff4e65305cc9f855117ca43ffd9d2eab]:
: nil#'user/he#namespace[user]

More complex example:

#+begin_src clojure :results output :var he="hi" :ns kk
;; (def he "hi")
(prn he)
(prn *ns*)
#+end_src

#+RESULTS:
: "hi"
: #namespace[kk]

```


On 03/26/2018 12:38 PM, stardiviner wrote:
> Previous `ob-clojure.el` patch implement method is not good enough. 
> Here is a better implementation.
> Sorry for this over posting.
>
>
> On 03/26/2018 09:59 AM, stardiviner wrote:
>>
>> - support :ns header (as discussed at here 
>> https://github.com/clojure-emacs/clojure-mode/pull/465#discussion_r158009538)
>>
>> - supoort inject CIDER outside of project
>>
>> - support :varinitialization when :session initialization prepare.
>>
>>
>> On 03/22/2018 01:49 AM, stardiviner wrote:
>>>
>>> Two patches
>>>
>>> One is to support ob-clojure.el future coming header argument :ns.
>>>
>>> The second is to support jack-in CIDER outside of Clojure project by 
>>> default. Not no need to ob-clojure project to be created anymore.
>>>
>>
>


[-- Attachment #1.2: Type: text/html, Size: 7131 bytes --]

[-- Attachment #2: 0001-ob-clojure-literate.el-CIDER-jack-in-outside-of-proj.patch --]
[-- Type: text/x-patch, Size: 4323 bytes --]

From bc575705704ebff7f7630cd35ff936844c89f66a Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Thu, 22 Mar 2018 01:21:22 +0800
Subject: [PATCH 1/4] * ob-clojure-literate.el: CIDER jack-in outside of
 project by default.

---
 contrib/lisp/ob-clojure-literate.el | 50 ++++++++++++++++++++++---------------
 1 file changed, 30 insertions(+), 20 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index a7ab1894d..8d419b0b4 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -35,8 +35,10 @@ Don't auto jack in by default for not rude."
   :type 'boolean
   :group 'ob-clojure-literate)
 
-(defcustom ob-clojure-literate-project-location (concat user-emacs-directory "Org-mode/")
-  "The location for `ob-clojure-literate' scaffold project."
+(defcustom ob-clojure-literate-project-location nil
+  "The location for `ob-clojure-literate' scaffold project.
+If it is nil, then `cider-jack-in' will jack-in outside of Clojure project.
+If it is a directory, `ob-clojure-literate' will try to create Clojure project automatically."
   :type 'string
   :group 'ob-clojure-literate)
 
@@ -45,7 +47,7 @@ Don't auto jack in by default for not rude."
 (defvar ob-clojure-literate-session-ns nil)
 (defvar ob-clojure-literate-cider-connections nil)
 
-(defcustom ob-clojure-literate-default-session "*cider-repl ob-clojure*"
+(defcustom ob-clojure-literate-default-session "*cider-repl localhost*"
   "The default session name for `ob-clojure-literate'."
   :type 'string
   :group 'ob-clojure-literate)
@@ -104,23 +106,31 @@ Don't auto jack in by default for not rude."
 (defun ob-clojure-literate-auto-jackin ()
   "Auto setup ob-clojure-literate scaffold and jack-in Clojure project."
   (interactive)
-  (unless (file-directory-p (expand-file-name ob-clojure-literate-project-location))
-    (make-directory ob-clojure-literate-project-location t)
-    (let ((default-directory ob-clojure-literate-project-location))
-      (shell-command "lein new ob-clojure")))
-  (unless (or
-           (and (cider-connected-p)
-                (if (not (null ob-clojure-literate-session))
-                    (seq-contains cider-connections (get-buffer ob-clojure-literate-session))))
-           cider-connections
-           (not (null ob-clojure-literate-session)))
-    ;; return back to original file.
-    (if (not (and (= (length (ob-clojure-literate-get-session-list)) 1)
-                  (-contains-p (ob-clojure-literate-get-session-list) ob-clojure-literate-default-session)))
-        (save-window-excursion
-          (find-file (expand-file-name (concat ob-clojure-literate-project-location "ob-clojure/src/ob_clojure/core.clj")))
-          (with-current-buffer "core.clj"
-            (cider-jack-in))))))
+  (cond
+   ;; jack-in outside of Clojure project.
+   ((null ob-clojure-literate-project-location)
+    (if (member (get-buffer "*cider-repl localhost*") cider-connections)
+	(message "CIDER default session already launched.")
+      (cider-jack-in nil)))
+   ((not (null ob-clojure-literate-project-location))
+    (unless (file-directory-p (expand-file-name ob-clojure-literate-project-location))
+      (make-directory ob-clojure-literate-project-location t)
+      (let ((default-directory ob-clojure-literate-project-location))
+	(shell-command "lein new ob-clojure")))
+    (unless (or
+             (and (cider-connected-p)
+                  (if (not (null ob-clojure-literate-session))
+		      (seq-contains cider-connections (get-buffer ob-clojure-literate-session))))
+             cider-connections
+             (not (null ob-clojure-literate-session)))
+      ;; return back to original file.
+      (if (not (and (= (length (ob-clojure-literate-get-session-list)) 1)
+                    (-contains-p (ob-clojure-literate-get-session-list) ob-clojure-literate-default-session)))
+          (save-window-excursion
+            (find-file (expand-file-name (concat ob-clojure-literate-project-location "ob-clojure/src/ob_clojure/core.clj")))
+            (with-current-buffer "core.clj"
+	      (cider-jack-in))))))
+   ))
 
 (defun ob-clojure-literate-set-local-cider-connections (toggle?)
   "Set buffer local `cider-connections' for `ob-clojure-literate-mode' `TOGGLE?'."
-- 
2.16.3


[-- Attachment #3: 0002-ob-clojure-literate.el-support-use-ns-header-argumen.patch --]
[-- Type: text/x-patch, Size: 2898 bytes --]

From 25e75ded1466b413a0d098041ad40f52e1707432 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Thu, 22 Mar 2018 01:43:18 +0800
Subject: [PATCH 2/4] * ob-clojure-literate.el: support use :ns header
 argument.

- rename ob-clojure-literate-cider-do-not-find-ns to ob-clojure-literate-set-ns
---
 contrib/lisp/ob-clojure-literate.el | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index 8d419b0b4..71ea909ba 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -151,14 +151,15 @@ If it is a directory, `ob-clojure-literate' will try to create Clojure project a
     ;; (setq-local cider-connections '())
     ))
 
-(defun ob-clojure-literate-cider-do-not-find-ns (body params)
+(defun ob-clojure-literate-set-ns (body params)
   "Fix the issue that `cider-current-ns' try to invoke `clojure-find-ns' to extract ns from buffer."
   ;; TODO: Is it possible to find ns in `body'?
   (when (ob-clojure-literate-any-connection-p)
     (setq ob-clojure-literate-original-ns (cider-current-ns))
     (with-current-buffer ob-clojure-literate-session
       (setq ob-clojure-literate-session-ns cider-buffer-ns))
-    (setq-local cider-buffer-ns ob-clojure-literate-session-ns))
+    (setq-local cider-buffer-ns (or (cdr (assq :ns params))
+				    ob-clojure-literate-session-ns)))
   (message (format "ob-clojure-literate: current CIDER ns is [%s]." cider-buffer-ns)))
 
 (defun ob-clojure-literate-set-local-session (toggle?)
@@ -302,7 +303,7 @@ reset `RESULT' to `nil'."
              (equal major-mode 'org-mode)) ; `ob-clojure-literate-mode' only works in `org-mode'.
     (ob-clojure-literate-set-local-cider-connections ob-clojure-literate-mode)
     (ob-clojure-literate-set-local-session ob-clojure-literate-mode)
-    (advice-add 'org-babel-execute:clojure :before #'ob-clojure-literate-cider-do-not-find-ns)
+    (advice-add 'org-babel-execute:clojure :before #'ob-clojure-literate-set-ns)
     (advice-add 'org-babel-expand-body:clojure :filter-args #'ob-clojure-literate-inject-code)
     (advice-add 'org-babel-execute:clojure :filter-return #'ob-clojure-literate-support-graphics-result)
     (message "ob-clojure-literate minor mode enabled.")))
@@ -310,7 +311,7 @@ reset `RESULT' to `nil'."
 ;;;###autoload
 (defun ob-clojure-literate-disable ()
   "Disable Org-mode buffer locally for `ob-clojure-literate'."
-  (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-cider-do-not-find-ns)
+  (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-set-ns)
   (advice-remove 'org-babel-expand-body:clojure #'ob-clojure-literate-inject-code)
   (advice-remove 'org-babel-execute:clojure #'ob-clojure-literate-support-graphics-result)
   (setq-local cider-buffer-ns ob-clojure-literate-original-ns)
-- 
2.16.3


[-- Attachment #4: 0003-ob-clojure-literate.el-support-vars-initialization-w.patch --]
[-- Type: text/x-patch, Size: 1628 bytes --]

From fc8a9082712704f70eabe60c6c612600f16e58d1 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Mon, 26 Mar 2018 09:47:54 +0800
Subject: [PATCH 3/4] * ob-clojure-literate.el: support vars initialization
 when prepare session.

- org-babel-clojure-var-to-clojure
---
 contrib/lisp/ob-clojure-literate.el | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/contrib/lisp/ob-clojure-literate.el b/contrib/lisp/ob-clojure-literate.el
index 71ea909ba..2d1d30db8 100644
--- a/contrib/lisp/ob-clojure-literate.el
+++ b/contrib/lisp/ob-clojure-literate.el
@@ -221,7 +221,14 @@ If it is a directory, `ob-clojure-literate' will try to create Clojure project a
 
 (defun org-babel-clojure-var-to-clojure (var)
   "Convert src block's `VAR' to Clojure variable."
-  ;; TODO: reference `org-babel-python-var-to-python'
+  (if (listp var)
+      (replace-regexp-in-string "(" "'(" var)
+    (cond
+     ((stringp var)
+      ;; wrap org-babel passed in header argument value with quote in Clojure.
+      (format "\"%s\"" var))
+     (t
+      (format "%s" var))))
   )
 
 (defun org-babel-variable-assignments:clojure (params)
@@ -230,8 +237,7 @@ If it is a directory, `ob-clojure-literate' will try to create Clojure project a
    (lambda (pair)
      (format "(def %s %s)"
              (car pair)
-             ;; (org-babel-clojure-var-to-clojure (cdr pair))
-             (cdr pair)))
+             (org-babel-clojure-var-to-clojure (cdr pair))))
    (org-babel--get-vars params)))
 
 ;;; Support header arguments  :results graphics :file "image.png" by inject Clojure code.
-- 
2.16.3


[-- Attachment #5: 0004-ob-clojure.el-org-babel-execute-clojure-support-ns-h.patch --]
[-- Type: text/x-patch, Size: 4182 bytes --]

From 71c57149ca0975f13f66bc22ad540fd442cb4798 Mon Sep 17 00:00:00 2001
From: Bastien <bzg@gnu.org>
Date: Mon, 26 Mar 2018 11:35:21 +0800
Subject: [PATCH 4/4] * ob-clojure.el (org-babel-execute:clojure) support :ns
 header argument.

Remove optional parameter (cider-current-ns) to better handling namespace.
---
 lisp/ob-clojure.el | 54 ++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 40 insertions(+), 14 deletions(-)

diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 890f60ada..35b4c3fe5 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -41,6 +41,7 @@
 ;;; Code:
 (require 'cl-lib)
 (require 'ob)
+(require 'subr-x)
 
 (declare-function cider-current-connection "ext:cider-client" (&optional type))
 (declare-function cider-current-ns "ext:cider-client" ())
@@ -55,6 +56,7 @@
 (declare-function slime-eval "ext:slime" (sexp &optional package))
 
 (defvar nrepl-sync-request-timeout)
+(defvar cider-buffer-ns)
 
 (defvar org-babel-tangle-lang-exts)
 (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj"))
@@ -80,19 +82,43 @@ If the value is nil, timeout is disabled."
 	  (const :tag "cider" cider)
 	  (const :tag "SLIME" slime)))
 
+(defcustom org-babel-clojure-default-ns "user"
+  "Default Clojure namespace for src block when all find ns ways failed."
+  :type 'string
+  :group 'org-babel)
+
+(defun org-babel-clojure-cider-current-ns ()
+  "Like `cider-current-ns' except `cider-find-ns'."
+  (or cider-buffer-ns
+      (when-let* ((repl-buf (cider-current-connection)))
+	(buffer-local-value 'cider-buffer-ns repl-buf))
+      org-babel-clojure-default-ns))
+
 (defun org-babel-expand-body:clojure (body params)
   "Expand BODY according to PARAMS, return the expanded body."
   (let* ((vars (org-babel--get-vars params))
+	 (ns (cdr (assq :ns params)))
+	 (ns-fallback (org-babel-clojure-cider-current-ns))
 	 (result-params (cdr (assq :result-params params)))
 	 (print-level nil) (print-length nil)
+	 (bind-vars (lambda (body)
+		      (if (null vars) (org-trim body)
+			(concat
+			 "(let ["
+			 (mapconcat
+			  (lambda (var)
+			    (format "%S (quote %S)" (car var) (cdr var)))
+			  vars "\n      ")
+			 "]\n" body ")"))))
+	 (specify-namespace (lambda (body)
+			      (concat
+			       "(ns " (if (null ns) ns-fallback ns) ")\n" body)))
 	 (body (org-trim
-		(if (null vars) (org-trim body)
-		  (concat "(let ["
-			  (mapconcat
-			   (lambda (var)
-			     (format "%S (quote %S)" (car var) (cdr var)))
-			   vars "\n      ")
-			  "]\n" body ")")))))
+		(thread-last body
+		  ;; variables binding
+		  (funcall bind-vars)
+		  ;; src block specified namespace :ns
+		  (funcall specify-namespace)))))
     (if (or (member "code" result-params)
 	    (member "pp" result-params))
 	(format "(clojure.pprint/pprint (do %s))" body)
@@ -102,9 +128,11 @@ If the value is nil, timeout is disabled."
   "Execute a block of Clojure code with Babel.
 The underlying process performed by the code block can be output
 using the :show-process parameter."
-  (let ((expanded (org-babel-expand-body:clojure body params))
-	(response (list 'dict))
-        result)
+  (let* ((expanded (org-babel-expand-body:clojure body params))
+	 (ns (cdr (assq :ns params)))
+	 (ns-fallback (org-babel-clojure-cider-current-ns))
+	 (response (list 'dict))
+         result)
     (cl-case org-babel-clojure-backend
       (cider
        (require 'cider)
@@ -117,8 +145,7 @@ using the :show-process parameter."
 		     (let ((nrepl-sync-request-timeout
 			    org-babel-clojure-sync-nrepl-timeout))
 		       (nrepl-sync-request:eval expanded
-						(cider-current-connection)
-						(cider-current-ns))))
+						(cider-current-connection))))
 	       (setq result
 		     (concat
 		      (nrepl-dict-get response
@@ -152,8 +179,7 @@ using the :show-process parameter."
 		(nrepl--merge response resp)
 		;; Update the status of the nREPL output session.
 		(setq status (nrepl-dict-get response "status")))
-	      (cider-current-connection)
-	      (cider-current-ns))
+	      (cider-current-connection))
 
 	     ;; Wait until the nREPL code finished to be processed.
 	     (while (not (member "done" status))
-- 
2.16.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-03-27  3:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-21 17:49 [PATCH] ob-clojure-literate.el support :ns header and inject CIDER outside of project stardiviner
2018-03-26  1:59 ` [PATCH] ob-clojure-literate.el add some new functions stardiviner
2018-03-26  4:05   ` [PATCH] ob-clojure.el support :ns header argument stardiviner
2018-03-26  4:38   ` stardiviner
2018-03-27  3:02     ` [PATCH] ob-clojure and ob-clojure-literate support :ns header argument [V1] stardiviner

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).