Metnin rengini ve terminalin arka planını değiştirme


Yanıtlar:


50

Bazı XTerm / ANSI uyumlu terminallerde ( xtermve benzeri gnome-terminal), varsayılan 8/16 renk paletinden (örneğin 88 renkli, 256 renkli veya 16777216 renkli (RGB) palet kullanarak daha büyük bir paleti kullanarak renkleri ayarlayabilirsiniz. her ikisi de xtermve gnome-terminalhem 256 renkli hem de 16777216 renkli (RGB) paleti destekler); Kabuğun bunu geçersiz kılabileceğine dikkat edin (bu örn. için geçerlidir zsh).

256 renk paletindeki renkleri ve 256 renk paleti desteğine sahip XTerm / ANSI uyumlu terminallerde ANSI renk kodlarını listeleyen bir komut dosyası:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

screenshot1

ekran görüntüsü

Rengi ön plana mı yoksa arka plana mı uygulamak istediğinize bağlı olarak , aşağıdaki komutta veya sırasıyla <fg_bg>( 38veya 48) değerini kullanın:

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

Örneğin, ön plan rengini ( <fg_bg>= 38) kırmızı ( <ANSI_color_code>= 196) ve arka plan rengini ( <fg_bg>= 48) siyah ( <ANSI_color_code>= 0) olarak ayarlamak için:

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

screenshot3

printf '\e[K'Arka plan renginin tüm satıra uygulanabilmesi ve ön plan renginin imlece uygulanabilmesi için komut istemini kullanarak yeniden çizilmesi gerekir :

screenshot4

Aynı şey, uyumlu bir terminalde ANSI renk kodları yerine RGB değerleri kullanılarak da yapılabilir; Rengi ön plana mı yoksa arka plana mı uygulamak istediğinize bağlı olarak , aşağıdaki komutta veya sırasıyla <fg_bg>( 38veya 48) değerini kullanın:

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

Örneğin, ön plan rengini ( <fg_bg>= 38) kırmızı ( <R>= 255, <G>= 0, <B>= 0) ve arka plan rengini ( <fg_bg>= 48) siyah ( <R>= 0, <G>= 0, <B>= 0) olarak ayarlamak için:

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

screenshot5

Yine, printf '\e[K'arka plan renginin tüm satıra uygulanabilmesi ve ön plan renginin imlece uygulanabilmesi için komut istemini kullanarak yeniden çizilmesi gerekir :

screenshot6

Her iki yöntemi de kullanarak, printf '\e[0m'tüm nitelikleri sıfırlamak için kullanabilirsiniz :

screenshot7


1
Her ikisi de xtermve gnome-terminale'yi [38/48; 2; R; G; Bm gerçek renk kaçış dizilerini; ancak, xtermasıl rengi 256 renk paletinde en yakına yuvarlar. gnome-terminalkaçış dizisinde verilen tam gerçek rengi görüntüler.
egmont

