Compare commits
1 Commits
4896c23a60
...
v2506.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4089ab2f4 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +0,0 @@
|
|||||||
*\.old
|
|
||||||
snippets/
|
|
||||||
tools/
|
|
||||||
146
builtin/cli.bash
146
builtin/cli.bash
@@ -21,15 +21,20 @@ export U_ITEM="\u21e2"
|
|||||||
export U_TICK="\u2713"
|
export U_TICK="\u2713"
|
||||||
export U_FAIL="\u2715"
|
export U_FAIL="\u2715"
|
||||||
|
|
||||||
#export COLS="$(( $(tput cols) - 1 ))"
|
export COLS="$(( $(tput cols) - 1 ))"
|
||||||
export EL=$(tput el)
|
export EL=$(tput el)
|
||||||
|
|
||||||
|
: "cli.clear"
|
||||||
|
function cli.clear {
|
||||||
|
clear
|
||||||
|
}
|
||||||
|
|
||||||
# Get the cursor current position and returns CURSOR_X, CURSOR_Y
|
# Get the cursor current position and returns CURSOR_X, CURSOR_Y
|
||||||
: "cli.get_cursor"
|
: "cli.get_cursor"
|
||||||
cli.get_cursor() {
|
cli.get_cursor() {
|
||||||
local _xy
|
local _xy
|
||||||
|
|
||||||
echo -ne $"\e[6n"
|
echo -ne $"\E[6n"
|
||||||
read -rsdR _xy
|
read -rsdR _xy
|
||||||
_xy="${_xy#*[}"
|
_xy="${_xy#*[}"
|
||||||
export CURSOR_X=${_xy/*;}
|
export CURSOR_X=${_xy/*;}
|
||||||
@@ -39,45 +44,21 @@ cli.get_cursor() {
|
|||||||
# Puts the cursor at x:y (defaults to 0:0)
|
# Puts the cursor at x:y (defaults to 0:0)
|
||||||
: "cli.set_cursor <x> <y>"
|
: "cli.set_cursor <x> <y>"
|
||||||
cli.set_cursor() {
|
cli.set_cursor() {
|
||||||
printf "\e[%sH" "${2:0};${1:0}"
|
printf "\E[%sH" "${2:0};${1:0}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Puts cursor N lines up
|
# Just prints N blank lines
|
||||||
: "cli.lineup [<number_lines>]"
|
: "cli.jump <number_lines>"
|
||||||
cli.lineup() {
|
cli.jump() {
|
||||||
printf "\e[%sA${EL}\e[0F" "${1:-1}"
|
for i in $(seq 1 ${1:-1}); do
|
||||||
}
|
printf "%s${EL}\n"
|
||||||
|
|
||||||
# Puts cursor N lines down
|
|
||||||
: "cli.linedown [<number_lines>]"
|
|
||||||
cli.linedown() {
|
|
||||||
printf "\e[%sB${EL}\e[0F" "${1:-1}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Clears the screen below cursor position
|
|
||||||
: "cli.clear"
|
|
||||||
cli.clear() {
|
|
||||||
cli.writeln
|
|
||||||
cli.lineup
|
|
||||||
cli.get_cursor
|
|
||||||
local _lines=$((( $(tput lines) - ${CURSOR_Y} - 1 )))
|
|
||||||
for i in $(seq 1 ${_lines}); do
|
|
||||||
cli.writeln
|
|
||||||
done
|
done
|
||||||
cli.set_cursor 0 ${CURSOR_Y}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Just prints a blank line
|
|
||||||
: "cli.writeln"
|
|
||||||
cli.writeln() {
|
|
||||||
cli.linedown
|
|
||||||
printf "\n"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Just like printf
|
# Just like printf
|
||||||
: "cli.print [<printf_format>] <arg1> [<arg2> ...]"
|
: "cli.print [<printf_format>] <arg1> [<arg2> ...]"
|
||||||
cli.print() {
|
cli.print() {
|
||||||
printf "${1:-}" ${@:2}
|
printf $"${1}" ${@:2}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Folds text at 'size' column
|
# Folds text at 'size' column
|
||||||
@@ -88,9 +69,8 @@ cli.fold() {
|
|||||||
|
|
||||||
: "cli.status <status> [<printf_format>] <arg>"
|
: "cli.status <status> [<printf_format>] <arg>"
|
||||||
cli.status() {
|
cli.status() {
|
||||||
local fmt="${2:-}"
|
local fmt=${2//\\n}
|
||||||
fmt="${fmt//\\n}"
|
cli.jump
|
||||||
cli.writeln
|
|
||||||
case "${1:-info}" in
|
case "${1:-info}" in
|
||||||
debug) printf "\e[0F${S_DEBUG}${fmt:-%s}${@:3}${EL}\n" ;;
|
debug) printf "\e[0F${S_DEBUG}${fmt:-%s}${@:3}${EL}\n" ;;
|
||||||
crit*) printf "\e[0F${S_CRIT}${fmt:-%s}${@:3}${EL}\n" ;;
|
crit*) printf "\e[0F${S_CRIT}${fmt:-%s}${@:3}${EL}\n" ;;
|
||||||
@@ -150,7 +130,7 @@ cli.items() {
|
|||||||
printf "${U_ITEM} ${1:-%s}" "${@:2}"
|
printf "${U_ITEM} ${1:-%s}" "${@:2}"
|
||||||
}
|
}
|
||||||
|
|
||||||
: "cli.item <text>"
|
: "cli.items <text>"
|
||||||
cli.item() {
|
cli.item() {
|
||||||
cli.items "%s\n" "${@}" | head -1
|
cli.items "%s\n" "${@}" | head -1
|
||||||
}
|
}
|
||||||
@@ -159,106 +139,45 @@ cli.item() {
|
|||||||
cli.title() {
|
cli.title() {
|
||||||
cli.items "%s" "$(cli.emphasis blue "%s" "${@^^}")"
|
cli.items "%s" "$(cli.emphasis blue "%s" "${@^^}")"
|
||||||
cli.line
|
cli.line
|
||||||
cli.writeln
|
|
||||||
}
|
}
|
||||||
|
|
||||||
: "cli.subtitle <text> [noline]"
|
: "cli.subtitle <text>"
|
||||||
cli.subtitle() {
|
cli.subtitle() {
|
||||||
printf "%0.s\u2508%s"
|
printf "%0.s\u2508%s"
|
||||||
cli.bold " ${@^^} "
|
cli.bold " ${@^^} "
|
||||||
cli.get_cursor
|
cli.get_cursor
|
||||||
for i in $(seq 0 $((( $(tput cols) - ${CURSOR_X} )))); do
|
for i in $(seq 0 $((( ${COLS} - ${CURSOR_X} )))); do
|
||||||
printf "%0.s\u2508"
|
printf "%0.s\u2508"
|
||||||
done
|
done
|
||||||
cli.writeln
|
cli.jump
|
||||||
}
|
}
|
||||||
|
|
||||||
: "cli.prompt <prompt_text> [<options>] [<var>]"
|
: "cli.prompt <tab_size> [<prompt_text>]"
|
||||||
cli.prompt() {
|
cli.prompt() {
|
||||||
local k=
|
read -p "$(cli.print ${1:-})" k
|
||||||
_get_var() { : "${@:$#}"; echo "${_//-*/}"; }
|
echo ${k}
|
||||||
_get_opts() { echo "${@//${_var}/}"; }
|
|
||||||
case ${#@} in
|
|
||||||
1)
|
|
||||||
_prompt="$(cli.print "${1:-}")"
|
|
||||||
_var=k
|
|
||||||
_opts=
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_prompt="$(cli.print "${1:-}")"
|
|
||||||
_var=$(_get_var ${@:2})
|
|
||||||
_opts=$(_get_opts ${@:2})
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
read -p "$(cli.print "${1:-}")" ${_opts} ${_var:-k}
|
|
||||||
! [[ -z "${k}" ]] && echo "${k}" || :
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Draws a horizontal line
|
# Draws a horizontal line
|
||||||
: "cli.line [nobreak]"
|
: "cli.line [nobreak]"
|
||||||
cli.line() {
|
cli.line() {
|
||||||
[[ -z "${1:-}" ]] && cli.writeln
|
[[ -z "${1:-}" ]] && cli.jump
|
||||||
for i in $(seq 1 $(tput cols)); do
|
for i in $(seq 1 ${COLS}); do
|
||||||
printf "%0.s\u2504"
|
printf "%0.s\u2504"
|
||||||
done
|
done
|
||||||
[[ -z "${1:-}" ]] && cli.writeln
|
[[ -z "${1:-}" ]] && cli.jump
|
||||||
}
|
}
|
||||||
|
|
||||||
# Draws a thin horizontal divisor line
|
# Draws a thin horizontal divisor line
|
||||||
: "cli.boldline"
|
: "cli.boldline"
|
||||||
cli.boldline() {
|
cli.boldline() {
|
||||||
for i in $(seq 1 $(tput cols)); do
|
for i in $(seq 1 ${COLS}); do
|
||||||
printf "%0.s\u2581"
|
printf "%0.s\u2581"
|
||||||
done
|
done
|
||||||
cli.writeln
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cli.subprocess.output() {
|
|
||||||
while readarray -t -n ${1:-10} buffer && ((${#buffer[@]})); do
|
|
||||||
cli.set_cursor 0 ${CURSOR_Y}
|
|
||||||
local _max_len=$(( $(tput cols) - 18 ))
|
|
||||||
for line in "${buffer[@]}"; do
|
|
||||||
! [[ -z "${line}" ]] \
|
|
||||||
&& cli.color purple " %s" "${line:0:${_max_len}}${EL}" \
|
|
||||||
&& cli.writeln
|
|
||||||
done
|
|
||||||
done
|
|
||||||
cli.set_cursor 0 ${CURSOR_Y}
|
|
||||||
for _i in {1..${1}}; do
|
|
||||||
cli.writeln
|
|
||||||
done
|
|
||||||
cli.set_cursor 0 ${CURSOR_Y}
|
|
||||||
}
|
|
||||||
|
|
||||||
cli.subprocess.success() {
|
|
||||||
cli.set_cursor 0 ${CURSOR_Y}
|
|
||||||
printf " ${S_SUCCESS}%s\n" "${@:1:1}${EL}"
|
|
||||||
for p in ${@:2}; do
|
|
||||||
cli.tab 2; cli.print "$(
|
|
||||||
cli.color green "$(cli.item ${p}${EL})"
|
|
||||||
)\n"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
cli.subprocess.failure() {
|
|
||||||
cli.set_cursor 0 ${CURSOR_Y}
|
|
||||||
printf " ${S_ERROR}%s\n" "${@:1:1}${EL}"
|
|
||||||
if [[ -f "${2:-}" ]]; then
|
|
||||||
tail -${4:-50} ${@:2:1} 2>/dev/null | while read line; do
|
|
||||||
cli.tab 2; cli.print "$(
|
|
||||||
cli.color red "${3:-Log}: ${line}${EL}"
|
|
||||||
)\n"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
cli.lineup
|
|
||||||
cli.clear
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
: "cli.section <printf_format> <title> <subtitle> <content>"
|
: "cli.section <printf_format> <title> <subtitle> <content>"
|
||||||
cli.section() {
|
cli.section() {
|
||||||
cli.set_cursor 0 0
|
|
||||||
__section.header() {
|
__section.header() {
|
||||||
__section.title() {
|
__section.title() {
|
||||||
printf $"${@:1:1}" \
|
printf $"${@:1:1}" \
|
||||||
@@ -267,15 +186,13 @@ cli.section() {
|
|||||||
}
|
}
|
||||||
__section.title.underline() {
|
__section.title.underline() {
|
||||||
cli.boldline
|
cli.boldline
|
||||||
cli.writeln
|
|
||||||
}
|
}
|
||||||
__section.title "${@}"
|
__section.title "${@}"
|
||||||
__section.title.underline
|
__section.title.underline
|
||||||
}
|
}
|
||||||
__section.content() {
|
__section.content() {
|
||||||
cli.linedown
|
cli.jump 2
|
||||||
cli.fold $(tput cols) "${@}"
|
cli.fold ${COLS} "${@}"
|
||||||
cli.writeln
|
|
||||||
}
|
}
|
||||||
__section.footer() {
|
__section.footer() {
|
||||||
__section.footer.line() {
|
__section.footer.line() {
|
||||||
@@ -283,10 +200,9 @@ cli.section() {
|
|||||||
}
|
}
|
||||||
__section.footer.line
|
__section.footer.line
|
||||||
}
|
}
|
||||||
cli.clear
|
|
||||||
__section.header "${@:1:3}"
|
__section.header "${@:1:3}"
|
||||||
! [[ -z "${@:4}" ]] && __section.content "${@:4}"
|
__section.content "${@:4}"
|
||||||
! [[ -z "${@:4}" ]] && __section.footer
|
__section.footer
|
||||||
}
|
}
|
||||||
|
|
||||||
cli.self_compress() {
|
cli.self_compress() {
|
||||||
|
|||||||
1274
sig-installer-dev
1274
sig-installer-dev
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user