1
0
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-11-22 07:09:47 +00:00

org-src.el (org-edit-src-auto-save-idle-delay): New option

* org-src.el (org-edit-src-auto-save-idle-delay): New option.
(org-src-ask-before-returning-to-edit-buffer): Make a defcustom.
(org-edit-src-code-timer): New timer variable.
(org-edit-src-code): Run the timer.
(org-edit-fixed-width-region): Enhance message.
(org-edit-src-exit): Cancel the timer.

Thanks to Andreas Leha for suggesting this.
This commit is contained in:
Bastien Guerry 2013-02-16 11:35:39 +01:00
parent 602d6edb56
commit 25aabd7d2f

View File

@ -64,6 +64,14 @@ there are kept outside the narrowed region."
(const :tag "from `lang' element")
(const :tag "from `style' element")))))
(defcustom org-edit-src-auto-save-idle-delay 5
"Delay of idle time before auto-saving src code buffers.
When a positive integer N, save after N seconds of idle time.
When 0 (the default), don't auto-save."
:group 'org-edit-structure
:version "24.3"
:type 'integer)
(defcustom org-coderef-label-format "(ref:%s)"
"The default coderef format.
This format string will be used to search for coderef labels in literal
@ -187,11 +195,14 @@ For example, there is no ocaml-mode in Emacs, but the mode to use is
(defvar org-edit-src-block-indentation nil)
(defvar org-edit-src-saved-temp-window-config nil)
(defvar org-src-ask-before-returning-to-edit-buffer t
(defcustom org-src-ask-before-returning-to-edit-buffer t
"If nil, when org-edit-src code is used on a block that already
has an active edit buffer, it will switch to that edit buffer
immediately; otherwise it will ask whether you want to return to
the existing edit buffer.")
the existing edit buffer."
:group 'org-edit-structure
:version "24.3"
:type 'boolean)
(defvar org-src-babel-info nil)
@ -203,6 +214,7 @@ This minor mode is turned on in two situations:
There is a mode hook, and keybindings for `org-edit-src-exit' and
`org-edit-src-save'")
(defvar org-edit-src-code-timer nil)
(defun org-edit-src-code (&optional context code edit-buffer-name)
"Edit the source CODE block at point.
The code is copied to a separate buffer and the appropriate mode
@ -341,7 +353,24 @@ the display of windows containing the Org buffer and the code buffer."
(org-set-local 'header-line-format msg))
(let ((edit-prep-func (intern (concat "org-babel-edit-prep:" lang))))
(when (fboundp edit-prep-func)
(funcall edit-prep-func full-info))))
(funcall edit-prep-func full-info)))
(or org-edit-src-code-timer
(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)))
(defun org-edit-src-continue (e)
@ -421,7 +450,7 @@ the fragment in the Org-mode buffer."
(col (current-column))
(case-fold-search t)
(msg (substitute-command-keys
"Edit, then exit with C-c ' (C-c and single quote)"))
"Edit, then exit with C-c ' (C-c and single quote) -- C-c k to abort"))
(org-mode-p (derived-mode-p 'org-mode))
(beg (make-marker))
(end (make-marker))
@ -721,6 +750,9 @@ 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)