Secara kebetulan, kebetulan saya menemukan wiki konfigurasi untuk mintty
. Ini memiliki banyak saran bagus, salah satunya adalah bagaimana mengatur berbagai opsi menggunakan urutan melarikan diri yang dimaksudkan untuk xterm
. Jadi ini berfungsi dengan tidak membaca konfigurasi lagi tetapi dengan menafsirkan urutan melarikan diri untuk menimpa pemilihan warna yang ada.
Kita dapat menggunakan ini dari URxvt dengan mengikat kunci ke rantai panjang perintah, yang masing-masing mengubah salah satu dari 16 warna default.
Misalnya, di sini saya mengatur alt+ctrl+l
untuk mengubah setiap warna menjadi 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
Plugin Perl
Saya memilikinya "bekerja" tetapi tidak benar-benar, karena tampaknya ada perbedaan mendasar antara sumber daya yang didefinisikan
URxvt.keysym.M-1: command:\033].......
dan setiap upaya untuk melakukan hal yang sama dengannya $term->cmd_parse()
.
Adakah yang bisa dilakukan tentang ini? Sejauh ini saya telah menetapkan seluruh set warna gelap dan terang dengan hardcod menggunakan urutan pelarian yang sangat panjang:
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
Ini berfungsi persis seperti yang saya harapkan akan dan dapat diaktifkan saat runtime jadi saya menandai ini sebagai dijawab, tetapi mengapa ini tidak dapat dilakukan secara dinamis dari Perl? Inilah yang saya miliki sejauh ini, saya bukan seorang programmer Perl yang hebat, jadi mohon maafkan gaya buruknya.
Mudah-mudahan seseorang dapat berpadu tentang apa masalahnya. Ini akan menjadi plugin yang bagus. Hulu ada di 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
ada di sana.Saya membuat ekstensi Perl yang memuat ulang konfigurasi urxvt setelah menerima SIGUSR1: https://github.com/regnarg/urxvt-config-reload
Saat ini hanya mendukung reload konfigurasi warna tetapi hal-hal lain (seperti font) dapat ditambahkan dengan mudah. Laporkan bug sebagai masalah github.
sumber
Skrip berikut dapat digunakan dengan URxvt (atau terminal lain yang mendukung urutan pelarian XTerm OSC) untuk mengubah skema warna dengan cepat. Ia menerima definisi .Xresources-style sebagai input, dan menampilkan urutan escape. Cukup menjalankan skrip di terminal dan menempelkan colorcheme ke dalamnya akan mengubah palet warna - berguna untuk dengan cepat mencoba skema yang berbeda.
Shell redirection dapat digunakan juga:
~/bin/term-recolor < .Xdefaults.solarized.dark
.sumber
Konfigurasi dibaca sekali dalam seumur hidup dari proses urxvtd atau urxvt mandiri. Tidak mungkin memuat ulang konfigurasi dan efeknya terjadi di instance program yang sudah berjalan. Ada pengecualian untuk aturan ini, ketika datang ke beberapa pengaturan font dan lokal.
Anda dapat menggulir ke bawah ke bagian yang sesuai di terminal Anda. Berikut adalah beberapa FAQ yang relevan
Itu menyiratkan memuat ulang terminal biner kepada saya.
Saya pikir itu berarti "ketika Anda memulai aplikasi".
Anda dapat membuat teks tertentu muncul dalam warna tertentu, tetapi warna-warna tersebut ditentukan dalam file x-resources dan harus dibaca kembali (dengan memulai ulang) setiap kali mereka diubah. Saya mungkin salah, tetapi saya tidak berpikir urxvt mendukung perubahan definisi warna setelah dimulai. Mungkin ada urutan kontrol untuk itu, saya tidak yakin.
MISALNYA
info lebih relevan:
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
sumber
man 7 urxvt
adalah hal yang saya minati. Saya tidak tahu bagaimana cara kerjanya.Saya tahu ini sudah lama, tapi saya melihat kode perl Anda dengan mata untuk menetapkan warna urxvt default tergantung pada host ssh mana saya terhubung.
Kemudian saya menemukan definisi urutan escape OSC di http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Control , dan muncul dengan yang berikut:
Di mana dalam hal ini "kuning" adalah latar depan dan "biru" adalah warna latar belakang. Definisi warna dapat berupa string apa pun yang dapat diterima oleh XParseColor, misalnya LemonChiffon atau # FF4455.
Ini secara permanen menimpa warna default terminal, sehingga reset terminal akan menggunakan warna baru. Oleh karena itu lengket sehubungan dengan urutan pelarian ANSI normal, yang persis apa yang saya butuhkan. Bekerja pada rxvt dan urxvt, mungkin juga konsol lain (OSC bahkan disebutkan dalam man console_codes).
Tampaknya juga ada kode untuk mengganti warna ANSI individual, saya belum mencobanya, tetapi jika mereka bekerja saya akan berpikir itu adalah cara terbaik untuk secara dinamis tema konsol Anda, Anda benar-benar bisa hanya "cat dark" atau "cat light".
sumber