diff options
author | Stefan Kangas <stefankangas@gmail.com> | 2022-09-14 10:52:39 +0200 |
---|---|---|
committer | Stefan Kangas <stefankangas@gmail.com> | 2022-09-14 11:00:29 +0200 |
commit | bfafe4aacceb213fbfd7d92bfd6362a13cbdc667 (patch) | |
tree | 78ddc18f404b819d6afea3a15628dd07c76ce51a /lisp/image/wallpaper.el | |
parent | ac479598f127b02d34f8c2f784386462605a4ba7 (diff) | |
download | emacs-bfafe4aacceb213fbfd7d92bfd6362a13cbdc667.tar.gz emacs-bfafe4aacceb213fbfd7d92bfd6362a13cbdc667.tar.bz2 emacs-bfafe4aacceb213fbfd7d92bfd6362a13cbdc667.zip |
Allow setting wallpaper from TTY
* 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.
Diffstat (limited to 'lisp/image/wallpaper.el')
-rw-r--r-- | lisp/image/wallpaper.el | 79 |
1 files changed, 50 insertions, 29 deletions
diff --git a/lisp/image/wallpaper.el b/lisp/image/wallpaper.el index 1e921dc2c4c..a2b51d68d7a 100644 --- a/lisp/image/wallpaper.el +++ b/lisp/image/wallpaper.el @@ -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) |