summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2013-02-16 11:35:39 +0100
committerBastien Guerry <bzg@altern.org>2013-02-16 11:35:39 +0100
commit25aabd7d2f78eb3cdccb17214ffe24a1f19a0e93 (patch)
tree28c62192dbf02dbb1dc35f283b7349cb316f6bfc
parent602d6edb56adcc381fd6204b7ac46a0285048126 (diff)
downloadorg-mode-25aabd7d2f78eb3cdccb17214ffe24a1f19a0e93.tar.gz
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.
-rw-r--r--lisp/org-src.el40
1 files changed, 36 insertions, 4 deletions
diff --git a/lisp/org-src.el b/lisp/org-src.el
index 298c31d..3994572 100644
--- a/lisp/org-src.el
+++ b/lisp/org-src.el
@@ -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)