diff --git a/ein-cell.el b/ein-cell.el index 7d006a3..7321606 100644 --- a/ein-cell.el +++ b/ein-cell.el @@ -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. diff --git a/ein-events.el b/ein-events.el index 1db3bc6..8c7aa70 100644 --- a/ein-events.el +++ b/ein-events.el @@ -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))) diff --git a/ein-notebook.el b/ein-notebook.el index 4f3823d..faa0249 100644 --- a/ein-notebook.el +++ b/ein-notebook.el @@ -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)) diff --git a/tests/test-ein-notebook.el b/tests/test-ein-notebook.el index a3885eb..5ddc575 100644 --- a/tests/test-ein-notebook.el +++ b/tests/test-ein-notebook.el @@ -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))))