From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.bugs Subject: bug#25478: [PATCH] Reimplement auto-saving to visited files Date: Sat, 29 Apr 2017 20:49:09 +0200 Message-ID: <20170429184909.40204-1-phst__787.506943061267$1493491848$gmane$org@google.com> References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1493491848 19461 195.159.176.226 (29 Apr 2017 18:50:48 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 29 Apr 2017 18:50:48 +0000 (UTC) Cc: Philipp Stephani To: eliz@gnu.org, emacs-devel@gnu.org, 25478@debbugs.gnu.org, rgm@gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Apr 29 20:50:44 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d4XS7-0004x3-Vh for geb-bug-gnu-emacs@m.gmane.org; Sat, 29 Apr 2017 20:50:44 +0200 Original-Received: from localhost ([::1]:42019 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d4XSD-0003pg-Nx for geb-bug-gnu-emacs@m.gmane.org; Sat, 29 Apr 2017 14:50:49 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d4XRV-0003Sr-Nr for bug-gnu-emacs@gnu.org; Sat, 29 Apr 2017 14:50:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d4XRS-0000VC-JO for bug-gnu-emacs@gnu.org; Sat, 29 Apr 2017 14:50:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:48417) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1d4XRS-0000V7-FH for bug-gnu-emacs@gnu.org; Sat, 29 Apr 2017 14:50:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1d4XRS-0001FY-8U for bug-gnu-emacs@gnu.org; Sat, 29 Apr 2017 14:50:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Philipp Stephani Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 29 Apr 2017 18:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25478 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 25478-submit@debbugs.gnu.org id=B25478.14934917724762 (code B ref 25478); Sat, 29 Apr 2017 18:50:02 +0000 Original-Received: (at 25478) by debbugs.gnu.org; 29 Apr 2017 18:49:32 +0000 Original-Received: from localhost ([127.0.0.1]:46616 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d4XQx-0001Ek-UX for submit@debbugs.gnu.org; Sat, 29 Apr 2017 14:49:32 -0400 Original-Received: from mail-wm0-f54.google.com ([74.125.82.54]:34931) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d4XQv-0001EX-Oo for 25478@debbugs.gnu.org; Sat, 29 Apr 2017 14:49:30 -0400 Original-Received: by mail-wm0-f54.google.com with SMTP id w64so64560775wma.0 for <25478@debbugs.gnu.org>; Sat, 29 Apr 2017 11:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BWoHug3OsCXR1dWsh5QjuPhH6/ncB+wxTisWvDMEDHs=; b=DrZ23E/E0IKr4Xfcw9sCxSr7iUT0cHt6YPMKIAee0L+K1jI0gLI6xjyk2gZ3AZHwR+ eGIzfHw+MW9rdGnUEJOLXOkJ0iQ+C578DXMLKAggPwNvBlmiCwV5joypR28Gcb3/XrbW ItymXlQodcfwEf1RTM5vkX1aBMLjN/QYNdl8yEzUT1+UhO08r8VLPnAieDGWGCDU0mWx MUrX3Mx27EUW6WFoN8d4jEDYgQnPZuSS5jp0c4aXkadmXqu6MDFpFYE9l4L2oXV357tk RHq2b8kRmlv66nVc4/RyLnmIjHmVBK6HcRsqx9y42Aeow9q3EW4a/Eb/6Pc4KMyc0lGG ANSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BWoHug3OsCXR1dWsh5QjuPhH6/ncB+wxTisWvDMEDHs=; b=G3DxrB4nnsycbQ6yTPmbgBZ+SNHYpQhAO9kH/Ww1h86Kt2UHN5nwTOtkNq2aXugDqb 4U7Qs+qGREeVkyVnvODk+UqtUV0apBuF82FMWvwgnjMDu7ZxGwWhvIoMwboGc8ghhk+H 6o24v1J2pAzDddbEx2gmsgGMH5Jp5y6ilDi0XL1dMSn0GXr6ddPZ95Pl3XBzpwVgKskA Zdh77TA44PXHkgBIkqXZqvZT4dPtcgB4XbCNKwK5yd274Yx9PaO9a0fxzgX/N60kjsXD XCpmMTK2Q5EhTAGMJDAU3f62DFOjf16gK8PjAvzeLHqy3ghsfJBFYo+wS0Xz6nO/oh+z Au2A== X-Gm-Message-State: AN3rC/5uAiFYy1Gl78c0ZXlf0M2m58QJY/ktBjUHCT1FIJS3NHuiyKiM HOnEpWMhHrMoBA== X-Received: by 10.28.48.11 with SMTP id w11mr2020193wmw.77.1493491763847; Sat, 29 Apr 2017 11:49:23 -0700 (PDT) Original-Received: from p.cm.cablesurf.de (46.128.198.151.dynamic.cablesurf.de. [46.128.198.151]) by smtp.gmail.com with ESMTPSA id j124sm11168428wmg.13.2017.04.29.11.49.22 (version=TLS1 cipher=AES128-SHA bits=128/128); Sat, 29 Apr 2017 11:49:23 -0700 (PDT) X-Google-Original-From: Philipp Stephani X-Mailer: git-send-email 2.12.2 In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:132111 Archived-At: 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. + * 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