Встановіть колір рядка статусу tmux на основі імені хоста


10

Я хотів би tmuxвибрати колір динамічно, базуючись на імені хоста машини. Оскільки я ділюсь tmux.confна декількох машинах, призначення унікального кольору для кожного з цих хостів було б зручно візуально, особливо при роботі над декількома одночасно. Це можливо?

Відповіді:


3

Я хотів і цієї функції. Я в основному все об'єднав у цей .tmux.conf

# cat <<__DATA__ >/dev/null
# Embed shell scripts

set -g status-utf8 on
set -g utf8 on

set -g default-terminal "screen-256color"

run "cut -c3- ~/.tmux.conf | bash -s apply_configuration"

# __DATA__
#
# apply_configuration() {
#    tmux set -g status-bg colour$(hash_string256 $(hostname))
# }
# hash_string256() {
#      hash_value=$(printf "%s" "$1" | md5sum | sed -e 's/[^[:alnum:]]\+//g' | tr "a-f" "A-F")
#      if [ "x" != "x$2" ]
#      then
#          v2="+ $2"
#      fi
#      echo "$(((0x$hash_value $v2) % 255))" | tr -d "-"
# }
# 
# $1

Я видалив, bcоскільки не мав цього в своєму git-bash. Таким чином, я хотів, щоб він працював як на моїх системах Linux, так і на windows з cygwin, не додаючи зайвих матеріалів.


Бояться, це може бути дурним питанням, але як я його точно використовувати? Я копіюю / вставляю її, але після перезавантаження .tmux.confя отримав "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. Тим не менш, мій рядок стану дійсно став червоним !!!

3

Я придумав таку функцію оболонки:

hash_string256() {
    # Hash $1 into a number
    hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
    # Add the hash with $2 and modulo 256 the result
    # if $2 == "" it is 0
    printf "ibase=16; (%s + %X) %% 100\n" $hash_value "$2" | bc
}

Цю функцію можна використовувати так (Результати вірні, якщо $HOSTє LOL):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Для підключення до нього tmuxможна використовувати сценарій, який запускається та налаштовується tmux.

#!/bin/sh
SESSION=$USER

hash_string256() {
    hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
    printf "ibase=16; (%s + %X) %% 100 \n" $hash_value "$2" | bc
}

tmux -2 new-session -d -s $SESSION

tmux set -g status-fg colour$(hash_string256 $HOST)
tmux set -g status-bg colour$(hash_string256 $HOST 127)

# Attach to session
tmux -2 attach-session -t $SESSION

Для імені хоста LOLвоно встановило status-fgб colour113і status-bgдо colour240. Цифра 127 in $(hash_string256 $HOST 127)існує, тому фон буде не таким, як колір переднього плану та далеко один від одного.

Для жодної системи GNU

Якщо ваша система має md5замість md5sumлінії

hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")

можна замінити на

hash_value=$(printf "%s" "$1" | md5 | tr "a-f" "A-F")

Якщо хтось знає спосіб використання функції всередині, tmux.confя би вдячний.
Рафаель Аренс

1
Мій конфігуратор tmux включає спосіб визначення та запуску довільних функцій оболонки, що містяться у файлі конфлікту tmux.
Калеб

@Caleb цікаво. Наразі у мене немає часу редагувати це у відповідь. Але я додам.
Рафаель Аренс

1
Можливо, ви хочете зробити це альтернативним закінченням для відповіді, а не вводити його в якості основної відповіді, оскільки це, ймовірно, може збити з пантелику будь-кого, хто не має якогось просунутого оболонки під своїм поясом. Рішення - це хак із залученням тут-документів, а також отримати конфігураційний файл та виконуваний скрипт з одного файлу, тому для його реалізації потрібно змінити весь конфігураційний файл, а не просто додати пару рядків. Визначити це правильно не для всіх, тому дайте їм змогу редагувати свою звичайну конфігурацію за допомогою зовнішніх скриптів, перш ніж припустити, що вони можуть бути пюре разом.
Калеб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.