tput setaf 색상 테이블? 색상 코드를 결정하는 방법은 무엇입니까?

tput setaf 색상 테이블? 색상 코드를 결정하는 방법은 무엇입니까?

터미널을 색칠하고 있어요 PS1.

tput예를 들어 다음을 사용하여 색상 변수를 설정합니다.

PURPLE=$(tput setaf 125)

질문:

125다른 색상(예:)의 색상 코드를 어떻게 찾을 수 있나요 ?

어딘가에 컬러 차트 가이드/치트 시트가 있나요?

그게 뭔지 잘 모르겠어요 125... 16진수 색상을 구해서 사용할 수 있는 숫자로 변환할 수 있는 방법이 있나요 setaf?

답변1

입력할 수 있는 색상의 수는 로 지정됩니다 tput colors.

setf기본 8가지 색상을 보려면(urxvt 터미널 및 xterm 터미널에 사용됨 setaf):

$ printf '\e[%sm▒' {30..37} 0; echo           ### foreground
$ printf '\e[%sm ' {40..47} 0; echo           ### background

일반적으로 이름은 다음과 같습니다.

Color       #define       Value       RGB
black     COLOR_BLACK       0     0, 0, 0
red       COLOR_RED         1     max,0,0
green     COLOR_GREEN       2     0,max,0
yellow    COLOR_YELLOW      3     max,max,0
blue      COLOR_BLUE        4     0,0,max
magenta   COLOR_MAGENTA     5     max,0,max
cyan      COLOR_CYAN        6     0,max,max
white     COLOR_WHITE       7     max,max,max

확장된 256색을 보려면( setafurxvt에서 사용됨):

$ printf '\e[48;5;%dm ' {0..255}; printf '\e[0m \n'

숫자로 정렬된 출력을 원하는 경우:

#!/bin/bash
color(){
    for c; do
        printf '\e[48;5;%dm%03d' $c $c
    done
    printf '\e[0m \n'
}

IFS=$' \t\n'
color {0..15}
for ((i=0;i<6;i++)); do
    color $(seq $((i*36+16)) $((i*36+51)))
done
color {232..255}

인덱스 라벨이 붙은 256개의 정렬된 색상 차트


1,600만 색상에는 상당한 양의 코드가 필요합니다(일부 콘솔에서는 이를 표시할 수 없음).
기본 사항은 다음과 같습니다.

fb=3;r=255;g=1;b=1;printf '\e[0;%s8;2;%s;%s;%sm▒▒▒ ' "$fb" "$r" "$g" "$b"

fbfront/back또는 3/4.

여러 색상을 렌더링하는 콘솔 기능에 대한 간단한 테스트는 다음과 같습니다.

for r in {200..255..5}; do fb=4;g=1;b=1;printf '\e[0;%s8;2;%s;%s;%sm   ' "$fb" "$r" "$g" "$b"; done; echo

빨간색 선, 어두운 색에서 밝은 색(왼쪽에서 오른쪽으로) 왼쪽에서 오른쪽으로 색상의 변화가 거의 없는 빨간색 선으로 나타납니다. 이 작은 변화가 눈에 보인다면 콘솔은 1,600만 가지 색상을 표시할 수 있습니다.

RGB(빨간색, 녹색, 파란색)의 경우 각각 r, gb는 0에서 255 사이의 값입니다.

콘솔 유형이 이 기능을 지원하는 경우 이 코드는 컬러맵을 생성합니다.

