Event notification using header-line

This commit is contained in:
Takafumi Arakaki 2012-05-21 04:29:43 +02:00
parent dcfbacf857
commit 70866498af
3 changed files with 46 additions and 3 deletions

View file

@ -25,11 +25,48 @@
;;; Code:
(eval-when-compile (require 'cl))
(require 'ein-log)
(require 'ein-utils)
(defvar ein:header-line-format '(:eval (ein:header-line)))
(defun ein:header-line ()
(format
"IP[y]: %s"
(ein:join-str
" | "
(ein:filter
'identity
(list (ein:events-header-message-notebook)
(ein:events-header-message-kernel))))))
(ein:deflocal ein:events-status-notebook nil)
(ein:deflocal ein:events-status-kernel nil)
(defun ein:events-header-message-notebook ()
(case ein:events-status-notebook
(notebook_saving.Notebook "Saving Notebook...")
(notebook_saved.Notebook "Notebook is saved")
(notebook_save_failed.Notebook "Failed to save Notebook!")))
(defun ein:events-header-message-kernel ()
(case ein:events-status-kernel
(status_idle.Kernel nil)
(status_busy.Kernel "Kernel is busy...")))
(defun ein:events-trigger (event)
;; FIXME: implement event handling
(ein:log 'info "Event: %s" event))
(ein:log 'debug "Event: %s" event)
(case event
((status_busy.Kernel status_idle.Kernel)
(setq ein:events-status-kernel event))
((notebook_saving.Notebook
notebook_saved.Notebook
notebook_save_failed.Notebook)
(setq ein:events-status-notebook event))
(t
(ein:log 'info "Unknown event: %s" event))))
(provide 'ein-events)

View file

@ -205,6 +205,7 @@ the time of execution."
(ein:notebook-from-json ein:notebook (ein:$notebook-data ein:notebook))
(setq buffer-undo-list nil) ; clear undo history
(ein:notebook-mode)
(setq header-line-format ein:header-line-format)
(ein:notebook-start-kernel)
(ein:log 'info "Notebook %s is ready"
(ein:$notebook-notebook-name ein:notebook)))
@ -773,7 +774,7 @@ Do not clear input prompts when the prefix argument is given."
;; This is for putting read-only text properties to the newlines.
(setf (ein:$notebook-ewoc notebook)
(ewoc-create 'ein:notebook-pp
(ein:propertize-read-only "IPython notebook\n\n")
(ein:propertize-read-only "\n")
nil t))
(mapc (lambda (cell-data)
(ein:cell-enter-last

View file

@ -195,6 +195,11 @@ Adapted from twittering-mode.el's `case-string'."
if key-p do (setq key p)
else collect `(,key . ,p)))
(defun ein:filter (predicate sequence)
(loop for item in sequence
when (funcall predicate item)
collect item))
(defun ein:get-value (obj)
"Get value from obj if it is a variable or function."
(cond