Risposte:
urxvt
2.6 nel 2004 ha aggiunto il supporto per la funzione colori dinamici di xterm . Nelle sequenze di controllo XTerm , questo è OSC
11. OSC
10 imposta il colore del testo predefinito. Il log delle modifiche menziona parte del cambiamento:
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 "?".
ma il codice sorgente racconta la storia, come al solito:
/*
* 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
*/
Il manuale rxvt(7)
non fornisce informazioni utili:
Comandi del sistema operativo XTerm "ESC] Ps; Pt ST" Imposta i parametri XTerm. ST a 8 bit: 0x9c, sequenza ST a 7 bit: ESC \ (0x1b, 0x5c), anche la terminazione compatibile con le versioni precedenti BEL (0x07) accettato. qualsiasi ottetto può essere evitato prefissandolo con SYN (0x16, ^ V).
Questo semplice esempio imposta sia i colori predefiniti in primo piano (testo) che quelli di sfondo :
#!/bin/sh
printf '\033]10;red\007'
printf '\033]11;green\007'
Ad esempio xterm
, questi colori predefiniti possono essere temporaneamente sostituiti dai colori "ANSI".
La funzione può essere disabilitata xterm
usando la dynamicColors
risorsa. Diversamente xterm
, urxvt
non ha impostazioni di risorse per la funzione.
VTE implementa anche la funzionalità e allo stesso modo non la documenta. urxvt
almeno iniziato con la documentazione di rxvt
. Per VTE, devi leggere il codice sorgente. La funzionalità pertinente vteseq.cc
è simile alla seguente:
/* 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);
}
Tale codice risale al 2003 (quando è stato scritto in 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).
Ulteriori letture:
Ho aggiunto quanto segue al mio ~/.Xresources
file per cambiare i colori al volo premendo Ctrle 7o 8o 9.
! change to red 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
Se vuoi impostare il colore di primo piano e di sfondo contemporaneamente, concatena i comandi (alcuni colori sono definiti dai nomi):
! change to red background
URxvt.keysym.C-7: command:\033]11;#ff0000\007\033]10;yellow\007
Puoi testare i tuoi colori con un semplice echo
comando, come questo:
echo -e '\033]11;#ff0000\007\033]10;yellow\007' # changes to red background and yellow foreground
Ho usato il codice 11 per il colore di sfondo e il codice 10 per il colore di primo piano . Le definizioni di Urxvt citate da Thomas Dickey indicano invece di usare 49 e 39 (che ho testato e che lavoro anche).
Dynamic Colours è un esempio di cambio dinamico dei colori. Inizia con l'utilizzo di questi due .Xresources:
xterm*dynamicColors: true
urxvt*dynamicColors: on
Nonostante il vantaggio, però, non ho cambiato colore lavorando con urxvt! Questa tecnica funziona alla grande con xterm. Dynamic Colours chiama queste "sequenze di escape OSC" che modificano il terminale, l'esempio per rendere rosso lo sfondo è:echo -e "\03echo -e "\033]11;#ff0000\007"3]11;#ff0000\007"
echo -e "\033]11;#ff0000\007"
Ho i seguenti contenuti nelle mie Xresources per passare rapidamente (sì, si basa su colori dinamici).
URxvt*keysym.Control-Shift-F10: command:\033]11;#2c2c2c\007\033]10;#dcdcdc\007\033]12;#dcdcdc\007\033]4;0;#3f3f3f\007\033]4;1;#705050\007\033]4;2;#60b48a\007\033]4;3;#dfaf8f\007\033]4;4;#9ab8d7\007\033]4;5;#dc8cc3\007\033]4;6;#8cd0d3\007\033]4;7;#dcdcdc\007\033]4;8;#709080\007\033]4;9;#dca3a3\007\033]4;10;#72d5a3\007\033]4;11;#f0dfaf\007\033]4;12;#94bff3\007\033]4;13;#ec93d3\007\033]4;14;#93e0e3\007\033]4;15;#ffffff\007
URxvt*keysym.Control-Shift-F11: command:\033]11;#000000\007\033]10;#ffffff\007\033]12;#ffffff\007\033]4;0;#000000\007\033]4;1;#cc0000\007\033]4;2;#4e9a06\007\033]4;3;#c4a000\007\033]4;4;#3465a4\007\033]4;5;#75507b\007\033]4;6;#06989a\007\033]4;7;#d3d7cf\007\033]4;8;#555753\007\033]4;9;#ef2929\007\033]4;10;#8ae234\007\033]4;11;#fce94f\007\033]4;12;#729fcf\007\033]4;13;#ad7fa8\007\033]4;14;#34e2e2\007\033]4;15;#eeeeec\007
URxvt*keysym.Control-Shift-F12: command:\033]11;#000000\007\033]10;#a9a9a9\007\033]12;#a9a9a9\007\033]4;0;#000000\007\033]4;1;#cc0000\007\033]4;2;#00cc00\007\033]4;3;#cccc00\007\033]4;4;#0000cc\007\033]4;5;#cc00cc\007\033]4;6;#00cccc\007\033]4;7;#cccccc\007\033]4;8;#555555\007\033]4;9;#ff0000\007\033]4;10;#00ff00\007\033]4;11;#ffff00\007\033]4;12;#0000ff\007\033]4;13;#ff00ff\007\033]4;14;#00ffff\007\033]4;15;#ffffff\007
Puoi anche dare un'occhiata a un altro approccio qui: https://github.com/sos4nt/dynamic-colors
Ho scritto un'estensione chiamata urxvt-theme che aggiunge questa funzionalità a rxvt-unicode (con un semplice menu contestuale) usando risorse X e colori dinamici.