mode2header(){
    #### For 16 Million colors use \e[0;38;2;R;G;Bm each RGB is {0..255}
    printf '\e[mR\n' # reset the colors.
    printf '\n\e[m%59s\n' "Some samples of colors for r;g;b. Each one may be 000..255"
    printf '\e[m%59s\n'   "for the ansi option: \e[0;38;2;r;g;bm or \e[0;48;2;r;g;bm :"
}
mode2colors(){
    # foreground or background (only 3 or 4 are accepted)
    local fb="$1"
    [[ $fb != 3 ]] && fb=4
    local samples=(0 63 127 191 255)
    for         r in "${samples[@]}"; do
        for     g in "${samples[@]}"; do
            for b in "${samples[@]}"; do
                printf '\e[0;%s8;2;%s;%s;%sm%03d;%03d;%03d ' "$fb" "$r" "$g" "$b" "$r" "$g" "$b"
            done; printf '\e[m\n'
        done; printf '\e[m'
    done; printf '\e[mReset\n'
}
mode2header
mode2colors 3
mode2colors 4

예제 전경색 차트 및 해당 인덱스를 레이블로 사용

배경색 차트 및 해당 색인을 레이블로 예시

16진수 색상 값을 (가장 가까운) 0-255 색상 색인으로 변환하려면:

