Urxvt: cambia il colore di sfondo al volo


12

È possibile cambiare al volo il colore di sfondo di una sessione rxvt-unicode? Come con la Ctrlchiave?

Ho un sacco di finestre Urxvt e vorrei colorarne alcune in modo dinamico per aiutarmi a distinguerle. Ma di nuovo, intendo al volo ...


1
No. Puoi
farlo

Risposte:


16

urxvt2.6 nel 2004 ha aggiunto il supporto per la funzione colori dinamici di xterm . Nelle sequenze di controllo XTerm , questo è OSC11. OSC10 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 xtermusando la dynamicColorsrisorsa. Diversamente xterm, urxvtnon ha impostazioni di risorse per la funzione.

VTE implementa anche la funzionalità e allo stesso modo non la documenta. urxvtalmeno 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:


Non l'ho provato ma è così impressionante e difficile da trovare che lo accetterò! Spero che funzioni in URXVT.
Dman,

1
L'ho provato ieri sera con urxvt 9.15 sul mio Debian 7 (per essere sicuro che stavo leggendo correttamente la fonte).
Thomas Dickey,

Volevo solo dare seguito a questo e dire che funziona come un sogno. Grazie ancora perché questa informazione sarebbe difficile da trovare.
dman

7

Ho aggiunto quanto segue al mio ~/.Xresourcesfile 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 echocomando, come questo:

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

Attenzione

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).


2

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"


Per me il colore dello sfondo diventa rosso se lo inserisco nella riga di comando:echo -e "\033]11;#ff0000\007"
erik

2

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


1

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.