mirror of https://github.com/bpkg/bpkg
add term
parent
0bb1f96029
commit
a7bbe0383a
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Joseph Werle
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -0,0 +1,14 @@
|
||||
|
||||
BIN ?= term
|
||||
PREFIX ?= /usr/local
|
||||
|
||||
install:
|
||||
cp term.sh $(PREFIX)/bin/$(BIN)
|
||||
|
||||
uninstall:
|
||||
rm -f $(PREFIX)/bin/$(BIN)
|
||||
|
||||
example.sh:
|
||||
./example.sh
|
||||
|
||||
.PHONY: example.sh
|
@ -0,0 +1,100 @@
|
||||
term.sh
|
||||
=======
|
||||
|
||||
Terminal fun written in bash inspired by clibs/term
|
||||
|
||||
## install
|
||||
|
||||
```sh
|
||||
$ make install
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
$ . term.sh
|
||||
```
|
||||
|
||||
## usage
|
||||
|
||||
```
|
||||
usage: term [-hV] <command> [args]
|
||||
```
|
||||
|
||||
## example
|
||||
|
||||
```sh
|
||||
$ { term color green; } && { term underline; } && { echo heyaaaa; }
|
||||
heyaaaa
|
||||
```
|
||||
|
||||
## api
|
||||
|
||||
```
|
||||
commands:
|
||||
|
||||
write <code> Write a terminal escape code
|
||||
cursor <op> Perform operation to cursor
|
||||
color <color> Set terminal color by name (See colors)
|
||||
background <color> Set terminal background by name (See colors)
|
||||
move <x> <y> Move to (x, y)
|
||||
transition <x> <y> Transition to (x, y)
|
||||
clear <section> Clear terminal section by name (See sections)
|
||||
reset Reset the terminal escape code sequence
|
||||
bright Write bright escape code
|
||||
dim Write dim escape code
|
||||
underline Write underline escape code
|
||||
blink Write blink escape code
|
||||
reverse Write reverse escape code
|
||||
hidden Write hidden escape code
|
||||
|
||||
colors:
|
||||
|
||||
black $ term color black
|
||||
red $ term color red
|
||||
green $ term color green
|
||||
yellow $ term color yellow
|
||||
blue $ term color blue
|
||||
magenta $ term color magenta
|
||||
cyan $ term color cyan
|
||||
white $ term color white
|
||||
gray|grey $ term color gray
|
||||
|
||||
sections:
|
||||
|
||||
start Start of line
|
||||
end End of line
|
||||
up Upper section
|
||||
down Lower section
|
||||
line Current line
|
||||
screen Entire screen
|
||||
```
|
||||
|
||||
## histogram
|
||||
|
||||
See `example.sh`
|
||||
|
||||
```
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
█
|
||||
. █
|
||||
█
|
||||
. █
|
||||
█ █
|
||||
. █ █
|
||||
█ █
|
||||
█ █
|
||||
. █ █ █ █ █ █ █ █ █ █ █
|
||||
```
|
||||
|
||||
## license
|
||||
|
||||
MIT
|
@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
|
||||
## include
|
||||
. term.sh
|
||||
|
||||
## data
|
||||
declare -a data=( 0 2 3 1 3 3 3 8 2 12 4 2 4 3 )
|
||||
|
||||
## clean up everything
|
||||
cleanup () {
|
||||
## clear
|
||||
term clear screen
|
||||
## bring back cursor
|
||||
term cursor show
|
||||
return 0
|
||||
}
|
||||
|
||||
## on SIGINT signal
|
||||
onsigint () {
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
## clear screen
|
||||
term clear screen
|
||||
|
||||
## position to top left
|
||||
term move 0 0
|
||||
|
||||
## clear line
|
||||
term clear line
|
||||
|
||||
## hide cursor
|
||||
term cursor hide
|
||||
|
||||
## catch sigint
|
||||
trap "onsigint" SIGINT
|
||||
|
||||
|
||||
## main loop
|
||||
{
|
||||
let pad=3
|
||||
let n=0
|
||||
let w=($(tput cols))
|
||||
let h=($(tput lines))
|
||||
let x=0
|
||||
let y=0
|
||||
let len="${#data[@]}"
|
||||
|
||||
term clear screen
|
||||
|
||||
term move ${pad} 1
|
||||
|
||||
## y axis
|
||||
for (( n = 0; n < (h - pad - 1); n += 2 )); do
|
||||
term transition 0 2
|
||||
term color gray
|
||||
printf "."
|
||||
done
|
||||
|
||||
y=( ${h} - 2 )
|
||||
term move ${pad} ${y}
|
||||
|
||||
## x axis
|
||||
for (( n = 0; n < (w - pad * 3); n += 6)); do
|
||||
term color gray
|
||||
printf "."
|
||||
term transition 6 0
|
||||
done
|
||||
|
||||
x=0
|
||||
for (( i = 0; i < len; ++i )); do
|
||||
let n="${data[$i]}"
|
||||
while (( n-- )); do
|
||||
if (( n < 0 )); then
|
||||
break
|
||||
fi
|
||||
let a=( ${x} * 6 + ${pad} )
|
||||
let b=( ${h} - ${n} + ${pad} )
|
||||
#echo $a $b
|
||||
term move ${a} ${b}
|
||||
term reset
|
||||
printf "█"
|
||||
done
|
||||
(( x++ ))
|
||||
sleep .5
|
||||
done
|
||||
|
||||
h=( ${h} - 1)
|
||||
term move ${w} ${h}
|
||||
}
|
||||
|
||||
## clean up terminal
|
||||
cleanup
|
||||
|
||||
## exit
|
||||
exit $?
|
||||
|
@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "term",
|
||||
"version": "0.0.1",
|
||||
"description": "Terminal utility functions",
|
||||
"scripts": [ "term.sh" ],
|
||||
"install": "make install"
|
||||
}
|
@ -0,0 +1,293 @@
|
||||
#!/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
|
Loading…
Reference in New Issue