Đặt màu dòng trạng thái tmux dựa trên tên máy chủ


10

Tôi muốn tmuxchọn một màu động dựa trên tên máy chủ của máy. Vì tôi chia sẻ máy của mình tmux.conftrên nhiều máy, việc chỉ định một màu duy nhất cho từng máy chủ đó sẽ rất hữu ích, đặc biệt là khi làm việc trên nhiều máy cùng một lúc. Đây có phải là có thể làm được?

Câu trả lời:


3

Tôi muốn tính năng này là tốt. Về cơ bản, tôi đã hợp nhất mọi thứ vào .tmux.conf này

# 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

Tôi đã xóa bằng cách sử dụng bcvì tôi không có nó trong git-bash của mình. Vì vậy, tôi muốn nó hoạt động trên cả hệ thống linux và windows của tôi với cygwin mà không cần thêm công cụ bổ sung.


Sợ đây có thể là một câu hỏi ngớ ngẩn, nhưng làm thế nào để tôi sử dụng chính xác nó? Tôi sao chép / dán nó nhưng sau khi tải lại, tôi .tmux.confđã nhận được "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. Tuy nhiên, thanh trạng thái của tôi thực sự chuyển sang màu đỏ !!!

3

Tôi đã đưa ra chức năng shell sau:

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
}

Hàm này có thể được sử dụng như thế này (Kết quả là đúng nếu $HOSTLOL):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Để kết nối nó với tmuxbạn có thể sử dụng một tập lệnh bắt đầu và cấu hình 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

Đối với hostname LOLnó sẽ thiết lập status-fgđể colour113status-bgđể colour240. Số 127 trong $(hash_string256 $HOST 127)đó là có nên nền sẽ không giống với màu nền trước và cách xa nhau.

Đối với không có hệ thống GNU

Nếu hệ thống của bạn có md5thay vì md5sumdòng

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

có thể được thay thế bằng

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

Nếu ai đó biết cách sử dụng chức năng bên trong thì tmux.conftôi sẽ đánh giá cao nó.
Raphael AhDR

1
Cấu hình tmux của tôi bao gồm một cách để xác định và chạy các hàm shell tùy ý tự chứa bên trong tệp conf tmux.
Caleb

@Caleb thú vị. Hiện tại tôi không có thời gian để chỉnh sửa nó để trả lời. Nhưng tôi sẽ thêm nó.
Raphael AhDR

1
Bạn có thể muốn làm cho nó một kết thúc thay thế cho câu trả lời thay vì nhập nó làm câu trả lời chính bởi vì nó có thể gây nhầm lẫn cho bất kỳ ai không có một số foo shell tiên tiến trong vành đai của họ. Giải pháp là một vụ hack liên quan đến tài liệu ở đây và để lấy cả tệp cấu hình và tập lệnh thực thi ra khỏi cùng một tệp, do đó, việc thực hiện này đòi hỏi phải thay đổi toàn bộ tệp cấu hình, không chỉ thêm một vài dòng. Làm cho đúng sẽ không dành cho tất cả mọi người, vì vậy hãy cho họ cách chỉnh sửa cấu hình thông thường của họ bằng cách sử dụng các tập lệnh bên ngoài trước khi đề xuất nó có thể được trộn lẫn với nhau.
Caleb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.