From 0cf283a43b394cd324f150e9f90332f9b833af79 Mon Sep 17 00:00:00 2001 From: John Miller Date: Thu, 28 May 2015 11:56:40 -0500 Subject: [PATCH] Use session query to show running kernels. Stopping a kernel now doesn't automatically close a buffer, nor does closing a buffer automatically stop a running kernel. This is functionality more in line of what EIN supported for IPython 0.x and 1.x. --- lisp/ein-kernel.el | 10 ++++------ lisp/ein-notebooklist.el | 24 +++++++++++++----------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lisp/ein-kernel.el b/lisp/ein-kernel.el index 7f170d9..443cd12 100644 --- a/lisp/ein-kernel.el +++ b/lisp/ein-kernel.el @@ -636,11 +636,8 @@ Example:: (ein:log 'info "Sent interruption command."))))) - - - (defun ein:kernel-kill (kernel &optional callback cbargs) - (when (ein:$kernel-running kernel) + (when kernel (ein:query-singleton-ajax (list 'kernel-kill (ein:$kernel-session-id kernel)) (ein:url (ein:$kernel-url-or-port kernel) @@ -650,10 +647,11 @@ Example:: :success (apply-partially (lambda (kernel callback cbargs &rest ignore) (ein:log 'info "Notebook session killed.") - (setf (ein:$kernel-running kernel) nil) + (if kernel + (setf (ein:$kernel-running kernel) nil)) (when callback (apply callback cbargs))) kernel callback cbargs)))) - +g ;; Reply handlers. diff --git a/lisp/ein-notebooklist.el b/lisp/ein-notebooklist.el index 0bf64e4..bf51000 100644 --- a/lisp/ein-notebooklist.el +++ b/lisp/ein-notebooklist.el @@ -363,7 +363,7 @@ Notebook list data is passed via the buffer local variable (erase-buffer)) (remove-overlays) ;; Create notebook list - (widget-insert "IPython Notebook list\n\n") + (widget-insert (format "IPython %s Notebook list\n\n" (ein:$notebooklist-api-version ein:%notebooklist%))) (let ((breadcrumbs (generate-breadcrumbs (ein:$notebooklist-path ein:%notebooklist%)))) (dolist (p breadcrumbs) (lexical-let ((name (car p)) @@ -375,7 +375,7 @@ Notebook list data is passed via the buffer local variable (ein:$notebooklist-url-or-port ein:%notebooklist%) path)) name))) - (widget-insert " |\n")) + (widget-insert " |\n\n")) (widget-create 'link :notify (lambda (&rest ignore) (ein:notebooklist-new-notebook)) @@ -392,8 +392,10 @@ Notebook list data is passed via the buffer local variable (browse-url (ein:url (ein:$notebooklist-url-or-port ein:%notebooklist%)))) "Open In Browser") - (widget-insert "\n") - (let ((api-version (ein:$notebooklist-api-version ein:%notebooklist%))) + (widget-insert "\n\n") + (let ((api-version (ein:$notebooklist-api-version ein:%notebooklist%)) + (sessions (make-hash-table :test 'equal))) + (ein:content-query-sessions sessions (ein:$notebooklist-url-or-port ein:%notebooklist%) t) (loop for note in (ein:$notebooklist-data ein:%notebooklist%) for urlport = (ein:$notebooklist-url-or-port ein:%notebooklist%) for name = (plist-get note :name) @@ -404,6 +406,7 @@ Notebook list data is passed via the buffer local variable ;; (ein:get-actual-path (plist-get note :path)))) for type = (plist-get note :type) for opened-notebook-maybe = (ein:notebook-get-opened-notebook urlport path) + do (widget-insert " ") if (string= type "directory") do (progn (widget-create 'link @@ -428,18 +431,17 @@ Notebook list data is passed via the buffer local variable ein:%notebooklist% path))) "Open") (widget-insert " ") - (when (and opened-notebook-maybe (ein:kernel-live-p (ein:$notebook-kernel opened-notebook-maybe))) + (when (gethash path sessions) (widget-create 'link - :notify (lexical-let ((urlport urlport) - (path path)) + :notify (lexical-let ((session (car (gethash path sessions))) + (nblist ein:%notebooklist%)) (lambda (&rest ignore) - (let ((buf (ein:notebook-get-opened-buffer urlport path))) - (when buf - (run-at-time 1 nil + (run-at-time 1 nil #'ein:notebooklist-reload ein:%notebooklist%) - (kill-buffer buf))))) + (ein:kernel-kill (make-ein:$kernel :url-or-port (ein:$notebooklist-url-or-port nblist) + :session-id session)))) "Stop") (widget-insert " ")) (widget-create