Можно ли изменить цвет терминала в зависимости от режима Nightshift (закат/-восход)

Этот ответ относится к GNU -для awk :он использует массивы -из -массивов

gawk '
    NR == FNR { f1[$1][$2] = 1; next }
    $1 in f1 {
        for (val in f1[$1]) {
            if (0+$2 <= 0+val && 0+val <= 0+$3) {
                print $1, val, $4
            }
        }
    }
' file1 file2

Бизнес 0+xв условии if гарантирует, что ваши значения сравниваются как числа, а не строки. Это необходимо, потому что при сравнении строки "10" <= "23444" <= "30" равно true .

1
04.04.2021, 21:00
1 ответ

Я не знаю о вашем конкретном эмуляторе терминала, но в xterm(, чей API скопировали многие эмуляторы терминала ), вы можете сделать:

printf '\e]11;%s\a' colorname

для установки цвета фона. Где название цвета может быть любой спецификацией цвета, поддерживаемой функцией библиотеки XParseColor()X.

Тогда вы могли бы zshотправлять escape-последовательности с цветом, соответствующим положению солнца на небе, перед каждым приглашением с чем-то вроде:

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. Это не всегда может дать вам правильное значение. Вместо этого вы можете жестко закодировать его, если вы не путешествуете.

3
28.04.2021, 22:54

Теги

Похожие вопросы