2
\ e [K tehlikelidir; Bazı emülatörlerde (örn. xterm), imleç en sağ kenardaysa (en sağ sütunda görsel olarak görüntülenir, ancak bir karakter zaten en sağ sütunda yazdırıldığından beri mantıksal olarak ötesinde), bu son harf sıyrılır. Bakınız örneğin bugzilla.gnome.org/show_bug.cgi?id=740789 veya savannah.gnu.org/bugs/?36831 .
egmont

Kendimi düzeltmek: Satırın başında (satırın sonunda yerine istemi başında) \ e [K verirseniz, o zaman elbette güvenlidir. (Ancak çok satırlı komut veya komutla çalışmaz.)
egmont

@ egmont Yararlı bilgiler için teşekkürler, GNOME Bugzilla'da sabit olarak işaretlenmiş, durum böyle mi? Bunu şu anda test edemiyorum, bu yüzden hala durumun böyle olup olmadığını kontrol etmek için bunu yapacağım (ilk önce cevaplamadıkça) ve cevabı bu bilgiyi dahil edin.
kos

Gnome-terminalinin en yeni sürümleri bu karakteri çıkarmaz. Bunun doğru davranış olup olmadığı sorgulanabilir. Sonuçta, grafik terminal emülatörleri bazı eski cihazları taklit ediyor. Kötü tasarım kararlarını taklit etmeli miyiz (xterm burada olduğu gibi) veya geçersiz kılmalı mıyız (gnome-terminalinde yaptığımız gibi)? Tek bir doğru cevabı olmayan zor bir soru.
egmont

33

Önizleme sütunu hariç , bu sayfada bulunan bilgiler :

Diziler, Escape karakterinden (genellikle ” ^[” veya ” <Esc>” ile temsil edilir ) ve ardından diğer bazı karakterlerden oluşur: ” ^[FCm” ( FCaşağıda madde imli listedeki numaralardan biridir).

Kodda bash, Escaşağıdakilerden biri olabilir:

  1. \e
  2. \033 (sekizli)
  3. \x1B (Onaltılı)

Not 1: " \e[0m" dizisi tüm özellikleri kaldırır (biçimlendirme ve renkler). Her renkli metnin sonuna eklemek iyi bir fikir olabilir.

Not 2: Ön plan ve arka plan renkleri terminalin yapılandırmasına bağlı olarak değişebilir ve tüm renkler desteklenmez .

Set / Reset

  • 0: Tüm değiştirici, ön ve arka plan özelliklerini sıfırla / kaldır: echo -e "\e[0mNormal Text"
  • 1: Kalın / Parlak: echo -e "Normal \e[1mBold"
  • 2: Dim: echo -e "Normal \e[2mDim"
  • 4: Altı çizili: echo -e "Normal \e[4mUnderlined"
  • 5: Yanıp Sönme (XTerm hariç çoğu terminalde çalışmaz): echo -e "Normal \e[5mBlink"
  • 7: Ters Çevir / Ters Çevir: echo -e "Normal \e[7minverted"
  • 8: Gizli (hassas bilgiler için kullanışlıdır): echo -e "Normal \e[8mHidden Input"
  • 21: Koyu / parlakı Sıfırla / Kaldır: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22: Söndürme / Silme: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24: Alt çizgiyi sıfırla / kaldır: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25: Yanıp Sönmeyi Sıfırla / Kaldır: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27: Sıfırla / Kaldır ters çevir / ters çevir: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28: Gizle Sıfırla / Kaldır: echo -e "Normal \e[8mHidden \e[28mNormal"

ön plan

  • 39: Varsayılan (genellikle yeşil, beyaz veya açık gri): echo -e "Default \e[39mDefault"
  • 30: Siyah: echo -e "Default \e[30mBlack"(en iyi bir arka plan rengi ile kombine: echo -e "Default \e[30;107mBlack on white")
  • 31: Kırmızı (yeşil arka planla kullanmayın)
  • 32: Yeşil
  • 33: Sarı
  • 34: Mavi
  • 35: Eflatun / Mor
  • 36: Mavi
  • 37: Açık gri
  • 90: Koyu gri
  • 91: Açık kırmızı
  • 92: Açık yeşil
  • 93: Açık sarı
  • 94: Açık mavi
  • 95: Açık Eflatun / Pembe
  • 96: Açık cam göbeği
  • 97: Beyaz

Arka fon

  • 49: Varsayılan arka plan rengi (genellikle siyah veya mavi)
  • 40: Siyah
  • 41: Kırmızı
  • 42: Yeşil
  • 43: Sarı
  • 44: Mavi
  • 45: Eflatun / Mor
  • 46: Mavi
  • 47: Açık Gri (beyaz ön planda kullanmayın)
  • 100: Koyu Gri (siyah ön planla kullanmayın)
  • 101: Açık kırmızı
  • 102: Açık Yeşil (beyaz ön planla kullanmayın)
  • 103: Açık Sarı (beyaz ön planla kullanmayın)
  • 104: Açık Mavi (açık sarı ön planda kullanmayın)
  • 105: Açık Eflatun / Pembe (açık ışıkla kullanmayın)
  • 106: Açık Mavi (beyaz ön planla kullanmayın)
  • 107: Beyaz (hafif ön planla kullanmayın)

Hem ön hem de arka plan rengini aynı anda ayarlamak için, bu formu kullanın echo -e "\e[S;FG;BGm". Örneğin: echo -e "\e[1;97;41m"(kırmızı zemin üzerine koyu beyaz ön plan)

256 renk seçeneği için kaynak sayfaya bakın.


30

Renkleri tesadüfi olarak değiştirme

Renklerin tesadüfi olarak değiştirilmesi gerekiyorsa :

Setterm komutunu kullanabilirsiniz :

setterm -term linux -back <background_colour> -fore <text_color> -clear

renkler arasından seçim yapabilirsiniz (hem ön hem de arka plan):

black|blue|green|cyan|red|magenta|yellow|white|default

daha fazla seçenek için:

setterm -help

Profil (renk) ayarlarınızı değiştirin

14.04'te dconfrenkleri veya terminali ayarlamak için bir seçenek bulamadım . Ancak kullanabilirsinizgconftool

  • İlk önce profil adınızı almanız gerekir:

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • Ardından, profilinizin metin renklerini ayarlamak için:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
    

    örneğin metin rengini beyaz yapmak için

    Arka plan rengiyle aynı:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
    

    örneğin arka plan rengini siyah olarak ayarlamak için

Alternatif olarak, renklerin adını ayarlamak için setterm komutuyla aynı paletten basit bir şekilde whiteveya kullanabilirsiniz green:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black

1
Bunlar ilk setterm komutunda çift tire olmalıdır.
user1770201

14.04'te çalıştı, ancak 16.04'te değil (beta; sebebin böyle olup olmadığından emin değilsin ...) Yine dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'"de hile yaptı.
Janaka Bandara

Ubuntu 1704 üzerinde çalışmıyor, kötü görünüyor
Wax Cage

1
gconftool-2(Ubuntu 14.04 ve belki birkaç sürüm için) veya dconfveya gsettingsdaha yeni Ubuntu sürümlerinde, gnome-terminalinin ayarlarını değiştirir ve aynı profilin tüm sekmeleri ve pencereleri üzerinde hemen etkili olur . OP'nin bu davranışı aradığını sanmıyorum.
egmont

5

Renkli çıktı elde etmek için kullanılan çeşitli renk kodları da renkli arka planlar elde etmek için kullanılabilir :

40  black
41  red
42  green
43  yellow
44  blue
45  magenta
46  cyan
47  white

Bu nedenle, aşağıdaki komut arka planımı kırmızıya çevirir:

$ echo -e '\e[0;41m'

Kabuğa, terminal emülatörüne vb. Bağlı olarak, ihtiyacınız olmayabilir -e.


3

Ön planı veya arka planı paletin belirli bir rengine veya hatta bazı terminallerde doğrudan RGB rengine geçirmek için kos'un cevabına bakın. Böyle bir dizinin etkisi, farklı bir renk seçilene kadar devam eder (veya varsayılana döndürülür).

Bazı terminal emülatörleri tarafından desteklenen bir başka yaklaşım, OSC 10/11 çıkış dizilerini kullanarak terminalin varsayılan ön plan ve arka plan renklerinin tam RGB değerlerini yeniden tanımlamaktır :

echo -ne '\e]10;#123456\e\\'  # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\'  # set default background to #abcdef

Bunun daha uzun sürmesi muhtemeldir (başka bir OSC 10/11 tarafından geçersiz kılınana veya OSC 110/111 üzerinden sıfırlanana kadar), ancak dconf yaklaşımından farklı olarak, bu hala mevcut terminali etkiler.

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.