Установить цвет строки состояния 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-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 и извлечение файла конфигурации и исполняемого скрипта из одного и того же файла, поэтому для его реализации необходимо изменить весь файл конфигурации, а не просто добавить пару строк. Правильно понять это будет не для всех, поэтому дайте им возможность отредактировать свою обычную конфигурацию, используя внешние скрипты, прежде чем предлагать ее объединить.
Калеб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.