From 07b2e9b9092df57f454386e54491420fb4b5f303 Mon Sep 17 00:00:00 2001 From: Manuel Giraud Date: Thu, 6 Oct 2022 14:46:39 +0200 Subject: [PATCH] Fix BSD battery mode over TRAMP (bug#58307) * lisp/battery.el (battery--call-process-to-string): Simple wrapper to `call-process' that outputs to a string. (battery-bsd-apm): Use it instead of `shell-command-to-string' (bug#58307). --- lisp/battery.el | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lisp/battery.el b/lisp/battery.el index 72b3dfdae7c..a874f0640e6 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -914,6 +914,15 @@ The following %-sequences are provided: ;;; `apm' interface for BSD. +;; This function is a wrapper on `call-process' that return the +;; standard output in a string. We are using it instead +;; `shell-command-to-string' because this last one is trying to run +;; PROGRAM on the remote host if the buffer is remote. +(defun battery--call-process-to-string (program &rest args) + (with-output-to-string + (with-current-buffer standard-output + (apply #'call-process program nil t nil args)))) + (defun battery-bsd-apm () "Get APM status information from BSD apm binary. The following %-sequences are provided: @@ -929,13 +938,16 @@ The following %-sequences are provided: %t Remaining time (to charge or discharge) in the form `h:min'" (let* ((os-name (car (split-string ;; FIXME: Can't we use something like `system-type'? - (shell-command-to-string "/usr/bin/uname")))) + (battery--call-process-to-string + (executable-find "uname"))))) (apm-flag (pcase os-name ("OpenBSD" "mP") ("FreeBSD" "st") (_ "ms"))) - (apm-cmd (concat "/usr/sbin/apm -abl" apm-flag)) - (apm-output (split-string (shell-command-to-string apm-cmd))) + (apm-args (concat "-abl" apm-flag)) + (apm-output (split-string + (battery--call-process-to-string + (executable-find "apm") apm-args))) (indices (pcase os-name ;; FreeBSD's manpage documents that multiple ;; outputs are ordered by "the order in which -- 2.39.2