ホスト名に基づいて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に使用していなかったため、を削除しました。したがって、追加のものを追加せずにcygwinを使用してLinuxシステムと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
}

この関数は次のように使用できます(の場合、結果はtrue $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-fgcolour113してstatus-bgまで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私はそれを感謝します。
Raphael Ahrens、2014

1
私のtmux設定には、tmux confファイル内に含まれる任意のシェル関数を定義して実行する方法が含まれています。
カレブ2016年

@Caleb興味深い。現在、私は答えを編集する時間はありません。しかし、追加します。
Raphael Ahrens、2016年

1
主な回答として入力するのではなく、それを回答の別のエンディングにしたいと思うかもしれません。なぜなら、ベルトの下に高度なシェルfooを持たない人を混乱させる可能性があるからです。解決策はヒアドキュメントを含むハックであり、構成ファイルと実行可能スクリプトの両方を同じファイルから取得するため、これを実装するには、数行を追加するだけでなく、構成ファイル全体を変更する必要があります。正しく理解することは誰にとっても難しいことなので、一緒にマッシュアップできることを提案する前に、外部スクリプトを使用して通常の構成を編集する方法を提供してください。
2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.