¿Mostrar la información de la batería solo cuando está desconectado?

8

display-battery-mode muestra información de la batería, pero solo quiero usarla cuando mi computadora está desconectada y se está agotando la batería.

  1. ¿Hay alguna manera de configurar el modo de visualización de acuerdo con el modo de fuente de alimentación?

  2. ¿También puedo obtener la temperatura informada en la línea de modelo?

Mella
fuente

Respuestas:

6

No estoy seguro de si puedes hacer eso con el incorporado display-battery-mode. No es muy personalizable a este respecto, y es posible que tenga que recurrir a consejos pesados ​​para cambiar el modo incorporado a su gusto.

Escribí fancy-battery.el hace algún tiempo para proporcionar un indicador más personalizable para el estado de la batería. En particular, quería indicar el estado de la batería con colores, pero el paquete es lo suficientemente flexible como para permitir su caso de uso, cambiando en fancy-battery-mode-lineconsecuencia:

(setq fancy-battery-mode-line
      '(:eval (unless (equal (cdr (assq ?b fancy-battery-last-status)) "+")
                (fancy-battery-default-mode-line))))

No pregunte, el estado proviene de battery.el, que tiene una API horrible. Solo confía en mí, ese ?bes el estado de la batería e "+"indica que se está cargando, al menos para la mayoría de los backends.

Esta configuración mostrará el estado de la batería, pero solo si la batería se está descargando. Para usar otro formato, escriba su propia función para reemplazar fancy-battery-default-mode-line. Siéntase libre de tomar el mío como inspiración.

En cuanto a la temperatura, puede tener suerte con un backend diferente. Eche un vistazo a los backends existentes battery.el, busque uno que incluya la temperatura de la batería e intente cumplir sus requisitos. Sin embargo, battery.elgeneralmente tiene éxito en elegir el mejor backend para su sistema, por lo que es muy probable que su hardware simplemente no informe la temperatura de la batería o que su sistema operativo no lo admita adecuadamente.

Lunaryorn
fuente
2

Puede lograr esto aconsejando battery-update, la función que realmente actualiza la línea de modo para mostrar el estado de la batería. El consejo verifica si la batería se está cargando actualmente, en cuyo caso llama battery-updatecon battery-mode-line-formatenlazado nil(lo que en realidad oculta la información de la batería), de lo contrario battery-updatese llama con un valor sin cambios debattery-mode-line-format

(defun my-skip-battery-display-if-charging (original-func)
  (let ((battery-mode-line-format (unless (string= (downcase (cdr (assoc ?B (funcall battery-status-function)))) "charging")
                                    battery-mode-line-format)))
          (funcall original-func)))

(advice-add 'battery-update :around #'my-skip-battery-display-if-charging)

El consejo es un poco torpe, ya que llamamos battery-status-functionuna vez, mientras que la buffer-updatefunción ya llama a esa función una vez, así que estamos haciendo una llamada de función adicional, pero esto es lo que se me ocurre.

Iqbal Ansari
fuente