From: Philipp Stephani <p.stephani2@gmail.com>
To: eliz@gnu.org, emacs-devel@gnu.org, 25478@debbugs.gnu.org, rgm@gnu.org
Cc: Philipp Stephani <phst@google.com>
Subject: [PATCH] Reimplement auto-saving to visited files
Date: Sat, 29 Apr 2017 20:49:09 +0200 [thread overview]
Message-ID: <20170429184909.40204-1-phst@google.com> (raw)
In-Reply-To: <CAArVCkQSt+GtxxWBOkgUVzZeWKPEGab5hB7xXyXpPm5rMQ0zvA@mail.gmail.com>
This reacts to confusing behavior of 'auto-save-visited-file-name',
cf. Bug#25478.
* lisp/files.el (auto-save-visited-interval): New customization option.
(auto-save-visited-mode): New global minor mode.
(auto-save-visited-file-name): Make obsolete.
(auto-save--timer): New internal helper variable.
* doc/emacs/files.texi (Auto Save Files): Document
'auto-save-visited-mode' instead of obsolete
'auto-save-visited-file-name'.
(Auto Save Control): Document customization option
'auto-save-visited-interval'.
---
doc/emacs/files.texi | 29 ++++++++++++++++++++++-------
etc/NEWS | 6 ++++++
lisp/files.el | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 68 insertions(+), 7 deletions(-)
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index ed17f66ca2..55eda00d0c 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -1040,14 +1040,23 @@ Auto Save Files
this happens, save the buffer with @kbd{C-x C-s}, or use @kbd{C-u 1 M-x
auto-save-mode}.
-@vindex auto-save-visited-file-name
+@vindex auto-save-visited-mode
If you want auto-saving to be done in the visited file rather than
-in a separate auto-save file, set the variable
-@code{auto-save-visited-file-name} to a non-@code{nil} value. In this
-mode, auto-saving is very similar to explicit saving. However,
-differences still exist, in particular for modes which modify the
-buffer-saving process in non-trivial ways via various hooks
-(@pxref{Saving Buffers,,, elisp, The Emacs Lisp Reference Manual}).
+in a separate auto-save file, enable the global minor mode
+@code{auto-save-visited-mode}. In this mode, auto-saving is identical
+to explicit saving. Note that this mode is orthogonal to the
+@code{auto-save} mode described above; you can enable both at the same
+time. However, if @code{auto-save} mode is active in some buffer and
+the obsolete @code{auto-save-visited-file-name} variable is set to a
+non-@code{nil} value, that buffer won't be affected by
+@code{auto-save-visited-mode}.
+
+ You can use the variable @code{auto-save-visited-interval} to
+customize the interval between auto-save operations in
+@code{auto-save-visited-mode}; by default it's five seconds.
+@code{auto-save-interval} and @code{auto-save-timeout} have no effect
+on @code{auto-save-visited-mode}. See @xref{Auto Save Control} for
+details on these variables.
@vindex delete-auto-save-files
A buffer's auto-save file is deleted when you save the buffer in its
@@ -1091,6 +1100,12 @@ Auto Save Control
a while; second, it may avoid some auto-saving while you are actually
typing.
+@vindex auto-save-visited-interval
+ When @code{auto-save-visited-mode} is enabled, Emacs will auto-save
+file-visiting buffers after five seconds of idle time. You can
+customize the variable @code{auto-save-visited-interval} to change the
+idle time interval.
+
Emacs also does auto-saving whenever it gets a fatal error. This
includes killing the Emacs job with a shell command such as @samp{kill
%emacs}, or disconnecting a phone line or network connection.
diff --git a/etc/NEWS b/etc/NEWS
index 9d4c72d6dc..173c4e466b 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -383,6 +383,12 @@ Strings such as ΌΣΟΣ are now correctly converted to Όσος when
capitalized instead of incorrect Όσοσ (compare lowercase sigma at the
end of the word).
+** Emacs can now auto-save buffers to visited files in a more robust
+manner via the new mode 'auto-save-visited-mode'. Unlike
+'auto-save-visited-file-name', this mode uses the normal saving
+procedure and therefore obeys saving hooks.
+'auto-save-visited-file-name' is now obsolete.
+
\f
* Changes in Specialized Modes and Packages in Emacs 26.1
diff --git a/lisp/files.el b/lisp/files.el
index 6848818cad..d3958b5643 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -393,6 +393,46 @@ auto-save-file-name-transforms
:initialize 'custom-initialize-delay
:version "21.1")
+(defvar auto-save--timer nil "Timer for `auto-save-visited-mode'.")
+
+(defcustom auto-save-visited-interval 5
+ "Interval in seconds for `auto-save-visited-mode'.
+If `auto-save-visited-mode' is enabled, Emacs will save all
+buffers visiting a file to the visited file after it has been
+idle for `auto-save-visited-interval' seconds."
+ :group 'auto-save
+ :type 'number
+ :version "26.1"
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (when auto-save--timer
+ (timer-set-idle-time auto-save--timer value :repeat))))
+
+(define-minor-mode auto-save-visited-mode
+ "Toggle automatic saving to file-visiting buffers on or off.
+With a prefix argument ARG, enable regular saving of all buffers
+visiting a file if ARG is positive, and disable it otherwise.
+Unlike `auto-save-mode', this mode will auto-save buffer contents
+to the visited files directly and will also run all save-related
+hooks. See Info node `Saving' for details of the save process.
+
+If called from Lisp, enable the mode if ARG is omitted or nil,
+and toggle it if ARG is `toggle'."
+ :group 'auto-save
+ :global t
+ (when auto-save--timer (kill-timer auto-save--timer))
+ (setq auto-save--timer
+ (when auto-save-visited-mode
+ (run-with-idle-timer
+ auto-save-visited-interval :repeat
+ #'save-some-buffers :no-prompt
+ (lambda ()
+ (not (and buffer-auto-save-file-name
+ auto-save-visited-file-name)))))))
+
+(make-obsolete-variable 'auto-save-visited-file-name 'auto-save-visited-mode
+ "Emacs 26.1")
+
(defcustom save-abbrevs t
"Non-nil means save word abbrevs too when files are saved.
If `silently', don't ask the user before saving."
--
2.12.2
next prev parent reply other threads:[~2017-04-29 18:49 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-18 21:39 bug#25478: 26.0.50; No hooks are called when auto-saving Philipp Stephani
2017-01-19 20:29 ` Glenn Morris
2017-01-20 8:45 ` Eli Zaretskii
2017-01-20 17:42 ` Glenn Morris
2017-03-26 18:21 ` Philipp Stephani
2017-03-26 18:45 ` Eli Zaretskii
2017-03-26 19:17 ` Philipp Stephani
2017-04-22 19:01 ` Philipp Stephani
2017-04-28 9:27 ` Eli Zaretskii
2017-04-29 18:47 ` Philipp Stephani
2017-04-29 18:49 ` Philipp Stephani [this message]
2017-04-29 19:20 ` bug#25478: [PATCH] Reimplement auto-saving to visited files Eli Zaretskii
2017-04-29 19:31 ` Philipp Stephani
2017-04-29 19:31 ` Philipp Stephani
2017-04-29 22:19 ` Peter Vasil
2017-04-30 2:41 ` Kaushal Modi
2017-04-30 2:43 ` Tino Calancha
2017-04-30 3:16 ` Kaushal Modi
2017-05-01 15:37 ` Philipp Stephani
2020-08-11 8:08 ` bug#25478: " Stefan Kangas
2020-10-01 12:11 ` Stefan Kangas
2017-04-29 18:49 ` Philipp Stephani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170429184909.40204-1-phst@google.com \
--to=p.stephani2@gmail.com \
--cc=25478@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=phst@google.com \
--cc=rgm@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.