Trigger ein:notebook-empty-undo-maybe via event

Previous tests were failed because undo was not reset after the
execution callbacks modified the buffer.  This is fixed by calling
ein:notebook-empty-undo-maybe via event in all the callbacks.
This commit is contained in:
Takafumi Arakaki 2012-06-16 23:33:58 +02:00
parent 0c13bc4234
commit 6b5b54c965
4 changed files with 18 additions and 9 deletions

View file

@ -794,12 +794,15 @@ Called from ewoc pretty printer via `ein:cell-insert-output'."
(defmethod ein:cell--handle-execute-reply ((cell ein:codecell) content)
(ein:cell-set-input-prompt cell (plist-get content :execution_count))
(ein:cell-running-set cell nil)
(ein:events-trigger
(oref cell :events) 'set_dirty.Notebook '(:value t)))
(let ((events (oref cell :events)))
(ein:events-trigger events 'set_dirty.Notebook '(:value t))
(ein:events-trigger events 'maybe_reset_undo.Notebook)))
(defmethod ein:cell--handle-set-next-input ((cell ein:codecell) text)
(ein:events-trigger
(oref cell :events) 'set_next_input.Notebook (list :cell cell :text text)))
(let ((events (oref cell :events)))
(ein:events-trigger events 'set_next_input.Notebook
(list :cell cell :text text))
(ein:events-trigger events 'maybe_reset_undo.Notebook)))
@ -826,7 +829,7 @@ Called from ewoc pretty printer via `ein:cell-insert-output'."
(plist-put json :traceback (plist-get content :traceback))))
(ein:cell-append-output cell json t)
;; (oset cell :dirty t)
))
(ein:events-trigger (oref cell :events) 'maybe_reset_undo.Notebook)))
(defun ein:output-area-convert-mime-types (json data)
@ -848,7 +851,8 @@ Called from ewoc pretty printer via `ein:cell-insert-output'."
(ein:cell-clear-output cell
(plist-get content :stdout)
(plist-get content :stderr)
(plist-get content :other)))
(plist-get content :other))
(ein:events-trigger (oref cell :events) 'maybe_reset_undo.Notebook))
;;; Misc.

View file

@ -62,7 +62,9 @@
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."
`ein:events-trigger', as the second. When calling the function,
current buffer is set to the configured buffer. `ein:events-new'
is used to configure the buffer."
(assert (symbolp event-type))
(let* ((table (oref events :callbacks))
(cbs (gethash event-type table)))

View file

@ -356,6 +356,10 @@ See `ein:notebook-open' for more information."
(setf (ein:$notebook-dirty notebook)
(plist-get data :value)))
notebook)
(ein:events-on events
'maybe_reset_undo.Notebook
(lambda (&rest -ignore-)
(ein:notebook-empty-undo-maybe)))
;; Bind events for sub components:
(mapc (lambda (cell) (oset cell :events (ein:$notebook-events notebook)))
(ein:notebook-get-cells notebook))

View file

@ -49,8 +49,7 @@
(with-current-buffer (ein:notebook-request-open-callback
(ein:notebook-new "DUMMY-URL" notebook-id)
:data (ein:json-read-from-string json-string))
(let ((events (ein:events-new (current-buffer))))
(setf (ein:$notebook-events ein:notebook) events)
(let ((events (ein:$notebook-events ein:notebook)))
(setf (ein:$notebook-kernel ein:notebook)
(ein:kernel-new 8888 "/kernels" events)))
(current-buffer))))