byobu/bin/byobu-select-profile

212 行
5.0 KiB
Bash
実行ファイル

#!/bin/sh -e
#
# byobu-select-profile
# Copyright (C) 2008 Canonical Ltd.
#
# Authors: Dustin Kirkland <kirkland@byobu.org>
# Nick Barcet <nick.barcet@ubuntu.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# If you change any strings, please generate localization information with:
# ./debian/rules get-po
PKG="byobu"
[ -r "$HOME/.config/byoburc" ] && . "$HOME/.config/byoburc"
[ -z "${BYOBU_PREFIX}" ] && export BYOBU_PREFIX="/usr" || export BYOBU_PREFIX
. "${BYOBU_PREFIX}/lib/${PKG}/include/common"
TEXTDOMAIN="$PKG"
COLORS="default_light \
default_dark \
white \
black \
grey \
dark_grey \
light_grey \
blue \
light_blue \
cyan \
light_cyan \
green \
light_green \
purple \
light_purple \
red \
light_red \
yellow \
brown"
# Find a hash utility
for i in md5sum md5 sha512sum sha256sum sha1sum shasum shasum5.12 shasum5.10; do
if eval $BYOBU_TEST $i >/dev/null 2>&1; then
HASH="$i"
break
fi
done
usage () {
cat <<EOT
Usage: $0 [OPTION]
-l,--list list available profiles
-b,--background COLOR set the background color
-f,--foreground COLOR set the foreground color
-h,--hostnmae set the colors based on a hash of the hostname
-i,--ip set the colors based on a hash of the ip
-r,--random set the colors randomly
--help this help
EOT
}
# Initialize variables
FILE="$BYOBU_CONFIG_DIR/color"
PROFILE="$BYOBU_CONFIG_DIR/profile"
[ -r "$PROFILE" ] || ln -sf $BYOBU_PREFIX/share/$PKG/profiles/common "$PROFILE"
selected=-1
color=
listprofiles() {
# Display list of profiles, one per line
for x in $COLORS; do
echo "$x"
done
}
getletter() {
count=$(echo "$1" | wc -c)
if [ "$count" = "2" ]; then
echo "$1"
return
fi
color="$1"
case $color in
default_light) letter="d";;
default_dark) letter="D";;
black) letter="k";;
dark_grey) letter="K";;
blue) letter="b";;
light_blue) letter="B";;
cyan) letter="c";;
light_cyan) letter="C";;
green) letter="g";;
light_green) letter="G";;
purple) letter="m";;
light_purple) letter="M";;
red) letter="r";;
light_red) letter="R";;
grey) letter="w";;
light_grey) letter="W";;
white) letter="w";;
yellow) letter="Y";;
brown) letter="y";;
*) letter="d";;
esac
echo "$letter"
}
setcolor_screen() {
which="$1"
color="$2"
[ -r $FILE ] && . $FILE
if [ "$which" = "foreground" ]; then
FOREGROUND=$(getletter "$color")
else
BACKGROUND=$(getletter "$color")
fi
[ "$MONOCHROME" = "1" ] || MONOCHROME=0
printf "FOREGROUND=$FOREGROUND\nBACKGROUND=$BACKGROUND\nMONOCHROME=$MONOCHROME" > $FILE
touch "$BYOBU_RUN_DIR/reload-required"
$BYOBU_BACKEND -X at 0 source "$BYOBU_CONFIG_DIR/profile"
}
get_contrast() {
# See section 2.2: http://www.w3.org/TR/AERT#color-contrast
local awk="awk"
if eval $BYOBU_TEST gawk >/dev/null 2>&1; then
awk="gawk"
fi
local hex="$(echo "$1" | sed -e "s/\(..\)\(..\)\(..\)/\1 \2 \3/")"
local bright=$(echo $hex | $awk --non-decimal-data '{printf "%0.0f",(("0x"$1)*299+("0x"$2)*587+("0x"$3)*114)/1000}')
if [ $bright -ge 130 ]; then
_RET="black"
else
_RET="white"
fi
}
setcolor_tmux() {
if [ "$BYOBU_BACKEND" != "tmux" ]; then
echo "WARNING: This functionality is only supported in Byobu with the tmux backend" 1>&2
fi
dark="$1"
get_contrast "$dark"
light="$_RET"
accent="magenta"
highlight="red"
monochrome="0"
printf "BYOBU_DARK=\"$dark\"\nBYOBU_LIGHT=$light\nBYOBU_ACCENT=$accent\nBYOBU_HIGHLIGHT=$highlight\nMONOCHROME=$MONOCHROME" > "$FILE".tmux
tmux source "$BYOBU_PREFIX/share/byobu/profiles/tmuxrc"
}
if [ $# -eq 0 ]; then
usage
else
while true; do
case "$1" in
-b|--background)
setcolor_screen "background" "$2"
shift 2
;;
-f|--foreground)
setcolor_screen "foreground" "$2"
shift 2
;;
-h|--hostname)
color=$(hostname | $HASH | head -c 6)
setcolor_tmux "$color"
shift
break
;;
-i|--ip)
[ -r "$BYOBU_CONFIG_DIR/statusrc" ] && . "$BYOBU_CONFIG_DIR/statusrc"
. $BYOBU_PREFIX/lib/$PKG/ip_address
color=$(__ip_address t| $HASH | head -c 6)
setcolor_tmux "$color"
shift
break
;;
-r|--random)
color=$(head -c 10 /dev/urandom | $HASH | head -c 6)
setcolor_tmux "\#$color"
shift
break
;;
*)
usage
exit 1
;;
--)
shift
break
;;
esac
[ $# -eq 0 ] && break
done
fi
exit 0
# vi: syntax=sh ts=4 noexpandtab