added support for formatted boxes
This commit is contained in:
parent
e38b44c542
commit
82c576129b
1 changed files with 75 additions and 24 deletions
99
functions
99
functions
|
|
@ -287,6 +287,46 @@ set-boxtype() {
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
format_boxborder() {
|
||||||
|
local alignment="left"
|
||||||
|
local box_type="norm"
|
||||||
|
|
||||||
|
# Parse options
|
||||||
|
while [[ "$1" == --* ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--center)
|
||||||
|
alignment="center"
|
||||||
|
;;
|
||||||
|
--right)
|
||||||
|
alignment="right"
|
||||||
|
;;
|
||||||
|
--box-type=*)
|
||||||
|
box_type="${1#--box-type=}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set box type
|
||||||
|
set-boxtype
|
||||||
|
|
||||||
|
boxtop
|
||||||
|
for line in "$@"; do
|
||||||
|
case "$alignment" in
|
||||||
|
center)
|
||||||
|
center "$line"
|
||||||
|
;;
|
||||||
|
right)
|
||||||
|
right_align "$line"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
boxline "$line"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
boxbottom
|
||||||
|
}
|
||||||
|
|
||||||
update_terminal_width
|
update_terminal_width
|
||||||
set-boxtype
|
set-boxtype
|
||||||
|
|
||||||
|
|
@ -314,14 +354,6 @@ repchar() {
|
||||||
printf -v result "%*s" "$count" ""
|
printf -v result "%*s" "$count" ""
|
||||||
echo "${result// /$char}"
|
echo "${result// /$char}"
|
||||||
}
|
}
|
||||||
test_boxtop() {
|
|
||||||
echo "Debug - BOXWIDTH: $BOXWIDTH" >&2
|
|
||||||
echo "Debug - top_border: '$top_border'" >&2
|
|
||||||
echo "Debug - left_top_border: '$left_top_border'" >&2
|
|
||||||
local rep_result=$(repchar "$top_border" "$((BOXWIDTH-1))")
|
|
||||||
echo "Debug - repchar result: '$rep_result'" >&2
|
|
||||||
printf "%s%s%s\n" "${brdr}$left_top_border" "$rep_result" "$right_top_border${dfl}"
|
|
||||||
}
|
|
||||||
|
|
||||||
boxtop() {
|
boxtop() {
|
||||||
printf "%s%s%s\n" "${brdr}$left_top_border" "$(repchar "$top_border" "$((BOXWIDTH-1))")" "$right_top_border${dfl}"
|
printf "%s%s%s\n" "${brdr}$left_top_border" "$(repchar "$top_border" "$((BOXWIDTH-1))")" "$right_top_border${dfl}"
|
||||||
|
|
@ -348,7 +380,7 @@ boxseparator(){
|
||||||
printf '%s%s%s\n' "${brdr}" "$(repchar "$box_break_line" $((BOXWIDTH-3)))" "${dfl}"
|
printf '%s%s%s\n' "${brdr}" "$(repchar "$box_break_line" $((BOXWIDTH-3)))" "${dfl}"
|
||||||
}
|
}
|
||||||
|
|
||||||
boxborder() {
|
boxborder(){
|
||||||
boxtop
|
boxtop
|
||||||
for line in "$@" ; do
|
for line in "$@" ; do
|
||||||
boxline "$line"
|
boxline "$line"
|
||||||
|
|
@ -356,21 +388,7 @@ boxborder() {
|
||||||
boxbottom
|
boxbottom
|
||||||
}
|
}
|
||||||
|
|
||||||
boxlinelog() {
|
# Experimental!
|
||||||
local _cmd=${@:1}
|
|
||||||
#echo -e "$left_border $(logger echo -e "${1}")\r${ESC}[${BOXWIDTH}C$right_border"
|
|
||||||
logger echo -e "$left_border $_cmd\r${ESC}[${BOXWIDTH}C$right_border"
|
|
||||||
}
|
|
||||||
|
|
||||||
boxborderlog(){
|
|
||||||
local _cmd=()
|
|
||||||
boxtop
|
|
||||||
for line in "$@" ; do
|
|
||||||
boxlinelog "$line"
|
|
||||||
done
|
|
||||||
boxbottom
|
|
||||||
}
|
|
||||||
|
|
||||||
subboxborder() {
|
subboxborder() {
|
||||||
level=${1:-0}
|
level=${1:-0}
|
||||||
local indent=$((level*2))
|
local indent=$((level*2))
|
||||||
|
|
@ -452,6 +470,39 @@ center() {
|
||||||
"$right_border"
|
"$right_border"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
right_align() {
|
||||||
|
local text="$1"
|
||||||
|
# Early return for non-interactive/debug mode
|
||||||
|
if (( !interactive )) || (( xtrace )); then
|
||||||
|
printf "%s %s\n" "$text"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Calculate available inner width (total width minus borders)
|
||||||
|
local inner_width=$(( BOXWIDTH - 2 ))
|
||||||
|
local text_length=$(get_visual_length "$text")
|
||||||
|
|
||||||
|
# If text is too long, just print it with borders
|
||||||
|
if (( text_length >= inner_width )); then
|
||||||
|
printf "%s%s%s\n" "$left_border" "$text" "$right_border"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Calculate padding size
|
||||||
|
local padding=$(( inner_width - text_length ))
|
||||||
|
|
||||||
|
# Create padding string
|
||||||
|
local pad
|
||||||
|
printf -v pad "%*s" "$padding" ""
|
||||||
|
|
||||||
|
# Print with consistent borders
|
||||||
|
printf "%s%s%s%s\n" \
|
||||||
|
"$left_border" \
|
||||||
|
"$pad" \
|
||||||
|
"$text" \
|
||||||
|
"$right_border"
|
||||||
|
}
|
||||||
|
|
||||||
# For printing spanned text, e.g. single-pair lists ($name...$title)
|
# For printing spanned text, e.g. single-pair lists ($name...$title)
|
||||||
spanner() {
|
spanner() {
|
||||||
local left="$1"
|
local left="$1"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue