Merge pull request #371 from dickmao/bug-issue-369

Fixes #369
This commit is contained in:
John Miller 2018-10-31 16:50:09 -05:00 committed by GitHub
commit 3117e438db
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 69 additions and 48 deletions

View file

@ -0,0 +1,6 @@
@autosave
Scenario: opened notebook
Given old notebook "undo.ipynb"
And I call "ein:notebook-enable-autosaves"
And I switch to log expr "ein:log-all-buffer-name"
Then I should see message "ein:notebook-autosave-frequency is 0"

View file

@ -1,3 +1,8 @@
(When "with no opened notebooks call \"\\(.+\\)\"$"
(lambda (func)
(cl-letf (((symbol-function 'ein:notebook-opened-buffer-names) #'ignore))
(When (format "I call \"%s\"" func)))))
(When "^I clear log expr \"\\(.+\\)\"$"
(lambda (log-expr)
(let ((buffer (get-buffer (symbol-value (intern log-expr)))))
@ -129,19 +134,18 @@
(When "^old notebook \"\\(.+\\)\"$"
(lambda (path)
(let ((url-or-port (car (ein:jupyter-server-conn-info))))
(lexical-let ((url-or-port (car (ein:jupyter-server-conn-info))) notebook)
(with-current-buffer (ein:notebooklist-get-buffer url-or-port)
(lexical-let (notebook)
(ein:notebook-open url-or-port path nil
(lambda (nb created) (setq notebook nb)))
(ein:testing-wait-until (lambda () (and (not (null notebook))
(ein:aand (ein:$notebook-kernel notebook)
(ein:kernel-live-p it)))))
(let ((buf-name (format ein:notebook-buffer-name-template
(ein:$notebook-url-or-port notebook)
(ein:$notebook-notebook-name notebook))))
(switch-to-buffer buf-name)
(Then "I should be in buffer \"%s\"" buf-name)))))))
(ein:notebook-open url-or-port path nil
(lambda (nb created) (setq notebook nb)))
(ein:testing-wait-until (lambda () (and (not (null notebook))
(ein:aand (ein:$notebook-kernel notebook)
(ein:kernel-live-p it))))))
(let ((buf-name (format ein:notebook-buffer-name-template
(ein:$notebook-url-or-port notebook)
(ein:$notebook-notebook-name notebook))))
(switch-to-buffer buf-name)
(Then "I should be in buffer \"%s\"" buf-name)))))
(When "^I dump buffer"
(lambda () (message "%s" (buffer-string))))

View file

@ -303,12 +303,14 @@ will be updated with kernel's cwd."
(with-current-buffer (ein:notebook-buffer notebook*)
(ein:worksheet-focus-cell))
(pop-to-buffer (ein:notebook-buffer notebook*))
(ein:aif (ein:$notebook-kernelspec notebook*)
(progn
(setf (ein:$notebook-metadata notebook*)
(plist-put (ein:$notebook-metadata notebook*)
:kernelspec (ein:kernelspec-for-nb-metadata it)))
(ein:notebook-save-notebook notebook*)))
(when (null (plist-member (ein:$notebook-metadata notebook*)
:kernelspec))
(ein:aif (ein:$notebook-kernelspec notebook*)
(progn
(setf (ein:$notebook-metadata notebook*)
(plist-put (ein:$notebook-metadata notebook*)
:kernelspec (ein:kernelspec-for-nb-metadata it)))
(ein:notebook-save-notebook notebook*))))
(when callback*
(funcall callback* notebook* created)))
notebook (not existing) callback))
@ -408,45 +410,54 @@ of minor mode."
(defun ein:notebook-enable-autosaves (notebook)
"Enable automatic, periodic saving for notebook."
(interactive
(let* ((notebook (or (ein:get-notebook)
(completing-read
"Select notebook [URL-OR-PORT/NAME]: "
(ein:notebook-opened-buffer-names)))))
(list notebook)))
(if (stringp notebook)
(error "Fix me!")) ;; FIXME
(setf (ein:$notebook-autosave-timer notebook)
(run-at-time 0 ein:notebook-autosave-frequency #'ein:notebook-maybe-save-notebook notebook 0))
(ein:log 'verbose "Enabling autosaves for %s with frequency %s seconds."
(ein:$notebook-notebook-name notebook)
ein:notebook-autosave-frequency))
(list (or (ein:get-notebook)
(ein:aand (ein:notebook-opened-buffer-names)
(with-current-buffer (ido-completing-read
"Notebook: " it nil t)
(ein:get-notebook))))))
(if (> ein:notebook-autosave-frequency 0)
(if notebook
(progn (setf (ein:$notebook-autosave-timer notebook)
(run-at-time ein:notebook-autosave-frequency
ein:notebook-autosave-frequency
#'ein:notebook-maybe-save-notebook
notebook))
(ein:log 'verbose "Enabling autosaves for %s with frequency %s seconds."
(ein:$notebook-notebook-name notebook)
ein:notebook-autosave-frequency))
(message "Open notebook first"))
(message "ein:notebook-autosave-frequency is %d" ein:notebook-autosave-frequency)))
(defun ein:notebook-disable-autosaves (notebook)
"Disable automatic, periodic saving for current notebook."
(interactive
(let* ((notebook (or (ein:get-notebook)
(completing-read
"Select notebook [URL-OR-PORT/NAME]: "
(ein:notebook-opened-buffer-names)))))
(list notebook)))
(when (ein:$notebook-autosave-timer notebook)
(ein:log 'info "Disabling auto checkpoints for notebook %s" (ein:$notebook-notebook-name notebook))
(cancel-timer (ein:$notebook-autosave-timer notebook))))
(list (or (ein:get-notebook)
(ein:aand (ein:notebook-opened-buffer-names)
(with-current-buffer (ido-completing-read
"Notebook: " it nil t)
(ein:get-notebook))))))
(if (and notebook (ein:$notebook-autosave-timer notebook))
(progn
(ein:log 'verbose "Disabling auto checkpoints for notebook %s" (ein:$notebook-notebook-name notebook))
(cancel-timer (ein:$notebook-autosave-timer notebook)))))
(defun ein:notebook-update-autosave-frequency (new-frequency notebook)
"Change the autosaves frequency for the current notebook, or
for a notebook selected by the user if not currently inside a
notebook buffer."
(interactive)
(let* ((new-frequency (read-number "New autosaves frequency (0 to disable): "))
(notebook (or (ein:get-notebook)
(completing-read
"Select notebook [URL-OR-PORT/NAME]: "
(ein:notebook-opened-buffer-names)))))
(when notebook
(setq ein:notebook-autosave-frequency new-frequency)
(ein:notebook-disable-autosaves notebook)
(ein:notebook-enable-autosaves notebook))))
(interactive
(list (read-number "New autosaves frequency (0 to disable): ")
(or (ein:get-notebook)
(ein:aand (ein:notebook-opened-buffer-names)
(with-current-buffer (ido-completing-read
"Notebook: " it nil t)
(ein:get-notebook))))))
(if notebook
(progn
(setq ein:notebook-autosave-frequency new-frequency)
(ein:notebook-disable-autosaves notebook)
(ein:notebook-enable-autosaves notebook))
(message "Open notebook first")))
(defun ein:notebook-bind-events (notebook events)
"Bind events related to PAGER to the event handler EVENTS."