]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new function xdg-current-desktop to xdg.el
authorStefan Kangas <stefankangas@gmail.com>
Wed, 14 Sep 2022 08:15:26 +0000 (10:15 +0200)
committerStefan Kangas <stefankangas@gmail.com>
Wed, 14 Sep 2022 08:23:45 +0000 (10:23 +0200)
* lisp/xdg.el (xdg-current-desktop): New function.
* test/lisp/xdg-tests.el (xdg-current-desktop): New test.

etc/NEWS
lisp/xdg.el
test/lisp/xdg-tests.el

index ae3f84c1b97eeccc8015de3e0ece68cc62a44178..4053e39b773307388ac1088da891ef4a678b6006 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3458,6 +3458,14 @@ version 0.8 (8th May 2021), "contains state data that should persist
 between (application) restarts, but that is not important or portable
 enough to the user that it should be stored in $XDG_DATA_HOME".
 
+---
+*** New function 'xdg-current-desktop'.
+It returns a list of strings, corresponding to the colon-separated
+list of names in the 'XDG_CURRENT_DESKTOP' environment variable, which
+identify the current desktop environment.
+(This variable was introduced in XDG Desktop Entry Specification
+version 1.2.)
+
 +++
 ** New macro 'with-delayed-message'.
 This macro is like 'progn', but will output the specified message if
index dd0d51290dcbba00b6b695d6afec713104215c74..5d60aa2f283717d24098b81781a67c5b338ecf0c 100644 (file)
@@ -281,6 +281,18 @@ Optional argument GROUP defaults to the string \"Desktop Entry\"."
     (when (null (string-match-p "[^[:blank:]]" (car res))) (pop res))
     (nreverse res)))
 
+(defun xdg-current-desktop ()
+  "Return a list of strings identifying the current desktop environment.
+
+According to the XDG Desktop Entry Specification version 0.5:
+
+    If $XDG_CURRENT_DESKTOP is set then it contains a
+    colon-separated list of strings ... $XDG_CURRENT_DESKTOP
+    should have been set by the login manager, according to the
+    value of the DesktopNames found in the session file."
+  (when-let ((ret (getenv "XDG_CURRENT_DESKTOP")))
+    (string-split ret ":")))
+
 \f
 ;; MIME apps specification
 ;; https://standards.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html
index e8e103348b7a5eb67dcb6c817c2f2327afff79b7..882160743a26483ac319391644b9849143ff65cb 100644 (file)
   (should (equal (xdg-desktop-strings " ") nil))
   (should (equal (xdg-desktop-strings "a; ;") '("a" " "))))
 
+(ert-deftest xdg-current-desktop ()
+  (let ((env (getenv "XDG_CURRENT_DESKTOP")))
+    (unwind-protect
+        (progn
+          (setenv "XDG_CURRENT_DESKTOP" "KDE")
+          (should (equal (xdg-current-desktop) '("KDE")))
+          (setenv "XDG_CURRENT_DESKTOP" "ubuntu:GNOME")
+          (should (equal (xdg-current-desktop) '("ubuntu" "GNOME"))))
+      (setenv "XDG_CURRENT_DESKTOP" env))))
+
 (ert-deftest xdg-mime-associations ()
   "Test reading MIME associations from files."
   (let* ((apps (ert-resource-file "mimeapps.list"))