Geçerli xterm arka plan rengine programlı erişim?


13

.bashrcÖn plan ve arka plan için kullandığı renklere bağlı olarak istem renkleri ayarlamak istiyorum .

Örneğin, arka plan açıksa mavi, karanlık ise bej.

Bir komut dosyasındaki geçerli ayarları bulmanın bir yolu var mı?

Yanıtlar:


22

Thomas Dickey'den (xterm'in bakıcısı) geri gönderilen e-postada bu var. Özellikle ilgili bölüme dikkat edin ?. Ps = 4İfade eder OSC Ps ; Pt STburada OSC( "İşletim Sistemi kontrol" öneki) 'dir ESC ]ve ST( "dize Terminatör" eki vardır) olan \(ters eğik çizgi). 4OSC mümkün alt komutlarının biridir.

Tüm palet için, bu 88/256 renk uzantısı kullanılarak ayarlanabilir / alınabilir. Ctlseqs.txt dosyasında, burada özetlenmiştir:

  Ps = 4 ; c ; spec -> Change Color Number c to the color
specified by spec.  This can be a name or RGB specification as
per XParseColor.  Any number of c/spec pairs may be given.
The color numbers correspond to the ANSI colors 0-7, their
bright versions 8-15, and if supported, the remainder of the
88-color or 256-color table.

If a "?" is given rather than a name or RGB specification,
xterm replies with a control sequence of the same form which
can be used to set the corresponding color.  Because more than
one pair of color number and specification can be given in one
control sequence, xterm can make more than one reply.

Biraz sonra içinde dokümanlar daha OSC alt komutları vardır Ps = 10ve Ps = 11, ve diğerleri.

Ps = 1 0  -> Change VT100 text foreground color to Pt.
Ps = 1 1  -> Change VT100 text background color to Pt.

Örnek - bu, arka planı Ps = "11"(sadece yukarıdan) kullanarak Pt = "?"ve OSC Ps ; Pt ST. Ekoda \033kaçış ve \\son ters eğik çizgi için kullanılıyor.

echo -en "\033]11;?\033\\"

Çıktı:

^[]11;rgb:0000/0000/0000^[\ 

Uyarı: Döndürülen renk, ters videonun -rvetkinleştirilip etkinleştirilmediğini yansıtmaz ve kullanılabilir ~ 260 renk arasında gezinmek, OSC 4 ; c ; ? STher ikisinin de arka planı takip ettiği VE ters video ile değiştiğini göstermez. Birçok kullanıcı sadece kullanarak karanlık bir arka plan xterm -rvbelirlediğinden, arka planın gerçekten karanlık olup olmadığını belirlemeyi zorlaştırır. Çoğu renk de ayarlanmaz -rv.

Tam sorguyu yapmak ve aslında xterm'den yanıtı yakalamak için kullanılan bir komut dosyası:

#!/bin/bash
success=false
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
col=11      # background
#          OSC   Ps  ;Pt ST
echo -en "\033]${col};?\033\\" >/dev/tty  # echo opts differ w/ OSes
result=
if IFS=';' read -r -d '\' color ; then
    result=$(echo $color | sed 's/^.*\;//;s/[^rgb:0-9a-f/]//g')
    success=true
fi
stty $oldstty
echo $result
$success

1
Vay be ... iki yıl sonra bir cevap ... teşekkür ederim. Açıklamayı tam olarak anlamadım ama örnek benim için hiçbir şey yapmıyor ... hiçbir şeyi yankılamaz.
Sefil Değişken

Heh. Oldukça yeni bir xterm - gerçek bir xterm - bu kez tüm X kaynakları elimden ile (ben tüm "0" yerine renkler için tüm "f" s verir) yeniden çalıştırıyorum. / Bin / echo veya bash yerleşik echo'yu kullanmak iyi sonuç verir. Denediğim örnek doğrudan yukarıdaki yazıdan kopyalandı / yapıştırıldı. Ortamım Ubuntu 11.10 (Linux / Debian türevi). Test etmek için farklı bir işletim sistemim yok.
Alex North-Keys

İsteminizin nasıl yapılandırıldığına bağlı olarak, sorgunuza yanıt olarak xterm'in terminalinize girdi doldurma girişiminin üstüne inme şansı vardır. Kabuğunuzun bakış açısına göre, xterm'in yanıtı yazıyor gibi görünüyor.
Alex North-Keys

1
Ubuntu 12.04'teki Hmm, gnome terminali xterm uyumlu olduğunu iddia ediyor, ancak geri hiçbir şey yazdırmıyor. Neden?
Nik Reiman

1
Şimdi bu saf terminal vudu. Mükemmel cevap.
Qix - MONICA

0

biraz

ayarları ~ / .Xdefaults dosyanıza yerleştirin:

xterm*foreground: blue
xterm*background: white

kabuğunuzda sadece değerleri grep:

awk '/xterm\*foreground:(.*)/ { print $2 }' < .Xdefaults

aksi takdirde xterm'in bazı dahili değerlerini elde etmek oldukça zordur.


Ben bile X kullanmıyorum :) Bir X sunucusu olmadan çalışan cygwin bir rxvt kullanıyorum. Ayrıca farklı ana bilgisayarlarda ve farklı görevler için farklı renkler kullanabilmek istiyorum, bu da ayarlar için terminali sorgulamamı gerektiriyor.
Sefil Değişken

iyi, işletim sisteminizi belirtmediniz :)
akira

bunun için üzgünüm. Belirtmediğim nedeni, çözümün bazı sihirli dizeleri yankılamaya ve stdout hakkında bazı bilgiler almasına dayanmasını beklememdi.
Sefil Değişken

iyi, ne "yankı" normalde kabuk içinde kalır (bash, zsh), xterm gitmez (komutların çıkışını görüntülemek için son adım hariç).
akira

-1 awk iş için yanlış araçtır.
g33kz0r

-1

Aslında bunu istediğinizi düşünüyorum:

% xrdb -query

Bu sizin için ayarları listeleyecektir. Ayrıca bakınız:

http://docstore.mik.ua/orelly/unix3/upt/ch06_08.htm

Çalışma zamanını değiştirmek için şunu kullanın:

% echo "some*setting: somevalue" | xrdb -merge

-querytüm kaynakları listeler. bir kaynak belirtmek ubuntu üzerinde çalışmıyor.
akira

yankı "ne olursa olsun" | xrdb -merge
g33kz0r

soruyu tekrar okuyun: OP, BASH İSTEMİNİN renklerini xterm ayarlarına göre ayarlamak istiyor. OP xresource'ları değiştirmek istemiyor.
akira

Cevabınıza yaptığı yorumu görün. "Termik [sic] terimini sorgulamak" istiyor. Böylece, xrdb -query
g33kz0r

o belirli olmak istiyorsanız: o windows üzerinde çalışan bir xserver rtovt sorgulamak istiyor (mümkün) ve xrdb -querysadece size tüm kaynakların listesini verir .. hangi awk / grep için ön plana almak için tekrar gerekir. ve zaten itiraf ettiğim şey bu. xrdb -mergeBurada tamamen offtopic olduğunu coz OP xresources ama bashprompt görünümünü değiştirmek istemiyor.
akira
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.