1634 lines
39 KiB
Bash
Executable File
1634 lines
39 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# ANSI code generator
|
|
#
|
|
# © Copyright 2015 Tyler Akins
|
|
# Licensed under the MIT license with an additional non-advertising clause
|
|
# See http://github.com/fidian/ansi
|
|
|
|
ANSI_ESC=$'\033'
|
|
ANSI_CSI="${ANSI_ESC}["
|
|
ANSI_OSC="${ANSI_ESC}]"
|
|
ANSI_ST="${ANSI_ESC}\\"
|
|
ANSI_REPORT="" # The return value from ansi::report
|
|
|
|
ansi::backward() {
|
|
printf '%s%sD' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::bell() {
|
|
printf "%s" $'\007'
|
|
}
|
|
|
|
ansi::black() {
|
|
printf '%s30m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::blackIntense() {
|
|
printf '%s90m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::blink() {
|
|
printf '%s5m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::blue() {
|
|
printf '%s34m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::blueIntense() {
|
|
printf '%s94m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgBlack() {
|
|
printf '%s40m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgBlackIntense() {
|
|
printf '%s100m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgBlue() {
|
|
printf '%s44m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgBlueIntense() {
|
|
printf '%s104m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgColor() {
|
|
printf '%s48;5;%sm' "$ANSI_CSI" "$1"
|
|
}
|
|
|
|
ansi::bgCyan() {
|
|
printf '%s46m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgCyanIntense() {
|
|
printf '%s106m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgGreen() {
|
|
printf '%s42m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgGreenIntense() {
|
|
printf '%s102m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgMagenta() {
|
|
printf '%s45m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgMagentaIntense() {
|
|
printf '%s105m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgRed() {
|
|
printf '%s41m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgRgb() {
|
|
printf '%s48;2;%s;%s;%sm' "$ANSI_CSI" "$1" "$2" "$3"
|
|
}
|
|
|
|
ansi::bgRedIntense() {
|
|
printf '%s101m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgWhite() {
|
|
printf '%s47m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgWhiteIntense() {
|
|
printf '%s107m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgYellow() {
|
|
printf '%s43m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bgYellowIntense() {
|
|
printf '%s103m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::bold() {
|
|
printf '%s1m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::color() {
|
|
printf '%s38;5;%sm' "$ANSI_CSI" "$1"
|
|
}
|
|
|
|
ansi::colorCodes() {
|
|
local code i j
|
|
|
|
printf 'Standard: '
|
|
ansi::bold
|
|
ansi::white
|
|
|
|
for code in 0 1 2 3 4 5 6 7; do
|
|
if [[ "$code" == 7 ]]; then
|
|
ansi::black
|
|
fi
|
|
ansi::colorCodePatch "$code"
|
|
done
|
|
|
|
ansi::resetForeground
|
|
ansi::normal
|
|
printf '\nIntense: '
|
|
ansi::white
|
|
|
|
for code in 8 9 10 11 12 13 14 15; do
|
|
if [[ "$code" == 9 ]]; then
|
|
ansi::black
|
|
fi
|
|
ansi::colorCodePatch "$code"
|
|
done
|
|
|
|
ansi::resetForeground
|
|
printf '\n\n'
|
|
|
|
# for i in 16 22 28 34 40 46; do
|
|
for i in 16 22 28; do
|
|
for j in $i $((i+36)) $((i+72)) $((i+108)) $((i+144)) $((i+180)); do
|
|
ansi::white
|
|
ansi::bold
|
|
|
|
for code in $j $((j+1)) $((j+2)) $((j+3)) $((j+4)) $((j+5)); do
|
|
ansi::colorCodePatch "$code"
|
|
done
|
|
|
|
ansi::normal
|
|
ansi::resetForeground
|
|
printf ' '
|
|
ansi::black
|
|
|
|
for code in $((j+18)) $((j+19)) $((j+20)) $((j+21)) $((j+22)) $((j+23)); do
|
|
ansi::colorCodePatch "$code"
|
|
done
|
|
|
|
ansi::resetForeground
|
|
printf '\n'
|
|
done
|
|
|
|
printf '\n'
|
|
done
|
|
|
|
printf 'Grays: '
|
|
ansi::bold
|
|
ansi::white
|
|
|
|
for code in 232 233 234 235 236 237 238 239 240 241 242 243; do
|
|
ansi::colorCodePatch "$code"
|
|
done
|
|
|
|
ansi::resetForeground
|
|
ansi::normal
|
|
printf '\n '
|
|
ansi::black
|
|
|
|
for code in 244 245 246 247 248 249 250 251 252 253 254 255; do
|
|
ansi::colorCodePatch "$code"
|
|
done
|
|
|
|
ansi::resetForeground
|
|
printf '\n'
|
|
}
|
|
|
|
ansi::colorCodePatch() {
|
|
ansi::bgColor "$1"
|
|
printf ' %3s ' "$1"
|
|
ansi::resetBackground
|
|
}
|
|
|
|
ansi::colorTable() {
|
|
local colorLabel counter fnbLower fnbUpper functionName IFS resetFunction
|
|
|
|
fnbLower="$(
|
|
ansi::faint
|
|
printf f
|
|
ansi::normal
|
|
printf n
|
|
ansi::bold
|
|
printf b
|
|
ansi::normal
|
|
)"
|
|
fnbUpper="$(
|
|
ansi::faint
|
|
printf F
|
|
ansi::normal
|
|
printf N
|
|
ansi::bold
|
|
printf B
|
|
ansi::normal
|
|
)"
|
|
IFS=$' \n'
|
|
counter=
|
|
|
|
while read -r colorLabel functionName resetFunction; do
|
|
printf -- '--%s ' "$colorLabel"
|
|
$functionName
|
|
printf 'Sample'
|
|
$resetFunction
|
|
|
|
if [[ "$counter" == "x" ]]; then
|
|
counter=
|
|
printf '\n'
|
|
else
|
|
counter=x
|
|
ansi::column 40
|
|
fi
|
|
done <<END
|
|
bold ansi::bold ansi::normal
|
|
faint ansi::faint ansi::normal
|
|
italic ansi::italic ansi::plain
|
|
fraktur ansi::fraktur ansi::plain
|
|
underline ansi::underline ansi::noUnderline
|
|
double-underline ansi::doubleUnderline ansi::noUnderline
|
|
blink ansi::blink ansi::noBlink
|
|
rapid-blink ansi::rapidBlink ansi::noBlink
|
|
inverse ansi::inverse ansi::noInverse
|
|
invisible ansi::invisible ansi::visible
|
|
strike ansi::strike ansi::noStrike
|
|
frame ansi::frame ansi::noBorder
|
|
encircle ansi::encircle ansi::noBorder
|
|
overline ansi::overline ansi::noOverline
|
|
ideogram-right ansi::ideogramRight ansi::resetIdeogram
|
|
ideogram-right-double ansi::ideogramRightDouble ansi::resetIdeogram
|
|
ideogram-left ansi::ideogramLeft ansi::resetIdeogram
|
|
ideogram-left-double ansi::ideogramLeftDouble ansi::resetIdeogram
|
|
ideogram-stress ansi::ideogramStress ansi::resetIdeogram
|
|
END
|
|
|
|
if [[ -n "$counter" ]]; then
|
|
printf '\n'
|
|
fi
|
|
printf '\n'
|
|
printf ' black red green yellow blue magenta cyan white\n'
|
|
ansi::colorTableLine "(none)" "ansi::resetBackground" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-black" "ansi::bgBlack" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgBlackIntense" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-red" "ansi::bgRed" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgRedIntense" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-green" "ansi::bgGreen" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgGreenIntense" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-yellow" "ansi::bgYellow" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgYellowIntense" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-blue" "ansi::bgBlue" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgBlueIntense" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-magenta" "ansi::bgMagenta" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgMagentaIntense" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-cyan" "ansi::bgCyan" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgCyanIntense" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "bg-white" "ansi::bgWhite" "$fnbLower" "$fnbUpper"
|
|
ansi::colorTableLine "+ intense" "ansi::bgWhiteIntense" "$fnbLower" "$fnbUpper"
|
|
|
|
printf '\n'
|
|
printf 'Legend:\n'
|
|
printf ' Normal color: f = faint, n = normal, b = bold.\n'
|
|
printf ' Intense color: F = faint, N = normal, B = bold.\n'
|
|
}
|
|
|
|
ansi::colorTableLine() {
|
|
local fn
|
|
|
|
printf '%-12s' "$1"
|
|
for fn in ansi::black ansi::red ansi::green ansi::yellow ansi::blue ansi::magenta ansi::cyan ansi::white; do
|
|
$2
|
|
${fn}
|
|
printf '%s' "$3"
|
|
${fn}Intense
|
|
printf '%s' "$4"
|
|
ansi::resetForeground
|
|
ansi::resetBackground
|
|
|
|
if [[ "$fn" != "ansi::white" ]]; then
|
|
printf ' '
|
|
fi
|
|
done
|
|
printf '\n'
|
|
}
|
|
|
|
ansi::column() {
|
|
printf '%s%sG' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::columnRelative() {
|
|
printf '%s%sa' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::cyan() {
|
|
printf '%s36m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::cyanIntense() {
|
|
printf '%s96m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::deleteChars() {
|
|
printf '%s%sP' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::deleteLines() {
|
|
printf '%s%sM' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::doubleUnderline() {
|
|
printf '%s21m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::down() {
|
|
printf '%s%sB' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::encircle() {
|
|
printf '%s52m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::eraseDisplay() {
|
|
printf '%s%sJ' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::eraseChars() {
|
|
printf '%s%sX' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::eraseLine() {
|
|
printf '%s%sK' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::faint() {
|
|
printf '%s2m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::font() {
|
|
printf '%s1%sm' "$ANSI_CSI" "${1-0}"
|
|
}
|
|
|
|
ansi::forward() {
|
|
printf '%s%sC' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::fraktur() {
|
|
printf '%s20m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::frame() {
|
|
printf '%s51m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::green() {
|
|
printf '%s32m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::greenIntense() {
|
|
printf '%s92m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::hideCursor() {
|
|
printf '%s?25l' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::ideogramLeft() {
|
|
printf '%s62m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::ideogramLeftDouble() {
|
|
printf '%s63m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::ideogramRight() {
|
|
printf '%s60m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::ideogramRightDouble() {
|
|
printf '%s61m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::ideogramStress() {
|
|
printf '%s64m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::insertChars() {
|
|
printf '%s%s@' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::insertLines() {
|
|
printf '%s%sL' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::inverse() {
|
|
printf '%s7m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::invisible() {
|
|
printf '%s8m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::isAnsiSupported() {
|
|
# Optionally override detection logic
|
|
# to support post processors that interpret color codes _after_ output is generated.
|
|
# Use environment variable "ANSI_FORCE_SUPPORT=<anything>" to enable the override.
|
|
if [[ -n "${ANSI_FORCE_SUPPORT-}" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
if hash tput &> /dev/null; then
|
|
if [[ "$(tput colors)" -lt 8 ]]; then
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
fi
|
|
|
|
# Query the console and see if we get ANSI codes back.
|
|
# CSI 0 c == CSI c == Primary Device Attributes.
|
|
# Idea: CSI c
|
|
# Response = CSI ? 6 [234] ; 2 2 c
|
|
# The "22" means ANSI color, but terminals don't need to send that back.
|
|
# If we get anything back, let's assume it works.
|
|
ansi::report c "$ANSI_CSI?" c || return 1
|
|
[[ -n "$ANSI_REPORT" ]]
|
|
}
|
|
|
|
ansi::italic() {
|
|
printf '%s3m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::line() {
|
|
printf '%s%sd' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::lineRelative() {
|
|
printf '%s%se' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::magenta() {
|
|
printf '%s35m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::magentaIntense() {
|
|
printf '%s95m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::nextLine() {
|
|
printf '%s%sE' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::noBlink() {
|
|
printf '%s25m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::noBorder() {
|
|
printf '%s54m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::noInverse() {
|
|
printf '%s27m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::normal() {
|
|
printf '%s22m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::noOverline() {
|
|
printf '%s55m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::noStrike() {
|
|
printf '%s29m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::noUnderline() {
|
|
printf '%s24m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::overline() {
|
|
printf '%s53m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::plain() {
|
|
printf '%s23m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::position() {
|
|
local position="${1-}"
|
|
printf '%s%sH' "$ANSI_CSI" "${position/,/;}"
|
|
}
|
|
|
|
ansi::previousLine() {
|
|
printf '%s%sF' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::rapidBlink() {
|
|
printf '%s6m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::red() {
|
|
printf '%s31m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::redIntense() {
|
|
printf '%s91m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::repeat() {
|
|
printf '%s%sb' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::report() {
|
|
local buff c report
|
|
|
|
report=""
|
|
|
|
# Note: read bypass piping, which lets this work:
|
|
# ansi --report-window-chars | cut -d , -f 1
|
|
read -p "$ANSI_CSI$1" -r -N "${#2}" -s -t 1 buff
|
|
|
|
if [ "$buff" != "$2" ]; then
|
|
return 1
|
|
fi
|
|
|
|
read -r -N "${#3}" -s -t 1 buff
|
|
|
|
while [[ "$buff" != "$3" ]]; do
|
|
report="$report${buff:0:1}"
|
|
read -r -N 1 -s -t 1 c || exit 1
|
|
buff="${buff:1}$c"
|
|
done
|
|
|
|
ANSI_REPORT=$report
|
|
}
|
|
|
|
ansi::reportPosition() {
|
|
ansi::report 6n "$ANSI_CSI" R || return 1
|
|
printf '%s\n' "${ANSI_REPORT//;/,}"
|
|
}
|
|
|
|
ansi::reportIcon() {
|
|
ansi::report 20t "${ANSI_OSC}L" "$ANSI_ST" || return 1
|
|
printf '%s\n' "${ANSI_REPORT//;/,}"
|
|
}
|
|
|
|
ansi::reportScreenChars() {
|
|
ansi::report 19t "${ANSI_CSI}9;" t || return 1
|
|
printf '%s\n' "${ANSI_REPORT//;/,}"
|
|
}
|
|
|
|
ansi::reportTitle() {
|
|
ansi::report 21t "${ANSI_OSC}l" "$ANSI_ST" || return 1
|
|
printf '%s\n' "${ANSI_REPORT//;/,}"
|
|
}
|
|
|
|
ansi::reportWindowChars() {
|
|
ansi::report 18t "${ANSI_CSI}8;" t || return 1
|
|
printf '%s\n' "${ANSI_REPORT//;/,}"
|
|
}
|
|
|
|
ansi::reportWindowPixels() {
|
|
ansi::report 14t "${ANSI_CSI}4;" t || return 1
|
|
printf '%s\n' "${ANSI_REPORT//;/,}"
|
|
}
|
|
|
|
ansi::reportWindowPosition() {
|
|
ansi::report 13t "${ANSI_CSI}3;" t || return 1
|
|
printf '%s\n' "${ANSI_REPORT//;/,}"
|
|
}
|
|
|
|
ansi::reportWindowState() {
|
|
ansi::report 11t "$ANSI_CSI" t || return 1
|
|
case "$ANSI_REPORT" in
|
|
1)
|
|
printf 'open\n'
|
|
;;
|
|
|
|
2)
|
|
printf 'iconified\n'
|
|
;;
|
|
|
|
*)
|
|
printf 'unknown (%s)\n' "$ANSI_REPORT"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
ansi::reset() {
|
|
ansi::resetColor
|
|
ansi::resetFont
|
|
ansi::eraseDisplay 2
|
|
ansi::position "1;1"
|
|
ansi::showCursor
|
|
}
|
|
|
|
ansi::resetAttributes() {
|
|
printf '%s22;23;24;25;27;28;29;54;55m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::resetBackground() {
|
|
printf '%s49m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::resetColor() {
|
|
printf '%s0m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::resetFont() {
|
|
printf '%s10m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::resetForeground() {
|
|
printf '%s39m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::resetIdeogram() {
|
|
printf '%s65m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::restoreCursor() {
|
|
printf '%su' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::rgb() {
|
|
printf '%s38;2;%s;%s;%sm' "$ANSI_CSI" "$1" "$2" "$3"
|
|
}
|
|
|
|
ansi::saveCursor() {
|
|
printf '%ss' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::scrollDown() {
|
|
printf '%s%sT' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::scrollUp() {
|
|
printf '%s%sS' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::icon() {
|
|
printf '%s1;%s%s' "$ANSI_OSC" "${1-}" "$ANSI_ST"
|
|
}
|
|
|
|
ansi::title() {
|
|
printf '%s2;%s%s' "$ANSI_OSC" "${1-}" "$ANSI_ST"
|
|
}
|
|
|
|
ansi::showCursor() {
|
|
printf '%s?25h' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::showHelp() {
|
|
cat <<EOF
|
|
Generate ANSI escape codes
|
|
|
|
Please keep in mind that your terminal must support the code in order for you
|
|
to see the effect properly.
|
|
|
|
Usage
|
|
ansi [OPTIONS] [TEXT TO OUTPUT]
|
|
|
|
Option processing stops at the first unknown option or at "--". Options
|
|
are applied in order as specified on the command line. Unless --no-restore
|
|
is used, the options are unapplied in reverse order, restoring your
|
|
terminal to normal.
|
|
|
|
Optional parameters are surrounded in brackets and use reasonable defaults.
|
|
For instance, using --down will move the cursor down one line and --down=10
|
|
moves the cursor down 10 lines.
|
|
|
|
Display Manipulation
|
|
--insert-chars[=N], --insert-char[=N], --ich[=N]
|
|
Insert blanks at cursor, shifting the line right.
|
|
--erase-display[=N], --ed[=N]
|
|
Erase in display. 0=below, 1=above, 2=all,
|
|
3=saved.
|
|
--erase-line=[N], --el[=N]
|
|
Erase in line. 0=right, 1=left, 2=all.
|
|
--insert-lines[=N], --insert-line[=N], --il[=N]
|
|
--delete-lines[=N], --delete-line[=N], --dl[=N]
|
|
--delete-chars[=N], --delete-char[=N], --dch[=N]
|
|
--scroll-up[=N], --su[=N]
|
|
--scroll-down[=N], --sd[=N]
|
|
--erase-chars[=N], --erase-char[=N], --ech[=N]
|
|
--repeat[=N], --rep[=N] Repeat preceding character N times.
|
|
|
|
Cursor:
|
|
--up[=N], --cuu[=N]
|
|
--down[=N], --cud[=N]
|
|
--forward[=N], --cuf[=N]
|
|
--backward[=N], --cub[=N]
|
|
--next-line[=N], --cnl[=N]
|
|
--previous-line[=N], --prev-line[=N], --cpl[=N]
|
|
--column[=N], --cha[=N]
|
|
--position[=[ROW],[COL]], --cup[=[ROW],[=COL]]
|
|
--tab-forward[=N] Move forward N tab stops.
|
|
--tab-backward[=N] Move backward N tab stops.
|
|
--column-relative[=N], --hpr[=N]
|
|
--line[=N], --vpa[=N]
|
|
--line-relative[=N], --vpr[=N]
|
|
--save-cursor Saves the cursor position. Restores the cursor
|
|
after writing text to the terminal unless
|
|
--no-restore is also used.
|
|
--restore-cursor Just restores the cursor.
|
|
--hide-cursor Will automatically show cursor unless --no-restore
|
|
is also used.
|
|
--show-cursor
|
|
|
|
Text:
|
|
Attributes:
|
|
--bold, --faint, --normal
|
|
--italic, --fraktur, --plain
|
|
--underline, --double-underline, --no-underline
|
|
--blink, --rapid-blink, --no-blink
|
|
--inverse, --no-inverse
|
|
--invisible, --visible
|
|
--strike, --no-strike
|
|
--frame, --encircle, --no-border
|
|
--overline, --no-overline
|
|
--ideogram-right, --ideogram-right-double, --ideogram-left,
|
|
--ideogram-left-double, --ideogram-stress, --reset-ideogram
|
|
--font=NUM (NUM must be from 0 through 9 and 0 is the primary font)
|
|
Foreground:
|
|
--black, --red, --green, --yellow, --blue, --magenta, --cyan, --white,
|
|
--black-intense, --red-intense, --green-intense, --yellow-intense,
|
|
--blue-intense, --magenta-intense, --cyan-intense, --white-intense,
|
|
--color=CODE, --rgb=R,G,B
|
|
Background:
|
|
--bg-black, --bg-red, --bg-green, --bg-yellow, --bg-blue,
|
|
--bg-magenta, --bg-cyan, --bg-white, --bg-black-intense,
|
|
--bg-red-intense, --bg-green-intense, --bg-yellow-intense,
|
|
--bg-blue-intense, --bg-magenta-intense, --bg-cyan-intense,
|
|
--bg-white-intense, --bg-color=CODE, --bg-rgb=R,G,B
|
|
Reset:
|
|
--reset-attrib Removes bold, italics, etc.
|
|
--reset-foreground Sets foreground to default color.
|
|
--reset-background Sets background to default color.
|
|
--reset-color Resets attributes, foreground, background.
|
|
--reset-font Switches back to the primary font.
|
|
|
|
Report:
|
|
** NOTE: These require reading from stdin. Results are sent to stdout.
|
|
** If no response from terminal in 1 second, these commands fail.
|
|
--report-position ROW,COL
|
|
--report-window-state "open" or "iconified"
|
|
--report-window-position X,Y
|
|
--report-window-pixels HEIGHT,WIDTH
|
|
--report-window-chars ROWS,COLS
|
|
--report-screen-chars ROWS,COLS of the entire screen
|
|
--report-icon
|
|
--report-title
|
|
|
|
Miscellaneous:
|
|
--color-table Display a color table.
|
|
--color-codes Show the different color codes.
|
|
--icon=NAME Set the terminal's icon name.
|
|
--title=TITLE Set the terminal's window title.
|
|
--no-restore Do not issue reset codes when changing colors.
|
|
For example, if you change the color to green,
|
|
normally the color is restored to default
|
|
afterwards. With this flag, the color will
|
|
stay green even when the command finishes.
|
|
-n, --no-newline Suppress newline at the end of the line.
|
|
--bell Add the terminal's bell sequence to the output.
|
|
--reset Reset colors, clear screen, show cursor, move
|
|
cursor to (1,1), and reset the font.
|
|
EOF
|
|
}
|
|
|
|
ansi::strike() {
|
|
printf '%s9m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::tabBackward() {
|
|
printf '%s%sZ' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::tabForward() {
|
|
printf '%s%sI' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::underline() {
|
|
printf '%s4m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::up() {
|
|
printf '%s%sA' "$ANSI_CSI" "${1-}"
|
|
}
|
|
|
|
ansi::visible() {
|
|
printf '%s28m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::white() {
|
|
printf '%s37m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::whiteIntense() {
|
|
printf '%s97m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::yellow() {
|
|
printf '%s33m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi::yellowIntense() {
|
|
printf '%s93m' "$ANSI_CSI"
|
|
}
|
|
|
|
ansi() {
|
|
local addNewline b g m r readOptions restoreText restoreCursorPosition restoreCursorVisibility supported triggerRestore
|
|
local m10 m22 m23 m24 m25 m27 m28 m29 m39 m49 m54 m55 m65
|
|
|
|
addNewline=true
|
|
m10=
|
|
m22=
|
|
m23=
|
|
m24=
|
|
m25=
|
|
m27=
|
|
m28=
|
|
m29=
|
|
m39=
|
|
m49=
|
|
m54=
|
|
m55=
|
|
m65=
|
|
readOptions=true
|
|
restoreCursorPosition=false
|
|
restoreCursorVisibility=false
|
|
restoreText=false
|
|
supported=true
|
|
triggerRestore=true
|
|
|
|
if ! ansi::isAnsiSupported; then
|
|
supported=false
|
|
fi
|
|
|
|
while $readOptions && [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--help | -h | -\?)
|
|
ansi::showHelp
|
|
return 0
|
|
;;
|
|
|
|
# Display Manipulation
|
|
--insert-chars | --insert-char | --ich)
|
|
$supported && ansi::insertChars
|
|
;;
|
|
|
|
--insert-chars=* | insert-char=* | --ich=*)
|
|
$supported && ansi::insertChars "${1#*=}"
|
|
;;
|
|
|
|
--erase-display | --ed)
|
|
$supported && ansi::eraseDisplay
|
|
;;
|
|
|
|
--erase-display=* | --ed=*)
|
|
$supported && ansi::eraseDisplay "${1#*=}"
|
|
;;
|
|
|
|
--erase-line | --el)
|
|
$supported && ansi::eraseLine
|
|
;;
|
|
|
|
--erase-line=* | --el=*)
|
|
$supported && ansi::eraseLine "${1#*=}"
|
|
;;
|
|
|
|
--insert-lines | --insert-line | --il)
|
|
$supported && ansi::insertLines
|
|
;;
|
|
|
|
--insert-lines=* | --insert-line=* | --il=*)
|
|
$supported && ansi::insertLines "${1#*=}"
|
|
;;
|
|
|
|
--delete-lines | --delete-line | --dl)
|
|
$supported && ansi::deleteLines
|
|
;;
|
|
|
|
--delete-lines=* | --delete-line=* | --dl=*)
|
|
$supported && ansi::deleteLines "${1#*=}"
|
|
;;
|
|
|
|
--delete-chars | --delete-char | --dch)
|
|
$supported && ansi::deleteChars
|
|
;;
|
|
|
|
--delete-chars=* | --delete-char=* | --dch=*)
|
|
$supported && ansi::deleteChars "${1#*=}"
|
|
;;
|
|
|
|
--scroll-up | --su)
|
|
$supported && ansi::scrollUp
|
|
;;
|
|
|
|
--scroll-up=* | --su=*)
|
|
$supported && ansi::scrollUp "${1#*=}"
|
|
;;
|
|
|
|
--scroll-down | --sd)
|
|
$supported && ansi::scrollDown
|
|
;;
|
|
|
|
--scroll-down=* | --sd=*)
|
|
$supported && ansi::scrollDown "${1#*=}"
|
|
;;
|
|
|
|
--erase-chars | --erase-char | --ech)
|
|
$supported && ansi::eraseChars
|
|
;;
|
|
|
|
--erase-chars=* | --erase-char=* | --ech=*)
|
|
$supported && ansi::eraseChars "${1#*=}"
|
|
;;
|
|
|
|
--repeat | --rep)
|
|
$supported && ansi::repeat
|
|
;;
|
|
|
|
--repeat=* | --rep=N)
|
|
$supported && ansi::repeat "${1#*=}"
|
|
;;
|
|
|
|
# Cursor Positioning
|
|
--up | --cuu)
|
|
$supported && ansi::up
|
|
;;
|
|
|
|
--up=* | --cuu=*)
|
|
$supported && ansi::up "${1#*=}"
|
|
;;
|
|
|
|
--down | --cud)
|
|
$supported && ansi::down
|
|
;;
|
|
|
|
--down=* | --cud=*)
|
|
$supported && ansi::down "${1#*=}"
|
|
;;
|
|
|
|
--forward | --cuf)
|
|
$supported && ansi::forward
|
|
;;
|
|
|
|
--forward=* | --cuf=*)
|
|
$supported && ansi::forward "${1#*=}"
|
|
;;
|
|
|
|
--backward | --cub)
|
|
$supported && ansi::backward
|
|
;;
|
|
|
|
--backward=* | --cub=*)
|
|
$supported && ansi::backward "${1#*=}"
|
|
;;
|
|
|
|
--next-line | --cnl)
|
|
$supported && ansi::nextLine
|
|
;;
|
|
|
|
--next-line=* | --cnl=*)
|
|
$supported && ansi::nextLine "${1#*=}"
|
|
;;
|
|
|
|
--previous-line | --prev-line | --cpl)
|
|
$supported && ansi::previousLine
|
|
;;
|
|
|
|
--previous-line=* | --prev-line=* | --cpl=*)
|
|
$supported && ansi::previousLine "${1#*=}"
|
|
;;
|
|
|
|
--column | --cha)
|
|
$supported && ansi::column
|
|
;;
|
|
|
|
--column=* | --cha=*)
|
|
$supported && ansi::column "${1#*=}"
|
|
;;
|
|
|
|
--position | --cup)
|
|
$supported && ansi::position
|
|
;;
|
|
|
|
--position=* | --cup=*)
|
|
$supported && ansi::position "${1#*=}"
|
|
;;
|
|
|
|
--tab-forward | --cht)
|
|
$supported && ansi::tabForward
|
|
;;
|
|
|
|
--tab-forward=* | --cht=*)
|
|
$supported && ansi::tabForward "${1#*=}"
|
|
;;
|
|
|
|
--tab-backward | --cbt)
|
|
$supported && ansi::tabBackward
|
|
;;
|
|
|
|
--tab-backward=* | --cbt=*)
|
|
$supported && ansi::tabBackward "${1#*=}"
|
|
;;
|
|
|
|
--column-relative | --hpr)
|
|
$supported && ansi::columnRelative
|
|
;;
|
|
|
|
--column-relative=* | --hpr=*)
|
|
$supported && ansi::columnRelative "${1#*=}"
|
|
;;
|
|
|
|
--line | --vpa)
|
|
$supported && ansi::line
|
|
;;
|
|
|
|
--line=* | --vpa=*)
|
|
$supported && ansi::line "${1#*=}"
|
|
;;
|
|
|
|
--line-relative | --vpr)
|
|
$supported && ansi::lineRelative
|
|
;;
|
|
|
|
--line-relative=* | --vpr=*)
|
|
$supported && ansi::lineRelative "${1#*=}"
|
|
;;
|
|
|
|
--save-cursor)
|
|
$supported && ansi::saveCursor
|
|
restoreCursorPosition=true
|
|
;;
|
|
|
|
--restore-cursor)
|
|
$supported && ansi::restoreCursor
|
|
;;
|
|
|
|
--hide-cursor)
|
|
$supported && ansi::hideCursor
|
|
restoreCursorVisibility=true
|
|
;;
|
|
|
|
--show-cursor)
|
|
$supported && ansi::showCursor
|
|
;;
|
|
|
|
# Colors - Attributes
|
|
--bold)
|
|
$supported && ansi::bold
|
|
restoreText=true
|
|
m22="22;"
|
|
;;
|
|
|
|
--faint)
|
|
$supported && ansi::faint
|
|
restoreText=true
|
|
m22="22;"
|
|
;;
|
|
|
|
--italic)
|
|
$supported && ansi::italic
|
|
restoreText=true
|
|
m23="23;"
|
|
;;
|
|
|
|
--underline)
|
|
$supported && ansi::underline
|
|
restoreText=true
|
|
m24="24;"
|
|
;;
|
|
|
|
--blink)
|
|
$supported && ansi::blink
|
|
restoreText=true
|
|
m25="25;"
|
|
;;
|
|
|
|
--rapid-blink)
|
|
$supported && ansi::rapidBlink
|
|
restoreText=true
|
|
m25="25;"
|
|
;;
|
|
|
|
--inverse)
|
|
$supported && ansi::inverse
|
|
restoreText=true
|
|
m27="27;"
|
|
;;
|
|
|
|
--invisible)
|
|
$supported && ansi::invisible
|
|
restoreText=true
|
|
m28="28;"
|
|
;;
|
|
|
|
--strike)
|
|
$supported && ansi::strike
|
|
restoreText=true
|
|
m29="29;"
|
|
;;
|
|
|
|
--font|--font=0)
|
|
$supported && ansi::resetFont
|
|
;;
|
|
|
|
--font=[123456789])
|
|
$supported && ansi::font "${1#*=}"
|
|
restoreText=true
|
|
m10="10;"
|
|
;;
|
|
|
|
--fraktur)
|
|
$supported && ansi::fraktur
|
|
restoreText=true
|
|
m23="23;"
|
|
;;
|
|
|
|
--double-underline)
|
|
$supported && ansi::doubleUnderline
|
|
restoreText=true
|
|
m24="24;"
|
|
;;
|
|
|
|
--normal)
|
|
$supported && ansi::normal
|
|
;;
|
|
|
|
--plain)
|
|
$supported && ansi::plain
|
|
;;
|
|
|
|
--no-underline)
|
|
$supported && ansi::noUnderline
|
|
;;
|
|
|
|
--no-blink)
|
|
$supported && ansi::noBlink
|
|
;;
|
|
|
|
--no-inverse)
|
|
$supported && ansi::noInverse
|
|
;;
|
|
|
|
--visible)
|
|
$supported && ansi::visible
|
|
;;
|
|
|
|
--no-strike)
|
|
$supported && ansi::noStrike
|
|
;;
|
|
|
|
--frame)
|
|
$supported && ansi::frame
|
|
restoreText=true
|
|
m54="54;"
|
|
;;
|
|
|
|
--encircle)
|
|
$supported && ansi::encircle
|
|
restoreText=true
|
|
m54="54;"
|
|
;;
|
|
|
|
--overline)
|
|
$supported && ansi::overline
|
|
restoreText=true
|
|
m55="55;"
|
|
;;
|
|
|
|
--no-border)
|
|
$supported && ansi::noBorder
|
|
;;
|
|
|
|
--no-overline)
|
|
$supported && ansi::noOverline
|
|
;;
|
|
|
|
# Colors - Foreground
|
|
--black)
|
|
$supported && ansi::black
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--red)
|
|
$supported && ansi::red
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--green)
|
|
$supported && ansi::green
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--yellow)
|
|
$supported && ansi::yellow
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--blue)
|
|
$supported && ansi::blue
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--magenta)
|
|
$supported && ansi::magenta
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--cyan)
|
|
$supported && ansi::cyan
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--white)
|
|
$supported && ansi::white
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--black-intense)
|
|
$supported && ansi::blackIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--red-intense)
|
|
$supported && ansi::redIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--green-intense)
|
|
$supported && ansi::greenIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--yellow-intense)
|
|
$supported && ansi::yellowIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--blue-intense)
|
|
$supported && ansi::blueIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--magenta-intense)
|
|
$supported && ansi::magentaIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--cyan-intense)
|
|
$supported && ansi::cyanIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--white-intense)
|
|
$supported && ansi::whiteIntense
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--rgb=*,*,*)
|
|
r=${1#*=}
|
|
b=${r##*,}
|
|
g=${r#*,}
|
|
g=${g%,*}
|
|
r=${r%%,*}
|
|
$supported && ansi::rgb "$r" "$g" "$b"
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
--color=*)
|
|
$supported && ansi::color "${1#*=}"
|
|
restoreText=true
|
|
m39="39;"
|
|
;;
|
|
|
|
# Colors - Background
|
|
--bg-black)
|
|
$supported && ansi::bgBlack
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-red)
|
|
$supported && ansi::bgRed
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-green)
|
|
$supported && ansi::bgGreen
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-yellow)
|
|
$supported && ansi::bgYellow
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-blue)
|
|
$supported && ansi::bgBlue
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-magenta)
|
|
$supported && ansi::bgMagenta
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-cyan)
|
|
$supported && ansi::bgCyan
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-white)
|
|
$supported && ansi::bgWhite
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-black-intense)
|
|
$supported && ansi::bgBlackIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-red-intense)
|
|
$supported && ansi::bgRedIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-green-intense)
|
|
$supported && ansi::bgGreenIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-yellow-intense)
|
|
$supported && ansi::bgYellowIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-blue-intense)
|
|
$supported && ansi::bgBlueIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-magenta-intense)
|
|
$supported && ansi::bgMagentaIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-cyan-intense)
|
|
$supported && ansi::bgCyanIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-white-intense)
|
|
$supported && ansi::bgWhiteIntense
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-rgb=*,*,*)
|
|
r=${1#*=}
|
|
b=${r##*,}
|
|
g=${r#*,}
|
|
g=${g%,*}
|
|
r=${r%%,*}
|
|
$supported && ansi::bgRgb "$r" "$g" "$b"
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
--bg-color=*)
|
|
$supported && ansi::bgColor "${1#*=}"
|
|
restoreText=true
|
|
m49="49;"
|
|
;;
|
|
|
|
# Colors - Reset
|
|
--reset-attrib)
|
|
$supported && ansi::resetAttributes
|
|
;;
|
|
|
|
--reset-foreground)
|
|
$supported && ansi::resetForeground
|
|
;;
|
|
|
|
--reset-background)
|
|
$supported && ansi::resetBackground
|
|
;;
|
|
|
|
--reset-color)
|
|
$supported && ansi::resetColor
|
|
;;
|
|
|
|
--reset-font)
|
|
$supported && ansi::resetFont
|
|
;;
|
|
|
|
# Reporting
|
|
--report-position)
|
|
$supported || return 1
|
|
ansi::reportPosition || return $?
|
|
;;
|
|
|
|
--report-window-state)
|
|
$supported || return 1
|
|
ansi::reportWindowState || return $?
|
|
;;
|
|
|
|
--report-window-position)
|
|
$supported || return 1
|
|
ansi::reportWindowPosition || return $?
|
|
;;
|
|
|
|
--report-window-pixels)
|
|
$supported || return 1
|
|
ansi::reportWindowPixels || return $?
|
|
;;
|
|
|
|
--report-window-chars)
|
|
$supported || return 1
|
|
ansi::reportWindowChars || return $?
|
|
;;
|
|
|
|
--report-screen-chars)
|
|
$supported || return 1
|
|
ansi::reportScreenChars || return $?
|
|
;;
|
|
|
|
--report-icon)
|
|
$supported || return 1
|
|
ansi::reportIcon || return $?
|
|
;;
|
|
|
|
--report-title)
|
|
$supported || return 1
|
|
ansi::reportTitle || return $?
|
|
;;
|
|
|
|
--ideogram-right)
|
|
$supported && ansi::ideogramRight
|
|
restoreText=true
|
|
m65="65;"
|
|
;;
|
|
|
|
--ideogram-right-double)
|
|
$supported && ansi::ideogramRightDouble
|
|
restoreText=true
|
|
m65="65;"
|
|
;;
|
|
|
|
--ideogram-left)
|
|
$supported && ansi::ideogramLeft
|
|
restoreText=true
|
|
m65="65;"
|
|
;;
|
|
|
|
--ideogram-left-double)
|
|
$supported && ansi::ideogramLeftDouble
|
|
restoreText=true
|
|
m65="65;"
|
|
;;
|
|
|
|
--ideogram-stress)
|
|
$supported && ansi::ideogramStress
|
|
restoreText=true
|
|
m65="65;"
|
|
;;
|
|
|
|
--reset-ideogram)
|
|
$supported && ansi::noIdeogram
|
|
;;
|
|
|
|
# Miscellaneous
|
|
--color-codes)
|
|
if ! $supported; then
|
|
echo "ANSI is not supported in this terminal."
|
|
else
|
|
ansi::colorCodes
|
|
fi
|
|
|
|
return 0
|
|
;;
|
|
|
|
--color-table)
|
|
if ! $supported; then
|
|
echo "ANSI is not supported in this terminal."
|
|
else
|
|
ansi::colorTable
|
|
fi
|
|
|
|
return 0
|
|
;;
|
|
|
|
--icon)
|
|
$supported && ansi::icon ""
|
|
;;
|
|
|
|
--icon=*)
|
|
$supported && ansi::icon "${1#*=}"
|
|
;;
|
|
|
|
--title)
|
|
$supported && ansi::title ""
|
|
;;
|
|
|
|
--title=*)
|
|
$supported && ansi::title "${1#*=}"
|
|
;;
|
|
|
|
--no-restore)
|
|
triggerRestore=false
|
|
;;
|
|
|
|
-n | --no-newline)
|
|
addNewline=false
|
|
;;
|
|
|
|
--bell)
|
|
ansi::bell
|
|
;;
|
|
|
|
--reset)
|
|
$supported || return 0
|
|
ansi::reset
|
|
;;
|
|
|
|
--)
|
|
readOptions=false
|
|
shift
|
|
;;
|
|
|
|
*)
|
|
readOptions=false
|
|
;;
|
|
esac
|
|
|
|
if $readOptions; then
|
|
shift
|
|
fi
|
|
done
|
|
|
|
printf '%s' "${1-}"
|
|
|
|
if [[ "$#" -gt 1 ]]; then
|
|
shift || :
|
|
printf "${IFS:0:1}%s" "${@}"
|
|
fi
|
|
|
|
if $supported && $triggerRestore; then
|
|
if $restoreCursorPosition; then
|
|
ansi::restoreCursor
|
|
fi
|
|
|
|
if $restoreCursorVisibility; then
|
|
ansi::showCursor
|
|
fi
|
|
|
|
if $restoreText; then
|
|
m="$m10$m22$m23$m24$m25$m27$m28$m29$m39$m49$m54$m55$m65"
|
|
printf '%s%sm' "$ANSI_CSI" "${m%;}"
|
|
fi
|
|
fi
|
|
|
|
if $addNewline; then
|
|
printf '\n'
|
|
fi
|
|
}
|
|
|
|
|
|
# Run if not sourced
|
|
if [[ "$0" == "${BASH_SOURCE[0]}" ]]; then
|
|
ansi "$@" || exit $?
|
|
fi
|