urxvt ayarları - terminali yeniden başlatmadan yeniden yüklensin mi?


19

urxvtOrtamın ne kadar güneşli olduğuna bağlı olarak, biri açık renkli ve diğeri karanlık için kullandığım iki renk temam var.

Bunları değiştirerek ~/.Xresourcesve xrdb ~/.Xresourcestekrar çalıştırarak değiştirmek kolaydır , ancak bu zaten çalışan terminalleri etkilemez.

Tmux kullanıyorum, böylece terminali yeniden başlatabilir ve yeniden bağlayabilirim, ancak 8 tanesi zaten çeşitli çalışma alanlarında nasıl istediğimi ortaya koyduğunda çok hızlı bir şekilde can sıkıcı oluyor.

Çözüm, urxvt'nin ayarlarını bir şekilde yeniden yüklemesi gibi görünüyor, ancak bunun nasıl yapılacağı veya hatta mümkün olup olmadığı hakkında herhangi bir bilgi bulamıyorum. Nasıl olduğunu bilen var mı?

Not: Büyük DE'lerin hiçbirini çalıştırmıyorum ve sadece bir terminal için tüm kde veya gnome kütüphanelerini kurmak üzereyim.

Düzenleme: man 7 urxvtyapmak için bazı sihirbaz görünümlü kodları gösterir ... iyi ... bir şey . Tüm renk setlerini değiştirmek için nasıl geçerli olduğunu görmüyorum. Herhangi bir ipucu?

Yanıtlar:


12

Şans eseri, ben wiki için yapılandırma buldum mintty. It has çok içindir çıkış sıralarını kullanarak çeşitli seçenekleri nasıl ayarlanacağı, biri büyük öneriler, xterm. Bu, yapılandırmayı tekrar okuyarak değil, mevcut renk seçimlerini geçersiz kılmak için kaçış dizilerini yorumlayarak çalışır.

Bunu, her biri 16 varsayılan renkten birini değiştiren uzun bir komut zincirine bir anahtar bağlayarak URxvt'den kullanabiliriz.

Örneğin, burada alt+ctrl+lher rengi C0C0C0 olarak değiştirmeye ayarladım:

# 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 Eklentisi

"Çalışıyorum" ama gerçekten değil, çünkü kaynak olarak tanımlanmış kaynaklar arasında temel bir fark var

URxvt.keysym.M-1: command:\033].......

ve aynı şeyi yapmaya çalışmak $term->cmd_parse().

Bu konuda yapılabilecek bir şey var mı? Şimdiye kadar (çok uzun) kaçış dizilerini kullanarak tüm açık ve koyu renk setlerini kodladım:

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

Bu tam olarak nasıl umuyordum ve çalışma zamanında değiştirilebileceği şekilde çalışıyor, bu yüzden bunu cevap olarak işaretliyorum, ancak bu neden Perl'den dinamik olarak yapılamıyor? Şimdiye kadar sahip olduğum şey, ben büyük bir Perl kodlayıcı değilim, bu yüzden lütfen şüphesiz kötü stili affedin.

Umarım birisi sorunun ne olduğunu öğrenebilir. Bu güzel bir eklenti olacak. Memba github'da .

#! /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));
    }
    ()
}

build_cmd, renk dizesini döndürmez ve cmd_parse () parametresiz yürütülür?
Ярослав Рахматуллин

Tipo. Fark etmedim çünkü perl'in sonsuz bilgeliğinde dönüş değeri dolaylı olarak $sorada.
John Tyree

1
Lütfen eklentinizin ne zaman çalıştığını bize bildirin.
erik

4

SIGUSR1'i aldıktan sonra urxvt yapılandırmasını yeniden yükleyen bir Perl uzantısı oluşturdum: https://github.com/regnarg/urxvt-config-reload

Şu anda yalnızca renk yapılandırmasının yeniden yüklenmesini destekliyor, ancak diğer şeyler (yazı tipleri gibi) kolayca eklenebilir. Hataları github sorunları olarak bildirin.


Artık yazı tipi ve geometri yapılandırmasını da destekliyor! :)
Powerman

Güzel! Tüm yapılandırmayı tekrar okumak gerçekten istediğim şey değil ama belki de yapmadığım bazı şeyleri anladın. Güçlerimiz bir araya geldiğinde ...?
John Tyree

3

Aşağıdaki komut dosyası, anında renk şemasını değiştirmek için URxvt (veya XTerm OSC kaçış dizilerini destekleyen herhangi bir terminal) ile kullanılabilir. .Xresources tarzı tanımları girdi olarak kabul eder ve çıkış dizilerini çıktılar. Komut dosyasını terminalde çalıştırmak ve bir renk şemasını yapıştırmak renk paletini değiştirir - farklı şemaları hızlı bir şekilde denemek için yararlıdır.

