Zufällig habe ich das Konfigurations-Wiki für gefunden mintty
. Es enthält viele großartige Vorschläge, unter anderem, wie Sie verschiedene Optionen mithilfe von Escape-Sequenzen festlegen, für die es bestimmt ist xterm
. Dies funktioniert also, indem Sie die Konfiguration nicht erneut lesen, sondern Escape-Sequenzen interpretieren, um die vorhandene Farbauswahl zu überschreiben.
Wir können dies von URxvt aus verwenden, indem wir einen Schlüssel an eine lange Befehlskette binden, die jeweils eine der 16 Standardfarben ändert.
Zum Beispiel alt+ctrl+l
ändere ich hier jede Farbe auf C0C0C0:
# This stupidly changes every color to grey.
URxvt.keysym.M-C-l: command:\033]11;#C0C0C0\007\033]10;#C0C0C0\007\033]4;0;#C0C0C0\007\033]4;1;#C0C0C0\007\033]4;2;#C0C0C0\007\033]4;3;#C0C0C0\007\033]4;4;#C0C0C0\007\033]4;5;#C0C0C0\007\033]4;6;#C0C0C0\007\033]4;7;#C0C0C0\007\033]4;8;#C0C0C0\007\033]4;9;#C0C0C0\007\033]4;10;#C0C0C0\007\033]4;11;#C0C0C0\007\033]4;12;#C0C0C0\007\033]4;13;#C0C0C0\007\033]4;14;#C0C0C0\007\033]4;15;#C0C0C0\007
Perl Plugin
Ich habe es "funktioniert" aber nicht wirklich, denn es scheint, dass es einen grundlegenden Unterschied zwischen Ressourcen gibt, die als definiert werden
URxvt.keysym.M-1: command:\033].......
und jeder Versuch, dasselbe mit $term->cmd_parse()
.
Gibt es etwas, das dagegen unternommen werden kann? Bisher habe ich ganze helle und dunkle Farbsets mit (sehr langen) Escape-Sequenzen fest codiert:
URxvt.keysym.M-C-l: command:\033]4;12;#72729F9FCFCF\007\033]4;1;#CCCC00000000\007\033]4;15;#EEEEEEEEECEC\007\033]4;14;#3434E2E2E2E2\007\033]4;5;#757550507B7B\007\033]4;3;#C4C4A0A00000\007\033]4;7;#D3D3D7D7CFCF\007\033]4;4;#34346565A4A4\007\033]4;10;#8A8AE2E23434\007\033]4;13;#ADAD7F7FA8A8\007\033]4;8;#555557575353\007\033]11;#FFFFFFFFFFFF\007\033]4;9;#EFEF29292929\007\033]4;2;#4E4E9A9A0606\007\033]4;0;#2E2E34343636\007\033]4;11;#FCFCE9E94F4F\007\033]10;#000000000000\007\033]4;6;#060698209A9A\007
URxvt.keysym.M-C-d: command:\033]4;12;#9090FF\007\033]4;1;#AA0000\007\033]4;15;#FFFFFF\007\033]4;14;#55FFFF\007\033]4;5;#AA00AA\007\033]4;3;#AA5500\007\033]4;7;#AAAAAA\007\033]4;10;#55FF55\007\033]4;13;#FF55FF\007\033]4;4;#0000AD\007\033]4;8;#555555\007\033]11;#000000\007\033]4;9;#FF5555\007\033]4;2;#00AA00\007\033]\007\033]4;0;#000000\007\033]4;11;#FFFF55\007\033]10;#00FF00\007\033]5;0;#00FF00\007\033]4;6;#00AAAA\007
Dies funktioniert genau so, wie ich es mir erhofft hatte und kann zur Laufzeit umgeschaltet werden. Ich markiere dies als beantwortet, aber warum kann dies nicht dynamisch von Perl aus durchgeführt werden? Hier ist, was ich bis jetzt habe, ich bin kein großartiger Perl-Programmierer, also entschuldigen Sie bitte den zweifellos schlechten Stil.
Hoffentlich kann sich jemand auf das Problem einlassen. Dies wird ein schönes Plugin sein. Upstream ist bei Github .
#! /usr/bin/env perl -w
# Author: John Tyree
# Website: http://github.com/johntyree/urxvt-perls/blob/master/rotate-colors
# License: CCBYNC
# Use keyboard shortcuts to load colors of the form *.colorN:XXXXXX from a file
# This gives us "on demand" theme switching.
# Usage: put the following lines in your .Xdefaults/.Xresources:
# URxvt.perl-ext-common: ...,rotate-colors
# URxvt.colorFiles: ~/.Xresources,~/light.txt,~/dark.txt
# URxvt.keysym.M-C-n: perl:rotate-colors:forward
# URxvt.keysym.M-C-p: perl:rotate-colors:backward
use strict;
sub on_start {
my ($self) = @_;
$self->{current_index} = -1;
my @arr = split(/,/, $self->x_resource('colorFiles') || '');
$self->{color_files} = \@arr;
()
}
sub read_colors {
my $fn = shift;
open my $fin, $fn or print STDERR "Unable to open $fn for reading";
my %colors;
while (my $line = <$fin>) {
if ($line =~ /(\w+)\s*:\s*(#[0-9a-fA-F]+)/) {
$colors{$1} = $2;
}
}
return %colors
}
sub escape_seq {
my ($k, $v) = @_;
my $cmd = "";
if ($k =~ /^color(\d+)$/) {
$cmd = "4;$1;$v";
} elsif ($k =~ /^colorBD$/) {
$cmd = "5;0;$v";
} elsif ($k =~ /^colorUL$/) {
$cmd = "5;1;$v";
} elsif ($k =~ /^colorBL$/) {
$cmd = "5;2;$v";
} elsif ($k =~ /^colorRV$/) {
$cmd = "5;3;$v";
} elsif ($k =~ /^foreground$/) {
$cmd = "10;$v";
} elsif ($k =~ /^background$/) {
$cmd = "11;$v";
} elsif ($k =~ /^cursorColor$/) {
$cmd = "12;$v";
} elsif ($k =~ /^pointerColor$/) {
$cmd = "13;$v";
}
return "\033]".$cmd."\007"
}
sub build_cmd {
my $fn = shift;
my %colors = read_colors($fn);
my $s = join("", map {escape_seq($_, $colors{$_})} keys %colors);
return $s # was implicit anyway
}
sub on_user_command {
my ($self, $cmd) = @_;
my @fs = @{$self->{color_files}};
my $len = @fs;
if ($cmd eq "rotate-colors:forward") {
my $idx = $self->{current_index}++;
my $fn = $fs[$idx % scalar(@fs)];
$self->cmd_parse(build_cmd($fn));
} elsif ($cmd eq "rotate-colors:backward") {
my $idx = $self->{current_index}--;
my $fn = $fs[$idx % scalar(@fs)];
$self->cmd_parse(build_cmd($fn));
}
()
}
$s
da ist.Ich habe eine Perl-Erweiterung erstellt, die beim Empfang von SIGUSR1 die urxvt-Konfiguration neu lädt: https://github.com/regnarg/urxvt-config-reload
Derzeit wird nur das Neuladen der Farbkonfiguration unterstützt, aber andere Dinge (z. B. Schriftarten) können problemlos hinzugefügt werden. Fehler als Github-Probleme melden.
quelle
Das folgende Skript kann mit URxvt (oder einem anderen Terminal, das XTerm OSC-Escape-Sequenzen unterstützt) verwendet werden, um das Farbschema im laufenden Betrieb zu ändern. Es akzeptiert .Xresources-Definitionen als Eingabe und gibt die Escape-Sequenzen aus. Durch einfaches Ausführen des Skripts im Terminal und Einfügen eines Farbschemas wird die Farbpalette geändert. Dies ist hilfreich, um verschiedene Schemata schnell auszuprobieren.
Shell - Umleitung kann auch verwendet werden:
~/bin/term-recolor < .Xdefaults.solarized.dark
.quelle
Die Konfiguration wird einmal in der Lebensdauer eines urxvtd-Prozesses oder eines eigenständigen urxvt gelesen. Es ist nicht möglich, die Konfiguration neu zu laden und die Effekte in einer bereits laufenden Instanz des Programms auszuführen. Es gibt Ausnahmen zu dieser Regel, wenn es um einige Schriftart- und Gebietsschemaeinstellungen geht.
Sie können zum entsprechenden Abschnitt in Ihrem Terminal scrollen. Hier finden Sie einige relevante FAQs
Das bedeutet, dass ich die Terminal-Binärdatei neu lade.
Ich denke, das bedeutet "wenn Sie die Anwendung starten".
Sie können festlegen, dass bestimmter Text in einer bestimmten Farbe angezeigt wird, die Farben werden jedoch in den x-resources-Dateien definiert und müssen bei jeder Änderung neu gelesen (durch Neustart) werden. Ich kann mich irren, aber ich glaube nicht, dass urxvt das Ändern von Farbdefinitionen nach dem Start unterstützt. Vielleicht gibt es dafür eine Kontrollsequenz, da bin ich mir nicht sicher.
Z.B
weitere relevante Infos:
http://pod.tst.eu/http://cvs.schmorp.de/rxvt-unicode/doc/rxvt.7.pod#XTerm_Operating_System_Commands
http://www.xfree86.org/current/xterm.1.html#toc19
http://en.wikipedia.org/wiki/Control_Sequence_Introducer#Sequence_elements
http://invisible-island.net/xterm/ctlseqs/ctlseqs.html
quelle
man 7 urxvt
werden, interessieren mich. Ich kann nur nicht sagen, wie es funktioniert.Ich weiß, dass es eine Weile her ist, aber ich habe Ihren Perl-Code untersucht, um die Standard-URL-Farben festzulegen, je nachdem, mit welchem SSH-Host ich verbunden war.
Dann bin ich auf die OSC-Escape-Sequenzdefinitionen unter http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Control gestoßen und habe Folgendes gefunden:
Wobei in diesem Fall "gelb" der Vordergrund und "blau" die Hintergrundfarbe ist. Die Farbdefinitionen können beliebige Zeichenfolgen sein, die für XParseColor akzeptabel sind, z. B. LemonChiffon oder # FF4455.
Dadurch werden die Standardfarben des Terminals dauerhaft überschrieben, sodass beim Zurücksetzen des Terminals neue Farben verwendet werden. Es ist daher in Bezug auf normale ANSI-Escape-Sequenzen klebrig, was genau das ist, was ich brauchte. Funktioniert mit rxvt und urxvt, wahrscheinlich auch mit anderen Konsolen (OSC wird sogar in man console_codes erwähnt).
Es scheint auch Codes zu geben, mit denen einzelne ANSI-Farben außer Kraft gesetzt werden können. Diese habe ich nicht ausprobiert. Wenn sie jedoch funktionieren, ist dies meiner Meinung nach die beste Möglichkeit, Ihre Konsole dynamisch zu gestalten.
quelle