From f9b1ee4df0280daab91a103fde4ee3a707d4224c Mon Sep 17 00:00:00 2001 From: Manuel Giraud Date: Wed, 5 Oct 2022 15:59:14 +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'. --- lisp/battery.el | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lisp/battery.el b/lisp/battery.el index 72b3dfdae7..4c83f8a7d3 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -914,6 +914,15 @@ battery-upower ;;; `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,14 @@ battery-bsd-apm %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.37.3