ZSH 테마, 프롬프트 및 터미널 기반 테마의 차이점은 무엇입니까?

ZSH 테마, 프롬프트 및 터미널 기반 테마의 차이점은 무엇입니까?

어쩌면 내가 너무 많이 생각하기 시작했지만 적절한 설명을 찾을 수 없습니다. 나는 최근에 "힌트"의 모양과 사용되는 색상은 물론 텍스트 전체에서 색상이 사용되는 "위치"를 변경하는 여러 테마와 함께 제공되는 oh-my-zsh를 설치했습니다.

내가 올바르게 이해했다면 빨간색, 녹색, 파란색 등과 같은 여러 "기본" 색상이 있습니다. 그런 다음 대상은 "이봐, 나는 파란색을 원하는데 구체적인 파란색은 이 16진수 값이어야 합니다"라고 말할 수 있습니다.

사람들이 사용하는 터미널 에뮬레이터에서도 테마를 적용할 수 있는 이유가 무엇인지 궁금합니다. 저는 HyperJS를 사용하고 있으며 모든 색상을 담당하는 것처럼 보이는 테마를 적용할 수 있지만 프롬프트 레이아웃은 여전히 ​​oh-my-zsh를 통해 설정되어 있습니다.

oh-my-zsh에서 사용하는 테마와 터미널 테마의 차이점은 무엇입니까? 피험자가 무엇을 하고 있는지 등 자세한 내용을 설명해 주실 수 있나요?

답변1

Oh-my-zsh는 기본적으로 기본 작업을 수행합니다.promptinitzsh는 이미 이 작업을 수행하고 있습니다. 그들은 주제 파일을 소싱하여 조금 다르게 수행하고 있습니다. 기본 아이디어는 PS1, PS2, PS3 및 PS4 값을 수정하는 것입니다. 귀하의 터미널 에뮬레이터는 (내가 아는 한) 이러한 값을 변경하지 않습니다. 예를 들어, 터미널 에뮬레이터에서 글꼴의 기본 색상을 빨간색으로 설정하면 $reset_color는 빨간색이 됩니다.

스톡 ZSH 설치 위에 자신만의 테마를 쉽게 만들 수 있습니다. 예를 들어 저는 나만의 스톡 zsh 테마를 가지고 있습니다(팁):

~./.zsh/prompt/prompt_XXXXXXX_setup다음 내용으로 파일을 생성할 수 있습니다.

prompt_XXXXXXX_setup() {
    autoload -Uz colors && colors
    # You now have access to:
    # $fg[red] etc
    # $bg[red] etc
    # and the bold variant: $bg_bold and $fg_bold
    # and the $reset_color
    PROMPT="$fg_bold[blue]My shiney$reset_color $bg_bold[green]prompt %(!.#.%) " # although the docs seem to prefer you using PS1
}

prompt_XXXXXXX_setup "$@"

지금 이 프롬프트를 활성화하십시오:

zcompile ~/.zsh/prompt/prompt_XXXXXXX_setup # optional, but advised

# set this in your .zshrc and you will always have this as a prompt when using zsh
fpath=(~/.zsh/prompt $fpath)
autoload -Uz promptinit && promptinit && prompt XXXXXXX  

이제 프롬프트를 전환 prompt <name>하거나 프롬프트 목록을 얻을 수 있습니다 prompt -l. 좀 더 복잡한 설정을 원하시면 여기를 보세요:zsh-프롬프트-전력선또는내 설정. ZSH 문서도 참조하세요.여기아니면 소스코드프롬프트 초기화.

답변2

색상에 대한 터미널 지원은 다양한 표준으로 지정됩니다.ECMA-48또는 더 많은 색상을 추가하는 더 높은 표준입니다. 요즘 터미널은 대부분 가상 창이 아닌 가상 창입니다.전용 하드웨어TERM시뮬레이션된 터미널은 일반적으로 환경 변수를 설정하여 변경할 수 있습니다.색상을 지원하지 않는 터미널을 에뮬레이트할 수 있습니다., 예를 들어.

최신 터미널의 경우 색상을 원할 경우 일반적으로 TERM=xterm-256color이전 표준을 통해 훨씬 적은 수의 색상만 지정하여 256색 지원을 활성화하는 것이 좋습니다. 다양한 종류설명서에 정확한 코드가 자세히 나와 있습니다.색상을 생성하려면 수동으로 수행할 수 있습니다.

% print "\033[31;5mDANGER DANGER WILL ROBINSON\033[0m"
...

ncurses이식성을 위해 일반적으로 다양한 색상 코드에 대한 특정 ZSH 구문 과 같은 라이브러리를 사용하는 것이 더 좋습니다.

% print -P '%F{red}DANGER%f'
...
% print -P '%F{red}DANGER%f' | hexdump -C
00000000  1b 5b 33 31 6d 44 41 4e  47 45 52 1b 5b 33 39 6d  |.[31mDANGER.[39m|
00000010  0a                                                |.|
00000011
% print "\033[31;5mxxx\033[0m" | hexdump -C
00000000  1b 5b 33 31 3b 35 6d 78  78 78 1b 5b 30 6d 0a     |.[31;5mxxx.[0m.|
0000000f

oh-my-zsh가 수행하는 작업은 위와 유사한 임의의 코드를 묶는 것입니다. 이는 (결국) \033[31m위에 표시된 코드와 유사한 코드를 생성한 다음 터미널에서 사용하고 표시합니다(또는 표시하지 않음). 터미널이 이러한 코드를 처리하는 방법은 터미널에 따라 다릅니다 \033[31m("전경색 빨간색"). 터미널의 이러한 색상 설정 세트는 동일한 이름을 사용하더라도 터미널 소프트웨어에서 테마라고 부를 수 있습니다. , 이것은 oh-my-zsh 테마가 완전히 다르다는 것과 동일하지 않습니다.

관련 정보