]> git.eshelyaron.com Git - emacs.git/commitdiff
Simplify checks for xdg-open and xdg-email
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 10 Mar 2017 03:01:19 +0000 (19:01 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 10 Mar 2017 03:02:35 +0000 (19:02 -0800)
browse-url's xdg-open detection was too picky on some GNU/Linux
desktops; see Bug#25778.  Simplify the code by assuming xdg-open works
if it is executable, as nowadays this is more likely to be correct than
trying to use heuristics from a few years ago.  Don't test for nohup: it
is ineffective nowadays, as xdg-open's child uses the default action for
SIGHUP even if xdg-open's invoker ignores SIGHUP.  While we're at it,
allow for Wayland here, as "emacs -nw" might be running in a non-X
Wayland terminal.
* lisp/mail/emacsbug.el (report-emacs-bug-can-use-xdg-email):
* lisp/net/browse-url.el (browse-url-can-use-xdg-open):
Simplify to a test for DISPLAY and whether the helper program is
executable.  Allow WAYLAND_DISPLAY as an option.

lisp/mail/emacsbug.el
lisp/net/browse-url.el

index ecb7db60ae1390dadba805dec8ade02316bd0795..c1aec6923fbc53f667771371c67a6d95697a3b1b 100644 (file)
        (equal (executable-find "open") "/usr/bin/open")
        (memq system-type '(darwin))))
 
-;; FIXME this duplicates much of the logic from browse-url-can-use-xdg-open.
 (defun report-emacs-bug-can-use-xdg-email ()
   "Return non-nil if the \"xdg-email\" command can be used.
-xdg-email is a desktop utility that calls your preferred mail client.
-This requires you to be running either Gnome, KDE, or Xfce4."
-  (and (getenv "DISPLAY")
-       (executable-find "xdg-email")
-       (or (getenv "GNOME_DESKTOP_SESSION_ID")
-          ;; GNOME_DESKTOP_SESSION_ID is deprecated, check on Dbus also.
-          (condition-case nil
-              (eq 0 (call-process
-                     "dbus-send" nil nil nil
-                                 "--dest=org.gnome.SessionManager"
-                                 "--print-reply"
-                                 "/org/gnome/SessionManager"
-                                 "org.gnome.SessionManager.CanShutdown"))
-            (error nil))
-          (equal (getenv "KDE_FULL_SESSION") "true")
-          ;; FIXME? browse-url-can-use-xdg-open also accepts LXDE.
-          ;; Is that no good here, or just overlooked?
-          (condition-case nil
-              (eq 0 (call-process
-                     "/bin/sh" nil nil nil
-                     "-c"
-                     ;; FIXME use string-match rather than grep.
-                     "xprop -root _DT_SAVE_MODE|grep xfce4"))
-            (error nil)))))
+xdg-email is a desktop utility that calls your preferred mail client."
+  (and ;; See browse-url-can-use-xdg-open.
+       (or (getenv "DISPLAY") (getenv "WAYLAND_DISPLAY"))
+       (executable-find "xdg-email")))
 
 (defun report-emacs-bug-insert-to-mailer ()
   "Send the message to your preferred mail client.
index 04b49c44313ad0b6ff2acc350c5566ea1ec29ff2..20ae072f6527b19b9cccfe81dcb40e5b197ec2af 100644 (file)
@@ -45,7 +45,7 @@
 ;; browse-url-generic                 arbitrary
 ;; browse-url-default-windows-browser MS-Windows browser
 ;; browse-url-default-macosx-browser  macOS browser
-;; browse-url-xdg-open                Free Desktop xdg-open on Gnome, KDE, Xfce4, LXDE
+;; browse-url-xdg-open                freedesktop.org xdg-open
 ;; browse-url-kde                     KDE konqueror (kfm)
 ;; browse-url-elinks                  Elinks      Don't know (tried with 0.12.GIT)
 
@@ -944,36 +944,14 @@ instead of `browse-url-new-window-flag'."
 
 (defun browse-url-can-use-xdg-open ()
   "Return non-nil if the \"xdg-open\" program can be used.
-xdg-open is a desktop utility that calls your preferred web browser.
-This requires you to be running either Gnome, KDE, Xfce4 or LXDE."
-  (and (getenv "DISPLAY")
-       (executable-find "xdg-open")
-       ;; xdg-open may call gnome-open and that does not wait for its child
-       ;; to finish.  This child may then be killed when the parent dies.
-       ;; Use nohup to work around.  See bug#7166, bug#8917, bug#9779 and
-       ;; http://lists.gnu.org/archive/html/emacs-devel/2009-07/msg00279.html
-       (executable-find "nohup")
-       (or (getenv "GNOME_DESKTOP_SESSION_ID")
-          ;; GNOME_DESKTOP_SESSION_ID is deprecated, check on Dbus also.
-          (condition-case nil
-              (eq 0 (call-process
-                     "dbus-send" nil nil nil
-                                 "--dest=org.gnome.SessionManager"
-                                 "--print-reply"
-                                 "/org/gnome/SessionManager"
-                                 "org.gnome.SessionManager.CanShutdown"))
-            (error nil))
-          (equal (getenv "KDE_FULL_SESSION") "true")
-          (condition-case nil
-              (eq 0 (call-process
-                     "/bin/sh" nil nil nil
-                     "-c"
-                     ;; FIXME use string-match rather than grep.
-                     "xprop -root _DT_SAVE_MODE|grep xfce4"))
-            (error nil))
-          (member (getenv "DESKTOP_SESSION") '("LXDE" "Lubuntu"))
-          (equal (getenv "XDG_CURRENT_DESKTOP") "LXDE"))))
-
+xdg-open is a desktop utility that calls your preferred web browser."
+  ;; The exact set of situations where xdg-open works is complicated,
+  ;; and it would be a pain to duplicate xdg-open's situation-specific
+  ;; code here, as the code is a moving target.  So assume that
+  ;; xdg-open will work if there is a graphical display; this should
+  ;; be good enough for platforms Emacs is likely to be running on.
+  (and (or (getenv "DISPLAY") (getenv "WAYLAND_DISPLAY"))
+       (executable-find "xdg-open")))
 
 ;;;###autoload
 (defun browse-url-xdg-open (url &optional ignored)