]> code.delx.au - gnu-emacs/commitdiff
Do not trash symlinks to init file
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 23 May 2016 00:29:58 +0000 (17:29 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 23 May 2016 00:30:34 +0000 (17:30 -0700)
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

index b0a6db087ba27e795adb5d6916f472917baf015f..14626e2f28f3187fbde2fbbe25c887902bc73c46 100644 (file)
@@ -1869,6 +1869,7 @@ add a call to it along with some explanatory comments."
              (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 @@ add a call to it along with some explanatory comments."
                 (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 @@ add a call to it along with some explanatory comments."
                 (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))