Установить цвет строки состояния 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, не добавляя лишних вещей.

DrMilk
источник
Боюсь, это глупый вопрос, но как мне его использовать? Я скопировал / вставил его, но после перезагрузки .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-fgto colour113и status-bgto colour240. Там есть число 127, $(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 включает в себя способ определения и запуска произвольных функций оболочки, содержащихся в файле conf tmux.
Калеб
@ Калеб интересно. В настоящее время у меня нет времени, чтобы изменить его в ответ. Но я добавлю это.
Рафаэль Аренс
1
Возможно, вы захотите сделать его альтернативным окончанием для ответа вместо того, чтобы вводить его в качестве основного ответа, потому что это может сбить с толку любого, кто не имеет какой-то продвинутой оболочки foo под своим поясом. Решением является хакерство с использованием here-docs и извлечение файла конфигурации и исполняемого скрипта из одного и того же файла, поэтому для его реализации необходимо изменить весь файл конфигурации, а не просто добавить пару строк. Правильно понять это будет не для всех, поэтому дайте им возможность отредактировать свою обычную конфигурацию, используя внешние скрипты, прежде чем предлагать ее объединить.
Калеб