¿Cómo puedo hacer que emacsclient –eval no imprima cosas en un búfer de emacs, sino solo en la línea de comando?

Pregunta:

Así que tengo un truco para que mi org-clock emacs se muestre en polybar (una utilidad del panel del sistema). Se trata de un script que se ve así:

CLOCKSTRING=`emacsclient --eval "(if (org-clocking-p)(print (org-clock-get-clock-string))(print -1))))"`

if [[ $CLOCKSTRING = "-1" ]]
then
        echo "Off-clock!"
else
        echo $CLOCKSTRING | cut -d\" -f2
fi

El problema es que print aparentemente imprime tanto en la salida del comando de la línea de comandos (donde lo quiero) como en un búfer en emacs (donde no lo quiero. Cuando estoy trabajando en emacs, solo veo una ventana emergente que dice la salida de este comando todo el tiempo, es decir, "-1 -1 -1 -1". ¿Cómo consigo que print imprima solo en la línea de comando?

Respuesta:

Cuando Emacsclient evalúa una expresión, se evalúa en un contexto Emacs "normal". La salida estándar va a su destino normal, que es el área de eco. No va a Emacsclient. Lo que ves en Emacsclient es el valor de retorno. Así que suelta la print .

CLOCKSTRING=`emacsclient --eval "(if (org-clocking-p) (org-clock-get-clock-string) -1)"`

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım