# -f Set foreground.
# -F Set highlight foreground.
# -m Set mouse.
+# -P Palette index.
+# -p Set palette reference with -P.
# Notes: Border defaults to background.
+# The -P and -p flags must be used together.
+# Colour spec can be a simple number, to copy the
+# existing palette entry for that index.
#
+PROG=ucolour
+tmux_prefix=
+[ -n "$TMUX" ] && tmux_prefix="\033Ptmux;\033"
+
+function parse_colour() {
+ local arg=$1; shift
+ local safe=${arg//[1-9]/}
+
+ if [ "$safe" = "0" -o -z "$safe" ]; then
+ # Hack to get existing.
+ local index=$(
+ local index
+ exec < /dev/tty
+ local oldstty=$(stty -g)
+ stty raw -echo min 0
+ echo -en "$tmux_prefix\033]4;$arg;?\007" > /dev/tty
+ local ret=1
+ local tries=0
+ while [ $ret -gt 0 ]; do
+ tries=$((tries+1))
+ IFS='' read -t 0
+ ret=$?
+ if [ $tries -gt 2 ]; then
+ [ $tries -gt 3 ] && break
+ sleep 1
+ fi
+ done
+ IFS='' read -r index
+ stty $oldstty
+ echo "$index"
+ )
+ if [ -n "$index" ]; then
+ index=${index##*;}
+ index=${index%?}
+ echo "$index"
+ echo >&2 "$PROG: Colour $arg is $index."
+ return 0
+ fi
+ else
+ echo "$arg"
+ return 0
+ fi
+
+ echo ""
+ return 1
+}
+
BG=
FG=
bg=
fg=
cu=
mo=
-tmux_prefix=
-while getopts ":B:F:b:c:d:f:m:" opt; do
+pc=
+ps=
+while getopts ":B:F:P:b:c:d:f:m:p:" opt; do
case $opt in
- B) BG=$OPTARG;;
- F) FG=$OPTARG;;
- b) bg=$OPTARG;;
- c) cu=$OPTARG;;
- d) bd=$OPTARG;;
- f) fg=$OPTARG;;
- m) mo=$OPTARG;;
+ B) BG=$(parse_colour $OPTARG);;
+ F) FG=$(parse_colour $OPTARG);;
+ P) pc=$OPTARG;;
+ b) bg=$(parse_colour $OPTARG);;
+ c) cu=$(parse_colour $OPTARG);;
+ d) bd=$(parse_colour $OPTARG);;
+ f) fg=$(parse_colour $OPTARG);;
+ m) mo=$(parse_colour $OPTARG);;
+ p) ps=$(parse_colour $OPTARG);;
esac
done
shift $((OPTIND-1))
+if [ -n "$pc" -o -n "$ps" ]; then
+ if [ -z "$pc" -o -z "$ps" ]; then
+ echo >&2 "$PROG: Must use -P and -p together."
+ exit 1
+ fi
+fi
[ -n "$bg" -a -z "$bd" ] && bd=$bg
-if [ -z "$BG$FG$bd$bg$cu$fg$mo" ]; then
+if [ -z "$BG$FG$bd$bg$cu$fg$mo$pc" ]; then
echo >&2 "Usage: ucolour option <colour> [option <colour> ...]"
echo >&2 "Options: -b Set background."
echo >&2 " -B Set highlight background."
echo >&2 " -f Set foreground."
echo >&2 " -F Set highlight foreground."
echo >&2 " -m Set mouse."
+ echo >&2 " -P Palette index."
+ echo >&2 " -p Set palette reference with -P."
echo >&2 "Notes: Border defaults to background."
+ echo >&2 " The -P and -p flags must be used together."
exit 1
fi
-[ -n "$TMUX" ] && tmux_prefix="\033Ptmux;\033"
[ -n "$BG" ] && echo -en "$tmux_prefix\033]17;$BG\007"
[ -n "$FG" ] && echo -en "$tmux_prefix\033]19;$FG\007"
[ -n "$bg" ] && echo -en "$tmux_prefix\033]11;$bg\007"
[ -n "$cu" ] && echo -en "$tmux_prefix\033]12;$cu\007"
[ -n "$fg" ] && echo -en "$tmux_prefix\033]10;$fg\007"
[ -n "$mo" ] && echo -en "$tmux_prefix\033]13;$mo\007"
+[ -n "$pc" ] && echo -en "$tmux_prefix\033]4;$pc;$ps\007"
exit 0