En general, obtener los colores actuales es imposible. El procesamiento de la secuencia de control de un terminal ocurre "dentro" del terminal, donde sea que esté. Con un emulador de terminal como xterm
el integrado en un núcleo del sistema operativo que proporciona los terminales virtuales del núcleo, el estado interno del emulador, incluida su noción de la "representación gráfica" actual (es decir, color y atributos), está en la máquina en sí mismo y es teóricamente accesible. Pero para un terminal real, esta información está en alguna ubicación de RAM en una máquina físicamente separada conectada a través de un enlace en serie.
Dicho esto, algunos terminales incluyen un mecanismo para leer dicha información como parte de su protocolo de terminal, que se envía a través de ese enlace en serie. Proporcionan secuencias de control que un programa puede enviar al terminal, lo que hace que envíe información sobre su estado interno, como entrada del terminal. mikeserv
le ha mostrado las secuencias de control a las que xterm
responde el emulador de terminal. Pero estos son específicos de xterm
. Los emuladores de terminal integrados en el núcleo de Linux y los diversos núcleos BSD son tipos de terminales diferentes, por ejemplo, y no implementan ninguna secuencia de control de este tipo. Lo mismo ocurre con familias enteras de terminales reales.
Los terminales DEC VT525 implementan un mecanismo de lectura, pero tienen un conjunto de secuencias de control que no guardan relación con las utilizadas por xterm
. Uno envía la secuencia DECRQSS (Solicitar selección o configuración) para solicitar la representación gráfica actual, y el terminal responde enviando el DECRPSS (Selección o configuración de informe). Específicamente:
- El host envía: DCS
$
q
m
ST (DECRQSS con la parte de función de control de SGR como configuración)
- El terminal responde: DCS
0
$
r
0
;
3
3
;
4
4
m
ST (DECRPSS con los parámetros y la función de control parte de una secuencia de control SGR que establece los colores actuales de primer plano y fondo)
Por supuesto, una lectura cuidadosa de su pregunta revela que está agitando una banana cubierta de chocolate en esos sistemas monetarios europeos nuevamente. Lo que realmente está tratando de hacer, para lo cual seleccionó una solución y luego le preguntó cómo hacer parte de esa solución, es preservar el estado anterior mientras escribe algunos resultados coloreados. No solo hay una secuencia de control DEC VT para hacer esto, también hay una secuencia de terminal de consola SCO que es reconocida por xterm
varios emuladores de terminal incorporados en el kernel y una entrada termcap / terminfo que le dice cuáles son para su terminal.
Las entradas de termcap son sc
y rc
. Las entradas terminfo son save_cursor
y restore_cursor
. Los nombres son algo engañosos en cuanto a su efecto (aunque actúan como una advertencia de que confía en algo que es de facto en lugar de jure ). Las secuencias de control reales de DECSC, DECRC, SCOSC y SCORC también guardan y restauran la representación gráfica actual.
Dado que el artículo al que apuntó se trata de generar secuencias de control a partir de scripts de shell, el comando que está buscando ahora es tput
.
Otras lecturas
echotc Co
oechoti colors
, pero simplemente no hay una variable que almacene la definición actual del código de color.