Tput'un 'setf' ve 'setaf' arasındaki fark nedir?


17

Komutun tputrenk ayarlamak için iki farklı seçeneği vardır setfve setafyine de her ikisi de bilgisayarımda iyi çalışıyor gibi görünüyor:

$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'

setbVe ile benzer bir ikilik var gibi görünüyor setab.

İki seçenek arasındaki fark nedir?


1
Ayrıntılar için terminfo(5)birlikte verilen kılavuz sayfasına ncursesbakın.
Stéphane Chazelas

Yanıtlar:


15

setfsadece 8 renkle sınırlıdır. setaf256 renge kadar ayarlayabilir.

(aşağıdaki tüm bilgiler benim terminalim gibi urxvt'ye özgü olacaktır, ancak bilgi diğer terminallerle aynı değilse de benzer olacaktır)

Hem setfve setaffarklı bir kaçış kodu sağlayın. Bunu aşağıda görebilirsiniz:

# tput setf 2 | xxd  
0000000: 1b5b 3332 6d                             .[32m

# tput setaf 2 | xxd 
0000000: 1b5b 3338 3b35 3b32 6d                   .[38;5;2m

urxvt(7)Adam sayfamdan :

   "ESC [ Pm m"
       Character Attributes (SGR)
       ...
       Pm = 30 / 40       fg/bg Black
       Pm = 31 / 41       fg/bg Red
       Pm = 32 / 42       fg/bg Green
       Pm = 33 / 43       fg/bg Yellow
       Pm = 34 / 44       fg/bg Blue
       Pm = 35 / 45       fg/bg Magenta
       Pm = 36 / 46       fg/bg Cyan
       Pm = 37 / 47       fg/bg White
       Pm = 38;5 / 48;5   set fg/bg to colour #m (ISO 8613-6)

Böylece yukarıdan xxdçıktı, biz görebilirsiniz tput setf 2kullanımlarını Pm = 32yeşil rengini ayarlamak olacak. tput setaf 2Öte yandan, Pm = 38;5ISO 8613-6'da (ayrıca yeşil) tanımlanan renk kodunu temsil eden.
ISO 8613-6'da 0x00-0x07 renkleri standart renklerle aynıdır ve 0x08 - 0x0f standart "kalın" renklerdir. 0x10-0xff'ye ulaştığınızda yeni renkler elde edersiniz.

Vikipedi'den çalındı :

0x00-0x07:  standard colors (as in ESC [ 30..37 m)
0x08-0x0f:  high intensity colors (as in ESC [ 90..97 m)
0x10-0xe7:  6*6*6=216 colors: 16 + 36*r + 6*g + b (0≤r,g,b≤5)
0xe8-0xff:  grayscale from black to white in 24 steps

tputolsa da, mevcut ANSI renk dizisi aralıklarını kullanmıyor gibi görünüyor . Herhangi biri için n > 7, tput setaf nterminalimdeki metin üzerinde hiçbir etkisi yoktur.
Kyle Strand

Aslında, bu sadece çevremdeki bir tuhaflık olabilir; benim için çıktılar tput setf 2ve tput setaf 2her ikisi de .[32m .
Kyle Strand

5

Kılavuzdan: man 5 terminfo

Tektronix tipi bir terminalde geçerli ön plan veya arka plan rengini değiştirmek için setaf (ANSI ön planını ayarla ) ve setab (ANSI arka planını ayarla) veya setf (ön plan ayarla) ve setb (arka plan ayarla) kullanın. Bunlar bir parametre alır, renk numarası. SVr4 belgeleri sadece setaf / setab'ı açıklar ; XPG4 taslağında "Terminal arka planı ve ön planı ayarlamak için ANSI kaçış dizilerini destekliyorsa , sırasıyla setaf ve setab olarak kodlanmalıdır . Terminal arka planı ve ön planı ayarlamak için diğer kaçış dizilerini destekliyorsa, setf ve setb, sırasıyla. Vidputs () işlevi ve refresh işlevleri tanımlanmışsa setaf ve setab kullanır . "

Yani cevap şudur: setaf , ANSI ön planını ayarla anlamına gelir , yani ANSI kaçış dizileri kullanır ve setf , Ön Plan Ayarla (ANSI dışındaki bazı kaçış dizilerini kullanarak) anlamına gelir .


3

İki yetenek kümesi, ANSI renkleri listesinde kırmızı / mavi için farklı sıralama kullanır.

Belirtildiği gibi, ncurses terminfo kılavuz sayfasında açıklanmıştır . Bazı tarihler:

  • Erken (1990'ların ortalarında), en çok kullanılan "renkli" terminal açıklamaları kullanılmıştır setf/setb.
  • Termcap kullanıcıları ile (ve termcap için) karşılık gelen Sf/Sbkodları kullanan ancak ANSI yetenekleriyle doğru yetenekleri kullanmak yerine ANSI kaçış dizilerini (termcap ile çalışan) kullanmakla ilgili bazı karışıklıklar oldu .setaf/setabAF/AB
  • Bu nedenle, iki eşdeğerli terminal girişlerini bulacaksınız, örneğin mgterm , interix , beterm (ve yine FreeBSD'nin termcap dosyasındaki birkaç giriş, yine başkalarının programlarını değiştirmeye isteksizliğiyle birleştiğinden).

ANSI setaf/setab, terminfo geçmişine oldukça geç eklendi, çünkü yetenek dizeleri listesindeki konumlarından çıkarım yapabilirsiniz . Bunların birkaç yıl içinde aşamalı olarak eklendiğini ve bazı sistemlerin farklı olduğunu unutmayın (ncurses, Caps.hpuxbu sistemleri eşleştirmek için derlenmesine izin vermek gibi bazı örneklere sahiptir ). Bu, referans olarak kullanılabilecek az sayıda yararlı terminal tanımını açıklamıştır.

Tüm setf/setbbunlarla birlikte , mevcut dizelerin ANSI sırasına uymadığı gerçeği hemen fark edilmedi, bu da 1998'de bazı düzeltmelere yol açtı ve SSS Neden kırmızı / mavi değiştirildi? .

8 renkli ANSI dizisini 16 renge genişletmek mümkün olsa da (8-15 renklerinin 0-7'nin daha parlak sürümleri olduğunu varsayarak), setf/setbilk 16 rengi geçecek bir şema icat etmek için iyi bir neden yoktu .

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.