Treat dead kernel status better

This commit is contained in:
Takafumi Arakaki 2012-05-22 01:21:07 +02:00
parent 34745e740b
commit 5595d8188f
2 changed files with 12 additions and 9 deletions

View file

@ -66,12 +66,13 @@ See also `ein:ac-setup-maybe'."
(defun ein:events-header-message-kernel ()
(case ein:events-status-kernel
(status_idle.Kernel nil)
(status_busy.Kernel "Kernel is busy...")))
(status_busy.Kernel "Kernel is busy...")
(status_dead.Kernel "Kernel is dead. Need restart.")))
(defun ein:events-trigger (event)
(ein:log 'debug "Event: %s" event)
(case event
((status_busy.Kernel status_idle.Kernel)
((status_busy.Kernel status_idle.Kernel status_dead.Kernel)
(setq ein:events-status-kernel event))
((notebook_saving.Notebook
notebook_saved.Notebook

View file

@ -532,7 +532,12 @@ Do not clear input prompts when the prefix argument is given."
(setf (ein:$websocket-onmessage iopub-channel)
(lambda (packet)
(ein:notebook-handle-iopub-reply notebook packet)))))
(ein:log 'info "IPython kernel is started"))
;; ein:events stores information in buffer local variable, so I need
;; to change buffer:
(with-current-buffer (ein:notebook-buffer notebook)
;; Clear out previous (possibly dead) status:
(ein:events-trigger 'status_idle.Kernel)
(ein:log 'info "IPython kernel is started")))
(defun ein:notebook-handle-shell-reply (notebook packet)
(destructuring-bind
@ -593,18 +598,15 @@ Do not clear input prompts when the prefix argument is given."
(ein:events-trigger 'status_busy.Kernel))
(("idle")
(ein:events-trigger 'status_idle.Kernel))
(("dead"))
(ein:notebook-handle-status-dead notebook)))
(("dead")
(ein:kernel-stop-channels (ein:$notebook-kernel notebook))
(ein:events-trigger 'status_dead.Kernel))))
(("clear_output")
(ein:cell-clear-output cell
(plist-get content :stdout)
(plist-get content :stderr)
(plist-get content :other))))))))
(defun ein:notebook-handle-status-dead (notebook)
;; FIXME: do something more useful
(ein:log 'info "The kernel has died."))
(defun ein:notebook-handle-output (notebook cell msg-type content)
(let* ((json (list :output_type msg-type)))
(ein:case-equal msg-type