¿Cómo agregar una cadena que se actualiza a la línea de modo?

9

Me gustaría agregar alguna información (que cambia con el tiempo) al formato de línea de modo y luego usarla en el título.

Mi pensamiento es que una vez por minuto establecería el formato del título del cuadro para que sea el del modo-línea-formato + recuento de pomodoro.

Algo en la línea de:

(defun runOnceAMinute ()
   (setq frame-title-format (concat mode-line-format my/PomodoroCount))
)

Pero no puedo entender cómo.

EDITAR
Necesitaría actualizar la cadena que agrego. Por ejemplo, la cuenta de pomodoro se incrementaría después de cada pomodoro.

EDITAR 2
Lo hice funcionar editando la mode-line-formatvariable y usando la construcción eval:

("%e" ......... "[Pomodorors: " (:eval (number-to-string my/pomCount)) "]") 

Esta no es la respuesta original de Drew, pero Drew lo mencionó en su comentario.

Leo Ufimtsev
fuente
1
mode-line-formatse ha simplificado en los últimos años a (más o menos) solo una pequeña lista de otras variables; por lo que normalmente modificaría una de esas variables secundarias (o algún descendiente adicional), en lugar de mode-line-formatsí misma. Vea C-h v mode-line-formaty, de manera similar, C-h vcualquiera de las variables componentes sobre las que desea aprender.
phils
Eso está bastante cerca de lo que quiero. Edité la línea de modo: (..... "HI" )y esto aparece. Pero si quiero imprimir un número entero, ¿no aparece? (.... (number-to-string my/count)) alguna idea de por qué?
Leo Ufimtsev
1
Lea C-h v mode-line-formatatentamente: describe el comportamiento de las diferentes construcciones que puede usar, y es un poco complicado. Para obtener más detalles, consulte el manual:C-h i g (elisp) Mode Line Format
phils
Leí el documental, pero parece que no puedo entender cómo agregar un número entero a la lista.
Leo Ufimtsev
Uso doom-modeline, agrego un segmento de pomodoro como este:(defun my-eval-string (string) "Evaluate elisp code stored in a string." (eval (car (read-from-string string)))) ;; pomodoro (doom-modeline-def-segment pomodoro "pomodoro segment" (my-eval-string "pomodoro-mode-line-string"))
HelloNewWorld

Respuestas:

6

Añádelo a global-mode-string. Si su cadena de formato de línea de modo para agregar es my-stringentonces:

(setq global-mode-string
      (cond ((consp global-mode-string)
             (add-to-list 'global-mode-string my-string 'APPEND))
            ((not global-mode-string)
             (list my-string))
            ((stringp global-mode-string)
             (list global-mode-string my-string))))

[Si en cambio quería pre Pend a global-mode-stringcontinuación, se eliminaría el 'APPENDargumento opcional e invertir el orden de la última lista: (list my-string global-mode-string).]

Dibujó
fuente
FWIW, hoy en día también existe mode-line-misc-info(que tiene global-mode-stringcomo miembro por defecto).
phils
1
@phils: Sí, lo hay. No cambia mi respuesta, pero hay espacio para muchas otras respuestas. ;-) Hay varias formas de desollar este gato.
Dibujó
Hola, esto está muy cerca de lo que quiero :-). Creo que no hice la pregunta correctamente. Una vez que agregué el recuento de pomodoro, ¿cómo actualizo ese número? Cada vez que llamo a esa función, agrega más cosas a la línea de modo.
Leo Ufimtsev
Luego, en lugar de agregar una cadena constante a global-mode-string, use (:eval.... Esa es realmente una pregunta diferente.
Dibujó
@Drew, intenté (..... (:eval (number-to-string my/pc))) con mi / pc como un número entero que configuré de antemano . Pero el número no se muestra en la línea de modo?
Leo Ufimtsev
2
(setq-default mode-line-misc-info "My Text Goes Here")

Debe agregar los datos anteriores a su línea de modo.

Bret Weinraub
fuente