diff options
Diffstat (limited to 'lisp/saveplace.el')
-rw-r--r-- | lisp/saveplace.el | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/lisp/saveplace.el b/lisp/saveplace.el index c088facb3c3..a23454b0bb4 100644 --- a/lisp/saveplace.el +++ b/lisp/saveplace.el @@ -290,7 +290,11 @@ may have changed) back to `save-place-alist'." ;; adding hooks to it. (with-current-buffer (get-buffer-create " *Saved Places*") (delete-region (point-min) (point-max)) - (insert-file-contents file) + ;; Make sure our 'coding:' cookie in the save-place + ;; file will take effect, in case the caller binds + ;; coding-system-for-read. + (let (coding-system-for-read) + (insert-file-contents file)) (goto-char (point-min)) (setq save-place-alist (with-demoted-errors "Error reading save-place-file: %S" @@ -328,11 +332,18 @@ may have changed) back to `save-place-alist'." (with-current-buffer (car buf-list) ;; save-place checks buffer-file-name too, but we can avoid ;; overhead of function call by checking here too. - (and (or buffer-file-name (and (derived-mode-p 'dired-mode) - (boundp 'dired-subdir-alist) - dired-subdir-alist - (dired-current-directory))) - (save-place-to-alist)) + (when (and (or buffer-file-name + (and (derived-mode-p 'dired-mode) + (boundp 'dired-subdir-alist) + dired-subdir-alist + (dired-current-directory))) + ;; Don't save place in literally-visited file + ;; because this will commonly differ from the place + ;; when visiting literally (and + ;; `find-file-literally' always places point at the + ;; start of the buffer). + (not find-file-literally)) + (save-place-to-alist)) (setq buf-list (cdr buf-list)))))) (defun save-place-find-file-hook () |