]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve 'desktop--emacs-pid-running-p'
authorEli Zaretskii <eliz@gnu.org>
Sat, 26 Mar 2022 07:28:52 +0000 (10:28 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 26 Mar 2022 07:28:52 +0000 (10:28 +0300)
* lisp/desktop.el (desktop--emacs-pid-running-p): Avoid false
negatives on MS-Windows and with some symlinks to Emacs
executables.  (Bug#1474)

lisp/desktop.el

index 773f0f050f996a88af46c23de04770308ef8188a..7e3d66bdf1f6d5865fd472610736cfcb9d641026 100644 (file)
@@ -673,10 +673,26 @@ DIRNAME omitted or nil means use `desktop-dirname'."
         owner)))
 
 (defun desktop--emacs-pid-running-p (pid)
-  "Return t if an Emacs process with PID exists."
+  "Return non-nil if an Emacs process whose ID is PID might still be running."
   (when-let ((attr (process-attributes pid)))
-    (equal (alist-get 'comm attr)
-           (file-name-nondirectory (car command-line-args)))))
+    (let ((proc-cmd (alist-get 'comm attr))
+          (my-cmd (file-name-nondirectory (car command-line-args)))
+          (case-fold-search t))
+      (or (equal proc-cmd my-cmd)
+          (and (eq system-type 'windows-nt)
+               (eq t (compare-strings proc-cmd
+                                      nil
+                                      (if (string-suffix-p ".exe" proc-cmd t)
+                                          -4)
+                                      my-cmd
+                                      nil
+                                      (if (string-suffix-p ".exe" my-cmd t)
+                                          -4))))
+          ;; We should err on the safe side here: if any of the
+          ;; executables is something like "emacs-nox" or "emacs-42.1"
+          ;; or "gemacs" or "xemacs", let's recognize them as well.
+          (and (string-match-p "emacs" proc-cmd)
+               (string-match-p "emacs" my-cmd))))))
 
 (defun desktop--load-locked-desktop-p (owner)
   "Return t if a locked desktop should be loaded.