fromhex(){
    hex=${1#"#"}
    r=$(printf '0x%0.2s' "$hex")
    g=$(printf '0x%0.2s' ${hex#??})
    b=$(printf '0x%0.2s' ${hex#????})
    printf '%03d' "$(( (r<75?0:(r-35)/40)*6*6 + 
                       (g<75?0:(g-35)/40)*6   +
                       (b<75?0:(b-35)/40)     + 16 ))"
}

다음과 같이 사용하세요:

$ fromhex 00fc7b
048
$ fromhex #00fc7b
048

조회에 사용되는 색상 번호HTML 색상 형식:

#!/bin/dash
tohex(){
    dec=$(($1%256))   ### input must be a number in range 0-255.
    if [ "$dec" -lt "16" ]; then
        bas=$(( dec%16 ))
        mul=128
        [ "$bas" -eq "7" ] && mul=192
        [ "$bas" -eq "8" ] && bas=7
        [ "$bas" -gt "8" ] && mul=255
        a="$((  (bas&1)    *mul ))"
        b="$(( ((bas&2)>>1)*mul ))" 
        c="$(( ((bas&4)>>2)*mul ))"
        printf 'dec= %3s basic= #%02x%02x%02x\n' "$dec" "$a" "$b" "$c"
    elif [ "$dec" -gt 15 ] && [ "$dec" -lt 232 ]; then
        b=$(( (dec-16)%6  )); b=$(( b==0?0: b*40 + 55 ))
        g=$(( (dec-16)/6%6)); g=$(( g==0?0: g*40 + 55 ))
        r=$(( (dec-16)/36 )); r=$(( r==0?0: r*40 + 55 ))
        printf 'dec= %3s color= #%02x%02x%02x\n' "$dec" "$r" "$g" "$b"
    else
        gray=$(( (dec-232)*10+8 ))
        printf 'dec= %3s  gray= #%02x%02x%02x\n' "$dec" "$gray" "$gray" "$gray"
    fi
}

for i in $(seq 0 255); do
    tohex ${i}
done

다음과 같이 사용하세요("기본"은 처음 16개 색상, "색상"은 기본 그룹, "회색"은 마지막 회색 색상임).

$ tohex 125                  ### A number in range 0-255
dec= 125 color= #af005f
$ tohex 6
dec=   6 basic= #008080
$ tohex 235
dec= 235  gray= #262626

답변2

이것tput유용256색 조회 테이블을 사용하여 인쇄8비트 ANSI 이스케이프 시퀀스(와로 시작 Esc) [활용터미널 기능이므로 이러한 제어 시퀀스는 색상으로 해석될 수 있습니다. 이는 그래픽 카드에 일반적으로 사용되는 사전 정의된 256가지 색상입니다.

터미널에서 256가지 색상을 모두 인쇄하려면 다음 줄을 시도해 보십시오.

for c in {0..255}; do tput setaf $c; tput setaf $c | cat -v; echo =$c; done

팁: | column열 목록에 추가하세요.

이 256색 조회 테이블은 다음에서도 찾을 수 있습니다.위키피디아 페이지다음과 같이:

다이어그램, ANSI 이스케이프 코드, Wikipedia의 8비트 256색 조회 테이블, 256색 모드 - 전경: ESC[38;5;#m 배경: ESC[48;5;#m

답변3

간단히 말해서, 웹에서 색상 차트를 찾아 색상 번호와 일치시킬 수 있습니다.

긴 대답은 올바른 매핑이 터미널에 따라 다르다는 것입니다.

이는 125터미널 설명에 참조된 이스케이프 시퀀스에 대한 매개변수입니다. 이 숫자는 특별한 의미가 없습니다. 이는 실제로 특정 터미널 에뮬레이터에 따라 다릅니다.setaftput

얼마 전 ANSI는 두 가지 번호 체계를 사용하여 8가지 색상 코드를 정의했습니다. 일부 터미널 설명에서는 이 두 개가 쌍 setf/setb또는 으로 처리됩니다 setaf/setab. 후자가 "ANSI 색상"이라는 의미를 갖기 때문에 더 자주 사용되는 것을 볼 수 있습니다. 전자(setf/setb)는 ncurses FAQ에 설명된 대로 빨간색/파란색 순서를 전환합니다.왜 빨간색/파란색으로 바뀌었나요?, 그러나 두 경우 모두 색상 번호 매기기 체계가 설정됩니다. 이러한 숫자와 RGB 콘텐츠 사이에는 미리 정의된 관계가 없습니다.

특정 터미널 에뮬레이터에 대해 미리 정의된 팔레트가 있으며 쉽게 열거할 수 있고 이러한 이스케이프 시퀀스를 프로그래밍 방식으로 사용할 수 있습니다. 가지다아니요관련 표준에 대해서는 xterm FAQ에 설명된 대로 터미널 에뮬레이터 간의 차이점을 확인할 수 있습니다.나는 그 파란색을 좋아하지 않는다.

그러나 규칙은 표준과 혼동되는 경우가 많습니다. 지난 20년 동안 xterm을 개발하면서 ANSI(8) 색상을 통합하고 aixterm기능(16) 색상을 조정했으며 88색 및 256색 확장을 추가했습니다. 대부분은 다른 개발자가 다른 터미널 에뮬레이터에서 사용했습니다. 이는 xterm FAQ에 요약되어 있습니다."xterm"을 "xterm-256color"와 동일하게 만드는 것은 어떨까요?.

xterm 소스 코드에는 예를 들어 tput사용될 동일한 이스케이프 시퀀스를 사용하여 색상을 보여주기 위한 스크립트가 포함되어 있습니다.

다음 질문/답변도 도움이 될 수 있습니다.Ansi 확장 색상 지수(17-255)의 색상에 대한 RGB 값

답변4

zsh를 사용하여 xterm터미널과 유사한( xterm그리고 최소한 ...과 같은 터미널 기반) 다음을 수행할 수 있습니다 vte.gnome-terminalxfce4-terminal

$ read -s -t1 -d $'\a' $'c?\e]4;125;?\a' && echo "${c##*;}"
rgb:afaf/0000/5f5f

배쉬에 해당:

read -s -t1 -d $'\a' -p $'\e]4;125;?\a' c && echo "${c##*;}"

(이스케이프 시퀀스 쿼리에서 색상을 보내길 원합니다.뒤쪽에터미널 규칙은 echo비활성화됩니다(사용됨 -s). 그렇지 않으면 응답이 라인 규칙에 따라 절반의 시간으로 표시되므로 read프롬프트의 일부로 전송됩니다( var?promptzsh에서는 ksh와 마찬가지로 -p promptbash에서).

색상 125의 정의를 얻습니다(여기서 RGB 사양으로, 각 숫자는 빨간색, 녹색 및 파란색 구성 요소의 강도이며 0과 FFFF 사이의 16진수 숫자로 표시됩니다).

다음을 사용하여 처음 16개 색상에 대해 동일한 작업을 수행할 수 있습니다 xtermcontrol.

$ xtermcontrol --get-color1
rgb:cdcd/0000/0000

관련 정보