2
0
mirror of https://github.com/bpkg/bpkg synced 2024-11-09 19:10:24 +00:00
bpkg/lib/term/term.sh
Joseph Werle a7bbe0383a add term
2014-05-24 13:05:32 -04:00

294 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
## version
VERSION="0.0.1"
## coords
let _x=0
let _y=0
## output error to stderr
error () {
printf >&2 "error: %s\n" "${@}"
}
## output usage
usage () {
echo "usage: term [-hV] <command> [args]"
}
## write code to terminal
term_write () {
local let c="${1}"
## ensure
if [ -z "${c}" ]; then
return 1
fi
printf "\e[${c}"
return 0
}
## cursor operations
term_cursor () {
local op="$1"
if [ -z "${op}" ]; then
return 1
fi
case "${op}" in
hide) term write "?25l" ;;
show) term write "?25h" ;;
*) return 1 ;;
esac
return 0
}
## move to (x, y)
term_move () {
local let x="${1}"
local let y="${2}"
## ensure
if [ -z "${x}" ] || [ -z "${y}" ]; then
return 1
fi
## set state
(( _x = ${x} ))
(( _y = ${y} ))
## write
printf "\e[%d;%d;f" ${y} ${x}
return 0
}
term_transition () {
local let x="${1}"
local let y="${2}"
if [ -z "${x}" ] || [ -z "${y}" ]; then
return 1
fi
(( x = ${x} + ${_x} ))
(( y = ${y} + ${_y} ))
term move "${x}" "${y}"
return 0
}
## set terminal color
term_color () {
local color="${1}"
local fmt="\e[3%dm"
if [ -z "${color}" ]; then
return 1
fi
case "${color}" in
black) printf "${fmt}" "0" ;;
red) printf "${fmt}" "1" ;;
green) printf "${fmt}" "2" ;;
yellow) printf "${fmt}" "3" ;;
blue) printf "${fmt}" "4" ;;
magenta) printf "${fmt}" "5" ;;
cyan) printf "${fmt}" "6" ;;
white) printf "${fmt}" "7" ;;
gray|grey) printf "\e[90m" ;;
*) return 1 ;;
esac
return 0
}
## set term background color
term_background () {
local color="${1}"
local fmt="\e[4%dm"
if [ -z "${color}" ]; then
return 1
fi
case "${color}" in
black) printf "${fmt}" "0" ;;
red) printf "${fmt}" "1" ;;
green) printf "${fmt}" "2" ;;
yellow) printf "${fmt}" "3" ;;
blue) printf "${fmt}" "4" ;;
magenta) printf "${fmt}" "5" ;;
cyan) printf "${fmt}" "6" ;;
white) printf "${fmt}" "7" ;;
*) return 1 ;;
esac
return 0
}
## reset terminal escape sequence
term_reset () {
term write "0m"
}
## make terminal bright
term_bright () {
term write "1m"
}
## make terminal dim
term_dim () {
term write "2m"
}
## make terminal underlined
term_underline () {
term write "4m"
}
## make terminal blink
term_blink () {
term write "5m"
}
## make terminal reverse
term_reverse () {
term write "7m"
}
## make terminal hidden
term_hidden () {
term write "8m"
}
## clear a terminal section by name
term_clear () {
local section="${1}"
local fmt="\e[%s"
if [ -z "${section}" ]; then
return 1
fi
case "${section}" in
start) printf "${fmt}" "1K";;
end) printf "${fmt}" "K";;
line) printf "${fmt}" "2K";;
screen|up) printf "${fmt}" "1J";;
down) printf "${fmt}" "J";;
*) return 1 ;;
esac
return 0
}
##
# Term functions
#
# usage: term [-hV] <command>
##
term () {
local arg="$1"
local cmd=""
shift
case "${arg}" in
## flags
-V|--version)
echo "${VERSION}"
return 0
;;
-h|--help)
usage
## commands
{
echo
echo "commands: "
echo
echo " write <code> Write a terminal escape code"
echo " cursor <op> Perform operation to cursor"
echo " color <color> Set terminal color by name (See colors)"
echo " background <color> Set terminal background by name (See colors)"
echo " move <x> <y> Move to (x, y)"
echo " transition <x> <y> Transition to (x, y)"
echo " clear <section> Clear terminal section by name (See sections)"
echo " reset Reset the terminal escape code sequence"
echo " bright Write bright escape code"
echo " dim Write dim escape code"
echo " underline Write underline escape code"
echo " blink Write blink escape code"
echo " reverse Write reverse escape code"
echo " hidden Write hidden escape code"
}
## colors
{
echo
echo "colors:"
echo
term color black
echo " black $ term color black"
term color red
echo " red $ term color red"
term color green
echo " green $ term color green"
term color yellow
echo " yellow $ term color yellow"
term color blue
echo " blue $ term color blue"
term color magenta
echo " magenta $ term color magenta"
term color cyan
echo " cyan $ term color cyan"
term color white
echo " white $ term color white"
term color gray
echo " gray|grey $ term color gray"
term reset
}
## sections
{
echo
echo "sections:"
echo
echo " start Start of line"
echo " end End of line"
echo " up Upper section"
echo " down Lower section"
echo " line Current line"
echo " screen Entire screen"
}
return 0
;;
*)
cmd="term_${arg}"
if type "${cmd}" > /dev/null 2>&1; then
"${cmd}" "${@}"
return $?
else
if [ ! -z "${arg}" ]; then
error "Unknown argument: \`${arg}'"
fi
usage
return 1
fi
;;
esac
}
## detect if being sourced and
## export if so else execute
## main function with args
if [[ ${BASH_SOURCE[0]} != $0 ]]; then
export -f term
else
term "${@}"
fi