org-src: Fix idle auto-save feature

* lisp/org-src.el (org-edit-src-code): Fix regexp.
(org-edit-src-exit): Do not remove auto-save timer.  This is
handled by the timer itself.

`org-edit-src-save' calls `org-edit-src-exit', which then clears the
auto-save timer, thus preventing any further auto-saves before the
next `org-edit-src-code' call.

Thanks to Adriaan Sticker for reporting it.
http://permalink.gmane.org/gmane.emacs.orgmode/90650
This commit is contained in:
Nicolas Goaziou 2014-09-11 18:19:21 +02:00
parent d4a7ba2a96
commit 01f736b763
1 changed files with 16 additions and 21 deletions

View File

@ -376,23 +376,21 @@ the display of windows containing the Org buffer and the code buffer."
(when (fboundp edit-prep-func)
(funcall edit-prep-func full-info)))
(or org-edit-src-code-timer
(zerop org-edit-src-auto-save-idle-delay)
(setq org-edit-src-code-timer
(unless (zerop org-edit-src-auto-save-idle-delay)
(run-with-idle-timer
org-edit-src-auto-save-idle-delay t
(lambda ()
(cond
((and (string-match "\*Org Src" (buffer-name))
(buffer-modified-p))
(org-edit-src-save))
((not
(delq nil (mapcar
(lambda (b)
(string-match "\*Org Src" (buffer-name b)))
(buffer-list))))
(cancel-timer org-edit-src-code-timer)
(setq org-edit-src-code-timer)))))))))
t)))
(run-with-idle-timer
org-edit-src-auto-save-idle-delay t
(lambda ()
(cond
((org-string-match-p "\\`\\*Org Src" (buffer-name))
(when (buffer-modified-p) (org-edit-src-save)))
((not (org-some (lambda (b)
(org-string-match-p "\\`\\*Org Src"
(buffer-name b)))
(buffer-list)))
(cancel-timer org-edit-src-code-timer)
(setq org-edit-src-code-timer nil))))))))
t)))
(defun org-edit-src-continue (e)
"Continue editing source blocks." ;; Fixme: be more accurate
@ -757,8 +755,8 @@ with \",*\", \",#+\", \",,*\" and \",,#+\"."
(delete-region beg (max beg end))
(unless (string-match "\\`[ \t]*\\'" code)
(insert code))
;; Make sure the overlay stays in place
(when (eq context 'save) (move-overlay ovl beg (point)))
;; Make sure the overlay stays in place
(when (eq context 'save) (move-overlay ovl beg (point)))
(goto-char beg)
(if single (just-one-space)))
(if (memq t (mapcar (lambda (overlay)
@ -774,9 +772,6 @@ with \",*\", \",#+\", \",,*\" and \",,#+\"."
(unless (eq context 'save)
(move-marker beg nil)
(move-marker end nil)))
(when org-edit-src-code-timer
(cancel-timer org-edit-src-code-timer)
(setq org-edit-src-code-timer nil))
(unless (eq context 'save)
(when org-edit-src-saved-temp-window-config
(set-window-configuration org-edit-src-saved-temp-window-config)