Urxvt: cambia el color de background sobre la marcha

¿Existe la posibilidad de cambiar el color de background de una session rxvt-unicode sobre la marcha? Al igual que con la tecla Ctrl ?

Tengo un montón de windows de Urxvt y me gustaría colorear algunas de forma dinámica para ayudarme a distinguirlas. Pero otra vez, quiero decir sobre la marcha …

urxvt 2.6 en 2004 añadió soporte para la function de colors dynamics de xterm. En XTerm Control Sequences , esto es OSC 11. OSC 10 establece el color de text pnetworkingeterminado. El logging de cambios menciona parte del cambio:

 2.6 Fri Apr 2 03:24:10 CEST 2004 - minor doc corrections. - WARNING: changed menu sequence from ESC ] 10 to ESC ] 703 to avoid clashes with xterm. - changed OSC701/OSC702 sequence to return standard escaped reports. - xterm-compat: make set window colour and other requests report window colour when arg is "?". 

pero el código fuente count la historia, como de costumbre:

  /* * XTerm escape sequences: ESC ] Ps;Pt (ST|BEL) * 0 = change iconName/title * 1 = change iconName * 2 = change title * 4 = change color + * 10 = change fg color + * 11 = change bg color * 12 = change text color * 13 = change mouse foreground color * 17 = change highlight character colour @@ -2949,20 +3236,21 @@ * 50 = change font * * rxvt extensions: - * 10 = menu (may change in future) * 20 = bg pixmap * 39 = change default fg color * 49 = change default bg color * 55 = dump scrollback buffer and all of screen * 701 = change locale * 702 = find font + * 703 = menu */ 

El manual rxvt(7) no proporciona información útil:

    Comandos del sistema operativo XTerm
        "ESC] Ps; Pt ST"
            Establecer los parameters de XTerm.  8 bits ST: 0x9c, 7 bits secuencia ST: ESC \
            (0x1b, 0x5c), el terminador compatible hacia atrás BEL (0x07) también
            aceptado.  cualquier octeto se puede escaping prefijándolo con SYN (0x16,
            ^ V).

Este sencillo ejemplo establece los colors pnetworkingeterminados de primer plano (text) y de background:

 #!/bin/sh printf '\033]10;networking\007' printf '\033]11;green\007' 

Al igual que xterm , estos colors pnetworkingeterminados pueden anularse temporalmente mediante colors "ANSI".

La característica se puede desactivar en xterm utilizando el recurso dynamicColors . A diferencia de xterm , urxvt no tiene ninguna configuration de resources para la function.

VTE también implementa la function y, asimismo, no la documenta. urxvt al less comenzó con la documentation de rxvt . Para VTE, debe leer el código fuente. La característica relevante en vteseq.cc tiene este aspecto:

 /* Change the default background cursor, BEL terminated */ static void vte_sequence_handler_change_background_color_bel (VteTerminalPrivate *that, GValueArray *params) { vte_sequence_handler_change_special_color_internal (that, params, VTE_DEFAULT_BG, -1, 11, BEL); } /* Change the default background cursor, ST terminated */ static void vte_sequence_handler_change_background_color_st (VteTerminalPrivate *that, GValueArray *params) { vte_sequence_handler_change_special_color_internal (that, params, VTE_DEFAULT_BG, -1, 11, ST); } 

Ese código data de algún momento en 2003 (cuando fue escrito en C):

 commit f39e281529827f68fd0e9bba41785d66a21efc1c Author: Nalin Dahyabhai <nalin@src.gnome.org> Date: Wed Jan 22 21:35:22 2003 +0000 accept OSC{number};{string}ST as set-text-parameters, per XTerm docs (part * src/caps.c: accept OSC{number};{string}ST as set-text-parameters, per XTerm docs (part of #104154). * src/keymap.c: revert change to prepend "1;" to keys with modifiers (#104139). 

Otras lecturas:

  • ¿Puedo establecer un color por su número? (Preguntas frecuentes xterm)

Dynamic Colors es un ejemplo de cambio dynamic de colors. Comienza con el uso de estos dos .Xresources:

xterm*dynamicColors: true urxvt*dynamicColors: on

¡A pesar de la ventaja, no he cambiado de color trabajando con urxvt! Esta técnica funciona muy bien con xterm. Dynamic Colors llama a estas "secuencias de escape OSC" que alteran el terminal, el ejemplo para hacer que el background sea rojo es: echo -e "\03echo -e "\033]11;#ff0000\007"3]11;#ff0000\007"

~/.Xresources siguiente a mi file ~/.Xresources para cambiar a colors sobre la marcha presionando Ctrl y 7 u 8 o 9 .

 ! change to networking background URxvt.keysym.C-7: command:\033]11;#ff0000\007 ! change to light background URxvt.keysym.C-8: command:\033]11;#ffffff\007 ! change to dark gray background URxvt.keysym.C-9: command:\033]11;#777777\007 

Si desea establecer el color de primer plano y de background al mismo time, simplemente concatenar los commands (algunos colors se definen por nombres):

 ! change to networking background URxvt.keysym.C-7: command:\033]11;#ff0000\007\033]10;yellow\007 

Puedes probar tus colors con un simple command de echo , como este:

 echo -e '\033]11;#ff0000\007\033]10;yellow\007' # changes to networking background and yellow foreground 

Atención

Usé el código 11 para el color de background y el código 10 para el color de primer plano . Las definiciones de Urxvt citadas por Thomas Dickey indican usar 49 y 39 en su lugar (que probé y también funcionó).