Urxvt: Ändern Sie die Hintergrundfarbe im laufenden Betrieb

12

Gibt es eine Möglichkeit, die Hintergrundfarbe einer rxvt-Unicode-Sitzung im laufenden Betrieb zu ändern? Wie mit CtrlSchlüssel?

Ich habe eine Reihe von Urxvt-Fenstern und möchte einige dynamisch einfärben, um sie besser unterscheiden zu können. Aber wieder meine ich on the fly ...

dman
quelle
1
Nein, Sie können mit Termite , obwohl ...
Jasonwryan

Antworten:

16

urxvt2.6 im Jahr 2004 wurde die Unterstützung für die dynamische Farbfunktion von xterm hinzugefügt . In XTerm-Steuersequenzen ist dies OSC11. OSC10 legt die Standardtextfarbe fest. Das Änderungsprotokoll erwähnte einen Teil der Änderung:

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 "?".

aber der Quellcode erzählt die Geschichte wie immer:

 /*
  * 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 
  */

Das Handbuch rxvt(7)enthält keine nützlichen Informationen:

   XTerm-Betriebssystembefehle
       ESC] Ps; Pt ST
           Stellen Sie die XTerm-Parameter ein. 8-Bit-ST: 0x9c, 7-Bit-ST-Sequenz: ESC \
           (0x1b, 0x5c) ist auch der abwärtskompatible Terminator BEL (0x07)
           akzeptiert. Jedes Oktett kann durch Präfixieren von SYN (0x16,
           ^ V).

In diesem einfachen Beispiel werden sowohl die Standardfarben für den Vordergrund (Text) als auch für den Hintergrund festgelegt :

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

Ebenso xtermkönnen diese Standardfarben vorübergehend durch "ANSI" -Farben überschrieben werden.

Die Funktion kann bei der xtermVerwendung der dynamicColorsRessource deaktiviert werden . Im Gegensatz xterm, urxvthat für die Funktion keine Ressource-Einstellung.

VTE implementiert die Funktion auch und dokumentiert sie ebenfalls nicht. urxvtZumindest begann mit der Dokumentation von rxvt. Für VTE müssen Sie den Quellcode lesen. Die relevante Funktion in vteseq.ccsieht folgendermaßen aus:

/* 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);
}

Dieser Code stammt aus dem Jahr 2003 (als er in C geschrieben wurde):

commit f39e281529827f68fd0e9bba41785d66a21efc1c
Author: Nalin Dahyabhai <[email protected]>
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).

Weiterführende Literatur:

Thomas Dickey
quelle
Ich habe es nicht versucht, aber es ist so beeindruckend und schwer zu finden, dass ich es akzeptieren werde! Ich hoffe es funktioniert in URXVT.
Dman
1
Ich habe es letzte Nacht mit urxvt 9.15 auf meinem Debian 7 getestet (um sicherzugehen, dass ich die Quelle richtig gelesen habe).
Thomas Dickey
Ich wollte nur darauf eingehen und sagen, dass es wie ein Traum funktioniert. Nochmals vielen Dank, da diese Informationen schwer zu finden wären.
Dman
7

Ich habe meiner ~/.XresourcesDatei Folgendes hinzugefügt , um die Farben im laufenden Betrieb durch Drücken von Ctrlund 7oder 8oder zu ändern 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

Wenn Sie die Vordergrund- und Hintergrundfarbe gleichzeitig einstellen möchten, verketten Sie einfach die Befehle (einige Farben werden durch Namen definiert):

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

Sie können Ihre Farben mit einem einfachen echoBefehl wie diesem testen :

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

Beachtung

Ich habe Code 11 für die Hintergrundfarbe und Code 10 für die Vordergrundfarbe verwendet . Die von Thomas Dickey zitierten Definitionen für Urxvt geben an, stattdessen 49 und 39 zu verwenden (die ich getestet habe und auch arbeite).

erik
quelle
2

Dynamische Farben ist ein Beispiel für das dynamische Umschalten von Farben. Es beginnt mit der Verwendung dieser beiden .Xresources:

xterm*dynamicColors: true urxvt*dynamicColors: on

Trotz des Vorsprungs habe ich bei urxvt keinen Farbwechsel bekommen! Diese Technik funktioniert hervorragend mit xterm. Dynamic Colors nennt diese "OSC-Escape-Sequenzen", die das Terminal verändern. Das Beispiel, um den Hintergrund rot zu machen, lautet:echo -e "\03echo -e "\033]11;#ff0000\007"3]11;#ff0000\007"

rektide
quelle
Für mich ändert sich die Farbe des Hintergrunds zu Rot, wenn ich dies in die Befehlszeile setze:echo -e "\033]11;#ff0000\007"
Eric
2

Ich habe Folgendes in meinen Xresources zum schnellen Umschalten (ja, es basiert auf dynamischen Farben).

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

Sie können hier auch nach einem anderen Ansatz suchen: https://github.com/sos4nt/dynamic-colors

coding_drunk
quelle
1

Ich habe eine Erweiterung namens urxvt-theme geschrieben , die diese Funktionalität rxvt-unicode (mit einem einfachen Kontextmenü) mithilfe von X-Ressourcen und dynamischen Farben hinzufügt.

pera
quelle