Agregar formato condicional a la línea de estado en la pantalla GNU

2

En la pantalla de GNU en el estado es posible poner cosas condicionales, como

%?%F%{+b r}%:%{+b b}%?

% F es la prueba; si es verdadero, activa el formato de negrita rojo% {+ br}, mientras que si es falso, activa el formato de negrita azul% {+ bb}.

Las declaraciones condicionales como esta con% F (que prueba el foco) son las únicas que he visto en ejemplos de archivos .screenrc o en el manual de la pantalla.

¿Qué otras declaraciones condicionales se pueden usar? El manual dice:
"¿la parte del próximo '%?' se muestra solo si un escape '%' dentro de la parte se expande a una cadena no vacía ", lo cual es un poco confuso. ¿Puedo, por ejemplo, cambiar el color según la hora del día o el día de la semana?

Gracias

simonb
fuente

Respuestas:

2

Cree un script que muestre algo cuando la condición sea verdadera. Este ejemplo generará un espacio cuando el tiempo sea entre las 9 AM y las 4:59 PM.

#!/bin/bash
time=$(date +%H)
if (( time >= 9 && time <= 16 ))
then
    echo " "
fi

Guarda este script. Vamos a llamarlo "screenbtdaytime". Además, hazlo chmod u+x screenbtdaytime(o +xsin uhacerlo para que sea universalmente ejecutable).

Para hacer una demostración de esto, use esta línea en lugar de la ifanterior para que el cambio ocurra cada 10 segundos y no tenga que esperar todo el día para ver el efecto:

if (( $(date +%s) / 10 % 2 ))    # temporary for demo

Ahora screenpresione Ctrl-a y : para abrir el símbolo del sistema y escriba estos dos comandos:

backtick 1 0 1 /path/to/screenbttime
caption always "%?%{+b by}%1`%:%{+b yb} %?%C | %D, %M %d, %Y"

Puede usar en hardstatuslugar de captionsi lo prefiere, creo.

Cambiar 0a 60en el backtickcomando hará que las actualizaciones sucedan una vez por minuto en lugar de a la velocidad predeterminada.

Esto asigna la secuencia de comandos al comando de retroceso 1 (el primer "1") que se utiliza en el título donde se ve %1`. Puede tener otros comandos asociados con otros números para que pueda tener varias cosas sucediendo.

Dado que el script genera un espacio durante el tiempo designado, activa el condicional %?que está configurado para generar códigos de color para texto azul sobre fondo amarillo. La parte "else" ( %:) se realiza cuando no hay salida del script y los colores son amarillos sobre un fondo azul. Se agrega un espacio adicional en el "else" para que coincida visualmente con el que se muestra como la salida del script.

Dennis Williamson
fuente
Fantástico, muchas gracias. De hecho, también funciona en la línea hardstatus.
simonb