diff --git a/lisp/ob-ein.el b/lisp/ob-ein.el index 665365c..8c34dde 100644 --- a/lisp/ob-ein.el +++ b/lisp/ob-ein.el @@ -115,6 +115,7 @@ (loop for o in outputs collecting (ob-ein--return-mime-type o file))))) + (defun ob-ein--get-name-create (src-block-info) "Get the name of a src block or add a uuid as the name." (if-let ((name (fifth src-block-info))) @@ -214,7 +215,7 @@ Based on ob-ipython--configure-kernel." buffer params result-params name)) (defun ob-ein--execute-async (buffer body kernel params result-params name) - "As `ein:shared-output-get-cell' is a singleton, ob-ein can only execute blocks + "As `ein:shared-output-get-cell' is a singleton, ob-ein can only execute blocks one at a time. Further, we do not order the queued up blocks!" (deferred:$ (deferred:next @@ -315,6 +316,47 @@ if necessary. Install CALLBACK (i.e., cell execution) upon notebook retrieval." (t (url-port parsed-url))))))) (t (ein:notebooklist-login url-or-port callback-login))))) +(defun ob-ein--edit-ctrl-c-ctrl-c () + "C-c C-c mapping in ein:connect-mode-map." + (interactive) + (org-edit-src-save) + (when (boundp 'org-src--beg-marker) + (let* ((beg org-src--beg-marker) + (buf (marker-buffer beg))) + (with-current-buffer buf + (save-excursion + (goto-char beg) + (org-ctrl-c-ctrl-c)))))) + + +(defun org-babel-edit-prep:ein (babel-info) + (if ein:polymode + (progn + (use-local-map (copy-keymap python-mode-map)) + (local-set-key "\C-c\C-c" 'ob-ein--edit-ctrl-c-ctrl-c)) + (let* ((buffer (current-buffer)) + (processed-params (org-babel-process-params babel-info)) + (session (or (ein:aand (cdr (assoc :session processed-params)) + (unless (string= "none" it) + (format "%s" it))) + ein:url-localhost)) + (lang (nth 0 (org-babel-get-src-block-info))) + (kernelspec (or (cdr (assoc :kernelspec processed-params)) + (ein:aif (cdr (assoc lang org-src-lang-modes)) + (cons 'language (format "%s" it)) + (error "ob-ein--execute-body: %s not among %s" + lang (mapcar #'car org-src-lang-modes)))))) + (ob-ein--initiate-session + session + kernelspec + (lambda (notebook) + (ein:connect-buffer-to-notebook notebook buffer t) + (use-local-map (copy-keymap ein:connect-mode-map)) + (local-set-key "\C-c\C-c" 'ob-ein--edit-ctrl-c-ctrl-c)))))) + +(defun org-babel-edit-prep:ein-python (babel-info) + (org-babel-edit-prep:ein babel-info)) + (loop for (lang . mode) in ob-ein-languages do (ob-ein--babelize-lang lang mode))