[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master bb9df76dc9: Set XFCE wallpaper also in single-workspace-mode
From: |
Stefan Kangas |
Subject: |
master bb9df76dc9: Set XFCE wallpaper also in single-workspace-mode |
Date: |
Mon, 26 Sep 2022 15:26:58 -0400 (EDT) |
branch: master
commit bb9df76dc96afa046e8a576708f39881f0535235
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>
Set XFCE wallpaper also in single-workspace-mode
This fixes setting the wallpaper on XFCE whether or not the
"/backdrop/single-workspace-mode" setting is true or false.
That XFCE setting controls whether or not the same wallpaper is used
on all workspaces or not.
* lisp/image/wallpaper.el (wallpaper-setter)
(wallpaper-command-args, wallpaper-default-set-function): Allow
using a function for getting the command line arguments.
(wallpaper-xfce-command-args): New function.
(wallpaper--default-setters): Use above new function for XFCE.
---
lisp/image/wallpaper.el | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git a/lisp/image/wallpaper.el b/lisp/image/wallpaper.el
index b2a36e98a4..de650a7318 100644
--- a/lisp/image/wallpaper.el
+++ b/lisp/image/wallpaper.el
@@ -90,7 +90,7 @@ the image file to set the wallpaper to.")
( name command args-raw
&rest rest-plist
&aux
- (args (if (listp args-raw)
+ (args (if (or (listp args-raw) (symbolp args-raw))
args-raw
(string-split args-raw)))
(predicate (plist-get rest-plist :predicate))))
@@ -153,9 +153,7 @@ and returns non-nil if this setter should be used."
(member "KDE" (xdg-current-desktop))))
("XFCE"
- "xfconf-query" '("-c" "xfce4-desktop"
- "-p" "/backdrop/screen%S/monitor%M/workspace%W/last-image"
- "-s" "%f")
+ "xfconf-query" #'wallpaper-xfce-command-args
:predicate (lambda ()
(or (and (getenv "DESKTOP_SESSION")
(member (downcase (getenv "DESKTOP_SESSION"))
@@ -240,6 +238,20 @@ This is used by `wallpaper--find-command' to automatically
set
`wallpaper-command-args'. The setters will be tested in the
order in which they appear.")
+(defun wallpaper-xfce-command-args ()
+ (let ((info
+ (with-temp-buffer
+ (call-process "xfconf-query" nil t nil
+ "-c" "xfce4-desktop"
+ "-p" "/backdrop/single-workspace-mode")
+ (buffer-string))))
+ (list "-c" "xfce4-desktop"
+ "-p" (format "/backdrop/screen%%S/monitor%%M/workspace%s/last-image"
+ (if (equal info "true")
+ "0"
+ "%W"))
+ "-s" "%f")))
+
(defvar wallpaper--current-setter nil)
(defun wallpaper--find-setter ()
@@ -321,6 +333,9 @@ automatically, so there is usually no need to customize
this.
However, if you do need to change this, you might also want to
customize `wallpaper-command' to match.
+The value is a list of command list arguments to use, or a
+function that returns a list of command line arguments.
+
In each command line argument, these specifiers will be replaced:
%f full file name
@@ -338,7 +353,8 @@ height and width to use for %h and %w.
The value of this variable is ignored on MS-Windows and Haiku
systems, where a native API is used instead."
- :type '(repeat string)
+ :type '(choice (repeat string)
+ function)
:group 'image
:version "29.1")
@@ -424,8 +440,11 @@ FILE is the image file name."
This is the default function for `wallpaper-set-function'."
(unless wallpaper-command
(error "Couldn't find a command to set the wallpaper with"))
- (let* ((real-args (mapcar (lambda (arg) (wallpaper--format-arg arg file))
- wallpaper-command-args))
+ (let* ((args (if (functionp wallpaper-command-args)
+ (funcall wallpaper-command-args)
+ wallpaper-command-args))
+ (real-args (mapcar (lambda (arg) (wallpaper--format-arg arg file))
+ args))
(bufname (format " *wallpaper-%s*" (random)))
(process
(and wallpaper-command
@@ -434,7 +453,7 @@ This is the default function for `wallpaper-set-function'."
(unless wallpaper-command
(error "Couldn't find a suitable command for setting the wallpaper"))
(wallpaper-debug "Using command: \"%s %s\""
- wallpaper-command (string-join wallpaper-command-args " "))
+ wallpaper-command (string-join args " "))
(wallpaper-debug (wallpaper--format-arg
"f=%f w=%w h=%h S=%S M=%M W=%W" file))
(setf (process-sentinel process)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master bb9df76dc9: Set XFCE wallpaper also in single-workspace-mode,
Stefan Kangas <=