mirror of
https://github.com/dustinkirkland/byobu.git
synced 2024-11-09 17:50:08 -08:00
217 lines
5.1 KiB
Bash
Executable File
217 lines
5.1 KiB
Bash
Executable File
#!/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/.byoburc" ] && . "$HOME/.byoburc"
|
|
[ -z "${BYOBU_PREFIX}" ] && export BYOBU_PREFIX="@prefix@" || 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,--hostname 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
|
|
;;
|
|
-l|--list)
|
|
listprofiles
|
|
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
|