#!/bin/sh
tr -d ' \t' | sed -n '
s/.*background:/\x1b]11;/p
s/.*foreground:/\x1b]10;/p
s/.*color\([0-9][^:]*\):/\x1b]4;\1;/p
' | tr \\n \\a

Kabuk yönlendirme de kullanılabilir: ~/bin/term-recolor < .Xdefaults.solarized.dark.


0

Yapılandırma, bir urxvtd işleminin veya tek başına bir urxvt'nin ömründe bir kez okunur. Yapılandırmayı yeniden yüklemek ve efektlerin programın zaten çalışan bir örneğinde gerçekleşmesini sağlamak mümkün değildir. Bazı yazı tipi ve yerel ayarlarda bu kuralın istisnaları vardır.

Terminalinizdeki uygun bölüme inebilirsiniz. İşte ilgili birkaç SSS

S Neden rxvt-unicode kaynaklarımı okumuyor?

A (kısaltılmış) xrdb kullanır. Her değişiklikten sonra yeniden oturum açmanız gerekir (veya xrdb -merge $ HOME / .Xresources komutunu çalıştırmanız gerekir).

Bu terminal ikilisinin bana yeniden yüklenmesi anlamına geliyor.

Q Ekran renklerini sevmiyorum. Onları nasıl değiştirebilirim?

C ~ / .Xdefaults kaynaklarını (veya uzun seçenekler olarak) kullanarak ekran renklerini çalışma zamanında değiştirebilirsiniz.

Bence bu "uygulamayı başlattığınızda" anlamına geliyor.


Belirli bir metnin belirli bir renkte görünmesini sağlayabilirsiniz, ancak renkler x kaynakları dosyalarında tanımlanır ve her değiştirildiklerinde yeniden okunmaları (yeniden başlatılarak) gerekir. Yanlış olabilirim, ama urxvt başladıktan sonra renk tanımlarını değiştirmeyi desteklemiyor. Belki de bunun için bir kontrol dizisi var, emin değilim.

ÖRNEĞİN

$ cat colors-in-bash
#!/bin/bash
for code in {0..255}; do
        if [[ code%8 -eq 0 ]];then echo ;fi
        printf "%5s" `echo -n -e "\e[38;05;${code}m $code: Test"`
done

daha alakalı bilgiler:

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


Sağ. Ve gösterilen yazı tipi ve renklerle ilgili özel istisnalar man 7 urxvtilgilendiğim şeydir. Nasıl çalıştığını söyleyemem.
John Tyree

AFAIK, renk kaçış dizileri "burada kırmızı geldikten sonra" - kırmızı metin - "normal metinden sonra - beyaz üzerine siyah" demek için kullanılır. Ancak, kırmızı, beyaz ve siyahın tanımları sadece x başlarken mevcut x kaynaklarından okunur.
Ярослав Рахматуллин

Bunu da wiki'ye nane için bakarken buldum ama SU yeni insanların 8 saat içinde kendi sorularını cevaplamasına izin vermiyor. Şu anda sadece bunu yapmak için bir urxvt perl eklentisi yazıyorum.
John Tyree

Sonuçlarınızı görmek ilginç olurdu.
Ярослав Рахматуллин

Sorunu tatmin edici olmayan bir şekilde çözdüm. Renkli dosyaları dinamik olarak yüklemek için güzel bir eklentinin başlangıcı dahildir. Yardım takdir.
John Tyree

0

Bir süre geçtiğini biliyorum, ancak bağlandığım ssh host'a bağlı olarak varsayılan urxvt renklerini ayarlamaya yönelik perl kodunuza bakıyordum.

Sonra http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Control adresindeki OSC kaçış dizisi tanımlarına rastladım ve aşağıdakileri buldum :

printf '\x1b]10;%s\a\x1b]11;%s\a' yellow blue

Bu durumda "sarı" ön plan, "mavi" ise arka plan rengidir. Renk tanımları XParseColor için kabul edilebilir herhangi bir dize olabilir, örneğin LemonChiffon veya # FF4455.

Bu , terminal sıfırlamasının yeni renkler kullanması için terminalin varsayılan renklerini kalıcı olarak geçersiz kılar. Bu yüzden normal ANSI kaçış dizilerine göre yapışkan, tam da ihtiyacım olan şey bu. Muhtemelen diğer konsollarda da rxvt ve urxvt üzerinde çalışır (OSC, man console_codes'te bile belirtilmiştir).

Bireysel ANSI renklerini geçersiz kılmak için kodlar da var, bunları denemedim ama eğer çalışırlarsa, konsolunuzu dinamik olarak temalamanın en iyi yolu olduğunu düşünürdüm, kelimenin tam anlamıyla sadece "kedi karanlık" veya "kedi ışığı".

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.