야간 근무(일출/설정)를 기반으로 하는 조건부 터미널 색상을 원합니다.
저는 macOS BigSur 11.2.3과 zsh가 포함된 기본 터미널을 사용하고 있습니다.
답변1
특정 터미널 에뮬레이터를 모르지만 xterm
(많은 터미널 에뮬레이터에서 API를 복사했습니다) 다음을 수행할 수 있습니다.
printf '\e]11;%s\a' colorname
배경색을 설정합니다. 어디색상 이름X 라이브러리 함수가 지원하는 모든 색상 사양이 가능합니다 XParseColor()
.
zsh
그런 다음 다음과 같이 각 프롬프트 앞에 하늘의 태양 위치에 해당하는 색상을 사용하여 이스케이프 시퀀스를 보낼 수 있습니다 .
MY_LONGITUDE=$(curl -s 'http://ip-api.com/line?fields=lon')
# sanitise to avoid command injection vulnerability
[[ $MY_LONGITUDE = (-|)<0-180>(.<->|) ]] || MY_LONGITUDE=0
zmodload zsh/datetime
settermbg() {
local sun_time distance_to_noon hue value chroma
(( sun_time = (${1-EPOCHSECONDS} + MY_LONGITUDE * 86400 / 360) % 86400 ))
(( distance_to_noon = (sun_time - 43200. ) / 43200 )) # between -1 and 1
(( hue = (distance_to_noon + 1) * 180 ))
(( value = 100 - distance_to_noon ** 2 * 50 ))
(( chroma = distance_to_noon ** 2 * 60 ))
printf '\e]11;TekHVC:%5g/%5g/%5g\a' $hue $value $chroma
}
precmd_functions+=(settermbg)
여기에 사용된 색상 규격의 값 TekHVC:hue/value/chroma
은 태양이 하늘에서 가장 높고 배경이 가장 밝고 가장 하얗게 보이는 정오(태양시)까지의 거리를 기준으로 계산됩니다.
여기에서 귀하의 경도(태양이 하늘에서 가장 높은 시기를 결정하는 데 사용됨)는 제공된 온라인 서비스를 사용하여 귀하의 IP 주소를 기반으로 결정됩니다 ip-api.com
. 항상 올바른 값을 제공하는 것은 아닙니다. 여행하지 않는다면 하드코딩해야 할 수도 있습니다.