[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master cd46972: Fix exiting Emacs when savehist-file not writable
From: |
Lars Ingebrigtsen |
Subject: |
master cd46972: Fix exiting Emacs when savehist-file not writable |
Date: |
Tue, 11 May 2021 09:58:29 -0400 (EDT) |
branch: master
commit cd46972ee82d392cef8fa6e51c370d3d8f48777a
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Lars Ingebrigtsen <larsi@gnus.org>
Fix exiting Emacs when savehist-file not writable
* lisp/savehist.el (savehist-save): Show warning when 'savehist-file'
is not writable. (Bug#34093)
(savehist--has-given-file-warning): New variable.
---
lisp/savehist.el | 41 ++++++++++++++++++++++++-----------------
1 file changed, 24 insertions(+), 17 deletions(-)
diff --git a/lisp/savehist.el b/lisp/savehist.el
index b8e9d6b..6745d37 100644
--- a/lisp/savehist.el
+++ b/lisp/savehist.el
@@ -213,6 +213,7 @@ Normally invoked by calling `savehist-mode' to unset the
minor mode."
(cancel-timer savehist-timer)
(setq savehist-timer nil)))
+(defvar savehist--has-given-file-warning nil)
(defun savehist-save (&optional auto-save)
"Save the values of minibuffer history variables.
Unbound symbols referenced in `savehist-additional-variables' are ignored.
@@ -286,23 +287,29 @@ If AUTO-SAVE is non-nil, compare the saved contents to
the one last saved,
;; If autosaving, avoid writing if nothing has changed since the
;; last write.
(let ((checksum (md5 (current-buffer) nil nil savehist-coding-system)))
- (unless (and auto-save (equal checksum savehist-last-checksum))
- ;; Set file-precious-flag when saving the buffer because we
- ;; don't want a half-finished write ruining the entire
- ;; history. Remember that this is run from a timer and from
- ;; kill-emacs-hook, and also that multiple Emacs instances
- ;; could write to this file at once.
- (let ((file-precious-flag t)
- (coding-system-for-write savehist-coding-system)
- (dir (file-name-directory savehist-file)))
- ;; Ensure that the directory exists before saving.
- (unless (file-exists-p dir)
- (make-directory dir t))
- (write-region (point-min) (point-max) savehist-file nil
- (unless (called-interactively-p 'interactive) 'quiet)))
- (when savehist-file-modes
- (set-file-modes savehist-file savehist-file-modes))
- (setq savehist-last-checksum checksum)))))
+ (condition-case err
+ (unless (and auto-save (equal checksum savehist-last-checksum))
+ ;; Set file-precious-flag when saving the buffer because we
+ ;; don't want a half-finished write ruining the entire
+ ;; history. Remember that this is run from a timer and from
+ ;; kill-emacs-hook, and also that multiple Emacs instances
+ ;; could write to this file at once.
+ (let ((file-precious-flag t)
+ (coding-system-for-write savehist-coding-system)
+ (dir (file-name-directory savehist-file)))
+ ;; Ensure that the directory exists before saving.
+ (unless (file-exists-p dir)
+ (make-directory dir t))
+ (write-region (point-min) (point-max) savehist-file nil
+ (unless (called-interactively-p 'interactive)
'quiet)))
+ (when savehist-file-modes
+ (set-file-modes savehist-file savehist-file-modes))
+ (setq savehist-last-checksum checksum))
+ (file-error
+ (unless savehist--has-given-file-warning
+ (lwarn '(savehist-file) :warning "Error writing `%s': %s"
+ savehist-file (caddr err))
+ (setq savehist--has-given-file-warning t)))))))
(defun savehist-autosave ()
"Save the minibuffer history if it has been modified since the last save.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master cd46972: Fix exiting Emacs when savehist-file not writable,
Lars Ingebrigtsen <=