From 239521765c6ecf5679463dd9603359bf907570eb Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 May 2016 17:29:58 -0700 Subject: [PATCH] Do not trash symlinks to init file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the user’s init file is a symbolic link, do not break the link when initializing the package system. Problem reported by Jackson Hamilton (Bug#23050). * lisp/emacs-lisp/package.el (package--ensure-init-file): Bind find-file-visit-truename when visiting the init file, and save and restore the buffer name the way cus-edit does in a similar situation (Bug#454). --- lisp/emacs-lisp/package.el | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index b0a6db0..14626e2 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1869,6 +1869,7 @@ package--ensure-init-file (file-readable-p user-init-file) (file-writable-p user-init-file)) (let* ((buffer (find-buffer-visiting user-init-file)) + buffer-name (contains-init (if buffer (with-current-buffer buffer @@ -1884,8 +1885,12 @@ package--ensure-init-file (re-search-forward "(package-initialize\\_>" nil 'noerror))))) (unless contains-init (with-current-buffer (or buffer - (let ((delay-mode-hooks t)) + (let ((delay-mode-hooks t) + (find-file-visit-truename t)) (find-file-noselect user-init-file))) + (when buffer + (setq buffer-name (buffer-file-name)) + (set-visited-file-name (file-chase-links user-init-file))) (save-excursion (save-restriction (widen) @@ -1904,7 +1909,10 @@ package--ensure-init-file (insert "\n")) (let ((file-precious-flag t)) (save-buffer)) - (unless buffer + (if buffer + (progn + (set-visited-file-name buffer-name) + (set-buffer-modified-p nil)) (kill-buffer (current-buffer))))))))) (setq package--init-file-ensured t)) -- 2.7.4