mirror of
https://github.com/vale981/emacs-ipython-notebook
synced 2025-03-06 01:21:38 -05:00
Add ein:events-on to set event hook
This commit is contained in:
parent
bd6a8db46d
commit
b09a8a1eb0
1 changed files with 24 additions and 1 deletions
|
@ -61,6 +61,8 @@ See also `ein:ac-setup-maybe'."
|
||||||
|
|
||||||
(defclass ein:events ()
|
(defclass ein:events ()
|
||||||
((buffer :initarg :buffer :type buffer :document "Notebook buffer")
|
((buffer :initarg :buffer :type buffer :document "Notebook buffer")
|
||||||
|
(callbacks :initarg :callbacks :type hash-table
|
||||||
|
:initform (make-hash-table :test 'equal))
|
||||||
(status-notebook :initarg :status-notebook :initform nil :type symbol)
|
(status-notebook :initarg :status-notebook :initform nil :type symbol)
|
||||||
(status-kernel :initarg :status-kernel :initform nil :type symbol))
|
(status-kernel :initarg :status-kernel :initform nil :type symbol))
|
||||||
"Event handler class.")
|
"Event handler class.")
|
||||||
|
@ -87,12 +89,15 @@ Use the variable returned by this function instead."
|
||||||
(status_busy "Kernel is busy...")
|
(status_busy "Kernel is busy...")
|
||||||
(status_dead "Kernel is dead. Need restart.")))
|
(status_dead "Kernel is dead. Need restart.")))
|
||||||
|
|
||||||
(defun ein:events-trigger (events event-type)
|
(defun ein:events-trigger (events event-type &optional data)
|
||||||
"Trigger EVENT-TYPE and let event handler EVENTS handle that event.
|
"Trigger EVENT-TYPE and let event handler EVENTS handle that event.
|
||||||
EVENT-TYPE is a cons like \(notebook_saved . Notebook), which is
|
EVENT-TYPE is a cons like \(notebook_saved . Notebook), which is
|
||||||
a direct translation of \"notebook_saved.Notebook\" from the
|
a direct translation of \"notebook_saved.Notebook\" from the
|
||||||
IPython notebook client JS."
|
IPython notebook client JS."
|
||||||
(ein:log 'debug "Event: %S" event-type)
|
(ein:log 'debug "Event: %S" event-type)
|
||||||
|
(ein:aif (gethash event-type (oref events :callbacks))
|
||||||
|
(mapc (lambda (cb-arg) (ein:funcall-packed cb-arg data)) it))
|
||||||
|
;; FIXME! the following must be put together in the event frame work.
|
||||||
(case (cdr event-type)
|
(case (cdr event-type)
|
||||||
(Kernel
|
(Kernel
|
||||||
(oset events :status-kernel (car event-type)))
|
(oset events :status-kernel (car event-type)))
|
||||||
|
@ -101,6 +106,24 @@ IPython notebook client JS."
|
||||||
(t
|
(t
|
||||||
(ein:log 'info "Unknown event: %S" event-type))))
|
(ein:log 'info "Unknown event: %S" event-type))))
|
||||||
|
|
||||||
|
|
||||||
|
(defmethod ein:events-on ((events ein:events) event-type
|
||||||
|
callback &optional arg)
|
||||||
|
"Set event trigger hook.
|
||||||
|
|
||||||
|
When EVENT-TYPE is triggered on the event handler EVENTS,
|
||||||
|
CALLBACK is called. CALLBACK must take two arguments:
|
||||||
|
ARG as the first argument and DATA, which is passed via
|
||||||
|
`ein:events-trigger', as the second."
|
||||||
|
(assert (and (consp event-type)
|
||||||
|
(symbolp (car event-type))
|
||||||
|
(symbolp (cdr event-type))))
|
||||||
|
(let* ((table (oref events :callbacks))
|
||||||
|
(cbs (gethash event-type table)))
|
||||||
|
(push (cons callback arg) cbs)
|
||||||
|
(puthash event-type cbs table)))
|
||||||
|
|
||||||
|
|
||||||
(provide 'ein-events)
|
(provide 'ein-events)
|
||||||
|
|
||||||
;;; ein-events.el ends here
|
;;; ein-events.el ends here
|
||||||
|
|
Loading…
Add table
Reference in a new issue