From 006893f138f0d60e50a2f4682ec860d5d136171f Mon Sep 17 00:00:00 2001 From: davidovski Date: Tue, 26 Apr 2022 23:29:51 +0100 Subject: added xit, simple tui engine --- src/glyphs.sh | 18 ++++ src/parseconf.sh | 0 src/xichroot.sh | 0 src/xit.sh | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 305 insertions(+) mode change 100755 => 100644 src/parseconf.sh mode change 100755 => 100644 src/xichroot.sh create mode 100644 src/xit.sh diff --git a/src/glyphs.sh b/src/glyphs.sh index 118b016..fce29b2 100644 --- a/src/glyphs.sh +++ b/src/glyphs.sh @@ -10,3 +10,21 @@ export LARGE_CIRCLE="ā—Æ" export REFRESH="šŸ—˜" export TABCHAR="ā•°ā”ˆāž¤ " export XI="Īž" + +export LOGO_SMALL="ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ +ā–€ ā–€ + ā–ˆā–„ā–„ā–ˆ + ā–ˆā–€ā–€ā–ˆ +ā–„ ā–„ +ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ" + +export LOGO="ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ +ā–€ ā–€ + + + ā–ˆā–„ā–„ā–„ā–„ā–„ā–„ā–ˆ + ā–ˆā–€ā–€ā–€ā–€ā–€ā–€ā–ˆ + + +ā–„ ā–„ +ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ" diff --git a/src/parseconf.sh b/src/parseconf.sh old mode 100755 new mode 100644 diff --git a/src/xichroot.sh b/src/xichroot.sh old mode 100755 new mode 100644 diff --git a/src/xit.sh b/src/xit.sh new file mode 100644 index 0000000..9b6ac6c --- /dev/null +++ b/src/xit.sh @@ -0,0 +1,287 @@ +#!/bin/sh + +################################################################# +#ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ# +#ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ# +#ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ# +#ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ# +#ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ# +#ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ # +#ā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆ# +# # +# # +# # +# # +# # +# # +# # +#ā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆ# +#ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ # +#ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ# +#ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ# +#ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ ā–ˆ ā–ˆā–ˆā–ˆ ā–ˆ# +#ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ ā–ˆ# +#ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ# +################################################################# + +. /usr/lib/colors.sh + +COLOR_FG=${LIGHT_BLUE} +COLOR_BG=${BG_WHITE} + +t_init () { + t_styl_cur H + tput clear + t_set_tty + t_gen_ptrn + +} + +t_set_tty () { + export SAVED_TTY_SETTINGS=$(stty -g) + stty raw -echo +} + +t_clean () { + stty $SAVED_TTY_SETTINGS + tput clear + reset +} + +readc () { + stty -echo -icanon min 1 time 0 + s="$(dd bs=1 count=1 of=/dev/stdout 2>/dev/null)" + stty -icanon min 0 time 0 + [ "$s" = "" ] && { + s="$s$(dd bs=1 count=2 of=/dev/stdout 2>/dev/null)" + } + + printf "$s" +} + + +t_cls () { + tput clear +} + +t_no_cur () { + tput civis +} + +t_yes_cur () { + tput cnorm +} + +t_set_cur () { + tput cup $1 $2 +} + +max_line_length () { + local max=-1 + while IFS= read -r line; do + [[ ${#line} -gt $max ]] && max=${#line} + done + echo "$max" +} + +t_styl_cur () { + case "$1" in + H) + printf "\033[2 q";; + H0) + printf "\033[1 q";; + l) + printf "\033[6 q";; + l0) + printf "\033[5 q";; + _) + printf "\033[4 q";; + _0) + printf "\033[3 q";; + *) + printf"\033[0 q]";; + esac > $(tty) +} + + +t_gen_ptrn () { + export P="" + local wll=$(tput cols) + for l in $(seq 7); do + for c in $(seq $wll); do + case "$l" in + 1) [ "$((c%8))" != "0" ] ;; + 2) [ "$((c%8))" = "1" ] || [ "$((c%8))" = "7" ] ;; + 3) [ "$((c%2))" = "1" ] || [ "$((c%8))" = "4" ] ;; + 4) [ "$((c%2))" = "1" ] ;; + 5) [ "$((c%2))" != "0" ] || [ "$((c%8))" = "2" ] ;; + 6) [ "$((c%8))" = "5" ] || [ "$((c%8))" = "7" ] ;; + 7) [ "$((c%8))" != "6" ] ;; + *) false ;; + esac + + [ "$?" = "0" ] && + P="$Pā–ˆ" || + P="$P " + + done + P="$P\n" + done +} + +t_prnt_ptrn () { + printf "$@$P" +} + +t_drw_ptrn () { + local prfx=$1 + local flr=$(tput lines) + t_drw_txt 0 0 "$P" + t_drw_txt 0 $((flr-7)) "$(printf "$P" | rev)" +} + +# draws inside the given area +# +# $0 x y w h +# +t_drw_box () { + local x=$1 y=$2 w=$3 h=$4 + + t_set_cur $y $x + printf "${COLOR_FG}ā•”" + printf "ā•%.0s" $(seq $((w-2))) + printf "ā•—" + for i in $(seq $((h-2))); do + t_set_cur $((y+i)) $x + printf "${COLOR_FG}ā•‘" + printf " %.0s" $(seq $((w-2))) + printf "ā•‘" + done + + t_set_cur $((y+h-1)) $x + printf "${COLOR_FG}ā•š" + printf "ā•%.0s" $(seq $((w-2))) + printf "ā•" +} + +t_drw_txt () { + local x=$1 y=$2 + shift 2 + + echo "$@" | while IFS= read -r line; do + t_set_cur $y $x + y=$((y+1)) + printf "${COLOR_FG}$line" + done +} + +t_msg () { + local msg="$@" + local width=$(echo "$msg" | max_line_length) height=$(echo "$msg" | wc -l) + local lines=$(tput lines) cols=$(tput cols) + + local x=$((((cols+width)/2)-width)) + local y=$((((lines+height)/2)-height)) + + t_drw_box $((x-1)) $((y-1)) $((width+2)) $((height+2)) + t_drw_txt $x $y "$msg" +} + +t_dialog() { + local msg="$1" + shift + local btns="$@" + local btns_len="$#" + local btns_width=${#btns} + + local width=$(printf "$msg\n$btns" | max_line_length) height=$(echo "$msg" | wc -l) + local lines=$(tput lines) cols=$(tput cols) + + local x=$((((cols+width)/2)-width)) + local y=$((((lines+height)/2)-height)) + + local btn_y=$((y+height+1)) + local btn_x=$((((cols+btns_width)/2)-btns_width)) + + btns="" + for btn in "$@"; do + btns="$btns$btn $btn_x " + btn_x=$((btn_x+${#btn}+1)) + done + height=$((height+2)) + + t_drw_box $((x-1)) $((y-1)) $((width+2)) $((height+2)) + t_drw_txt $x $y "$msg" + + local btn_count=$(seq $#) + + + local sel="0" + + while true; do + set -- $btns + + for i in $btn_count; do + txt=$1; shift + x=$1; shift + + [ "$((sel+1))" == "$i" ] && { + txt="${COLOR_BG}$txt" + } || { + txt="${RESET}$txt" + } + + t_drw_txt $x $btn_y "$txt${RESET}" + done + + c=$(readc) + case "$c" in + ' ') break;; + ''|''|' ') + sel=$(((sel+1)%btns_len)) ;; + ''|'') + sel=$(((sel+btns_len-1)%btns_len));; + esac + + done + return $sel +} + +t_prompt () { + t_dialog "$@" "" +} + +t_input () { + stty $SAVED_TTY_SETTINGS + t_msg "$@ + + >" > $(tty) + t_yes_cur > $(tty) + read var + echo $var + t_set_tty +} + +t_tail() { + local file=$1 lines=$(tput lines) + t_drw_txt 0 9 "$(tail -$((lines-16)) $1)" +} + + +t_demo () { + t_init + t_no_cur + t_drw_ptrn "${COLOR_FG}" + t_prompt "Hello world?" + file=$(t_input "enter file to tail the end of:") + [ -f $file ] && { + t_tail $file + sleep 10 + } || { + t_prompt "The file $file does not exist" + } + t_prompt "Exit?" + t_clean +} + + -- cgit v1.2.1