호스트 이름을 기준으로 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

bcgit-bash에 없기 때문에 사용을 제거 했습니다. 따라서 추가 항목을 추가하지 않고 Linux 시스템과 cygwin이있는 Windows에서 모두 작동하기를 원했습니다.


이것이 어리석은 질문 일지 모르지만 정확히 어떻게 사용합니까? 나는 그것을 복사 / 붙여 넣었지만 다시로드 한 후에 .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
}

이 함수는 다음과 같이 사용할 수 있습니다 ( $HOSTis 인 경우 결과는 참 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-fgcolour113status-bgcolour240. 숫자가 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감사하겠습니다.
Raphael Ahrens

1
내 tmux 설정 에는 tmux conf 파일에 포함 된 임의의 셸 함수를 정의하고 실행하는 방법이 포함되어 있습니다.
Caleb

@Caleb 흥미로운. 현재 답변을 편집 할 시간이 없습니다. 그러나 나는 그것을 추가 할 것입니다.
Raphael Ahrens

1
벨트 아래에 고급 쉘 foo가없는 사람으로부터 도대체 혼란을 줄 수 있기 때문에 대답을 주요 답변으로 입력하지 않고 대안으로 끝나기를 원할 수도 있습니다. 해결책은 here-docs를 포함하고 동일한 파일에서 구성 파일과 실행 스크립트를 모두 얻는 해킹이므로이를 구현하려면 몇 줄을 추가하는 것이 아니라 전체 구성 파일을 변경해야합니다 . 올바르게 작성하는 것이 모든 사람에게 해당되는 것은 아니므로 외부 스크립트를 사용하여 정기적으로 구성을 편집하여 함께 으를 수 있다고 제안하십시오.
Caleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.