]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow setting wallpaper from TTY
authorStefan Kangas <stefankangas@gmail.com>
Wed, 14 Sep 2022 08:52:39 +0000 (10:52 +0200)
committerStefan Kangas <stefankangas@gmail.com>
Wed, 14 Sep 2022 09:00:29 +0000 (11:00 +0200)
* lisp/image/wallpaper.el (wallpaper-set): Allow setting wallpaper
when 'display-graphic-p' is nil.
(wallpaper-default-width, wallpaper-default-height):
New variables.
(wallpaper--get-height-or-width): New helper function.

lisp/image/wallpaper.el

index 1e921dc2c4c17dc54464838690055babc4a93b73..a2b51d68d7a8bfc802655fa39c3e521e823d83f1 100644 (file)
@@ -112,8 +112,23 @@ You can also use \\[report-emacs-bug]."
                (executable-find (car cmd)))
           (throw 'found cmd)))))
 
+(defvar wallpaper-default-width 1080
+  "Default width used by `wallpaper-set'.
+This is only used when it can't be detected automatically.
+See also `wallpaper-default-height'.")
+
+(defvar wallpaper-default-height 1920
+  "Default height used by `wallpaper-set'.
+This is only used when it can't be detected automatically.
+See also `wallpaper-default-width'.")
+
 (declare-function haiku-set-wallpaper "term/haiku-win.el")
 
+(defun wallpaper--get-height-or-width (desc fun default)
+  (if (display-graphic-p)
+      (funcall fun)
+    (read-number (format "Wallpaper %s in pixels: " desc) default)))
+
 (defun wallpaper-set (file)
   "Set the desktop background to FILE in a graphical environment."
   (interactive (list (and
@@ -129,35 +144,41 @@ You can also use \\[report-emacs-bug]."
     (error "No such file: %s" file))
   (unless (file-readable-p file)
     (error "File is not readable: %s" file))
-  (when (display-graphic-p)
-    (if (featurep 'haiku)
-        (haiku-set-wallpaper file)
-      (let* ((command (wallpaper--find-command))
-             (fmt-spec `((?f . ,(expand-file-name file))
-                         (?h . ,(display-pixel-height))
-                         (?w . ,(display-pixel-width))))
-             (bufname (format " *wallpaper-%s*" (random)))
-             (process
-              (and command
-                   (apply #'start-process "set-wallpaper" bufname
-                          (car command)
-                          (mapcar (lambda (arg) (format-spec arg fmt-spec))
-                                  (cdr command))))))
-        (unless command
-          (error "Can't find a suitable command for setting the wallpaper"))
-        (wallpaper-debug "Using command %s" (car command))
-        (setf (process-sentinel process)
-              (lambda (process status)
-                (unwind-protect
-                    (unless (and (eq (process-status process) 'exit)
-                                 (zerop (process-exit-status process)))
-                      (message "command %S %s: %S" (string-join (process-command process) " ")
-                               (string-replace "\n" "" status)
-                               (with-current-buffer (process-buffer process)
-                                 (string-clean-whitespace (buffer-string)))))
-                  (ignore-errors
-                    (kill-buffer (process-buffer process))))))
-        process))))
+  (cond ((featurep 'haiku)
+         (haiku-set-wallpaper file))
+        (t
+         (let* ((command (wallpaper--find-command))
+                (fmt-spec `((?f . ,(expand-file-name file))
+                            (?h . ,(wallpaper--get-height-or-width
+                                    "height"
+                                    #'display-pixel-height
+                                    wallpaper-default-height))
+                            (?w . ,(wallpaper--get-height-or-width
+                                    "width"
+                                    #'display-pixel-width
+                                    wallpaper-default-width))))
+                (bufname (format " *wallpaper-%s*" (random)))
+                (process
+                 (and command
+                      (apply #'start-process "set-wallpaper" bufname
+                             (car command)
+                             (mapcar (lambda (arg) (format-spec arg fmt-spec))
+                                     (cdr command))))))
+           (unless command
+             (error "Can't find a suitable command for setting the wallpaper"))
+           (wallpaper-debug "Using command %s" (car command))
+           (setf (process-sentinel process)
+                 (lambda (process status)
+                   (unwind-protect
+                       (unless (and (eq (process-status process) 'exit)
+                                    (zerop (process-exit-status process)))
+                         (message "command %S %s: %S" (string-join (process-command process) " ")
+                                  (string-replace "\n" "" status)
+                                  (with-current-buffer (process-buffer process)
+                                    (string-clean-whitespace (buffer-string)))))
+                     (ignore-errors
+                       (kill-buffer (process-buffer process))))))
+           process))))
 
 (provide 'wallpaper)