Mostrar algo en la línea de modo activo en lugar de todas las líneas de modo


10

Configuré un indicador de temporizador de organización en la línea de modo con esto.

(setq-default
 mode-line-format
 (quote
  (
   ;; org-timer
   (:eval
    (unless (not org-timer-countdown-timer)
      (propertize (let* ((rtime (decode-time
                                 (time-subtract
                                  (timer--time org-timer-countdown-timer)
                                  (current-time))))
                         (rmins (nth 1 rtime))
                         (rsecs (nth 0 rtime)))
                    (format "🕔 %d:%d" rmins rsecs))
                  'face '(:foreground "cyan" :weight bold)
                  'help-echo "org-timer")))

   )))

Quiero que este indicador de temporizador de organización se muestre solo en la línea del modo activo , en lugar de todas las líneas del modo. ¿Cómo hacerlo?



@lawlist No puedo entender tu código. No sé cómo presentar una solicitud en mi caso.
stardiviner

1
El redisplaymotor puede verificar cada ventana bajo ciertas circunstancias (p. Ej., Cuando la línea de modo se actualiza naturalmente o cuando se ve obligada a actualizar). Cuando mode-line-formatcontiene la función (selected-window), se devolverá una ventana diferente a medida que la pantalla vuelve a visitar las distintas ventanas. Ese valor se puede comparar con un valor pregrabado, por ejemplo, post-command-hookse puede usar para registrar el último conocido selected-windowy ese valor se puede comparar más tarde con una función dentro de mode-line-format. Entonces, uso el PCH para grabar / almacenar el selected-window.
leyes

@lawlist He revisado su código, pero no he encontrado un uso general para mi caso. Si cambio a otra cosa en lugar de org-timer. ¿Qué tengo que hacer? Espero una forma más general. Incluso eso me inspiró. ¿Me puede dar más ejemplo de código exactamente? Porque lo encontré configurado diferente 'face, pero necesito cambiar la cadena de visualización.
stardiviner

No he intentado esto, pero esta pregunta es similar a esta: emacs.stackexchange.com/q/13842/115
Kaushal Modi

Respuestas:


7

En el siguiente ejemplo, la palabra "ACTIVO" aparecerá en la línea de modo de la ventana que está activa, y todas las demás ventanas mostrarán la palabra "INACTIVO" en la línea de modo.

Asegúrese de probar este ejemplo con emacs -Qpara verificar que funciona como se anuncia. A partir de entonces, personalícelo según sea necesario.

Agregue ganchos adicionales según sea necesario para llamar ml-update-all.

(defvar ml-selected-window nil)

(defun ml-record-selected-window ()
  (setq ml-selected-window (selected-window)))

(defun ml-update-all ()
  (force-mode-line-update t))

(add-hook 'post-command-hook 'ml-record-selected-window)

(add-hook 'buffer-list-update-hook 'ml-update-all)

(setq-default mode-line-format
  '(:eval
      (if (eq ml-selected-window (selected-window))
        "ACTIVE"
        "INACTIVE")))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.