diff --git a/install.sh b/install.sh index 4d8445c..dd533a7 100755 --- a/install.sh +++ b/install.sh @@ -1,29 +1,37 @@ #!/bin/bash -tput sc +# --- Initialization --- +set +x +path=$(pwd) +tput smcup # Switch to alternate screen so we preserve the terminal history +tput civis -function clear_print() { - tput rc +trap clean_up INT + +clean_up() { + tput rmcup + tput cnorm + echo "${1:-Goodbye! o/}" + exit 0 } -function print_menu() { +# --- Displaying --- + +print_menu() { local function_arguments=($@) local selected_item="$1" local menu_items=(${function_arguments[@]:1}) local menu_size="${#menu_items[@]}" - for (( i = 0; i < $menu_size; ++i )) - do + for (( i = 0; i < $menu_size; ++i )) do if [ "$i" = "$selected_item" ] - then - echo "* ${menu_items[i]}" - else - echo " ${menu_items[i]}" + then echo -e "\033[2K\e[1m>\e[0m \e[1;33m${menu_items[i]}\e[0m" + else echo -e "\033[2K ${menu_items[i]}" fi done } -function run_menu() { +run_menu() { local function_arguments=($@) local selected_item="$1" @@ -31,13 +39,12 @@ function run_menu() { local menu_size="${#menu_items[@]}" local menu_limit=$((menu_size - 1)) - clear_print + clear print_menu "$selected_item" "${menu_items[@]}" while read -rsn1 input do - case "$input" - in + case "$input" in $'\x1B') read -rsn1 -t 0.1 input if [ "$input" = "[" ] @@ -49,44 +56,84 @@ function run_menu() { if [ "$selected_item" -ge 1 ] then selected_item=$((selected_item - 1)) - clear_print + clear print_menu "$selected_item" "${menu_items[@]}" - fi - ;; + fi;; B) # Arrow down if [ "$selected_item" -lt "$menu_limit" ] then selected_item=$((selected_item + 1)) - clear_print + clear print_menu "$selected_item" "${menu_items[@]}" - fi - ;; + fi;; esac fi - read -rsn5 -t 0.1 # stdin flush - ;; + # stdin flush + read -rsn5 -t 0.1;; "") # Enter - return "$selected_item" - ;; + return "$selected_item";; esac done } +# --- Installation --- + +install() { + local selected_install_item=0 + local install_opts=("Download" "Compile" "Compile(Debug)" "Exit") + run_menu "$selected_install_item" "${install_opts[@]}" + local install_chosen="$?" + + case "$install_chosen" in + 0) echo "There is no release yet, please hold tight!";; + 1) + echo "Setting up folders..." + mkdir -p ~/.cache/ + rm -rf ~/.cache/bobbylisp/ + echo "Cloning repository..." + cd ~/.cache/ + git clone https://github.com/azur1s/bobbylisp + cd ~/.cache/bobbylisp/ + echo "Compiling..." + cargo build --release + mv ~/.cache/bobbylisp/target/release/blspc ~/bin/blspc + clean_up "Done! Thanks a lot for trying out Bobbylisp!";; + 2) + echo "Setting up folders..." + mkdir -p ~/.cache/ + rm -rf ~/.cache/bobbylisp/ + echo "Cloning repository..." + cd ~/.cache/ + git clone https://github.com/azur1s/bobbylisp + cd ~/.cache/bobbylisp/ + echo "Compiling..." + cargo build + mv ~/.cache/bobbylisp/target/debug/blspc ~/bin/blspc + clean_up "Done! Thanks a lot for trying out Bobbylisp!";; + 3) clean_up;; + esac +} + +uninstall() { + echo "Uninstalling blspc..." + rm ~/bin/blspc -f + rm /usr/bin/blspc -f + sleep 1s + echo "Uninstalling trolley..." + rm ~/bin/trolley -f + rm /usr/bin/trolley -f + sleep 1s + clean_up "Sad to see you go! Goodbye! o/" +} + selected_item=0 -menu_items=("Install" "Uninstall" "Exit") +menu_opts=("Install" "Uninstall" "Exit") -run_menu "$selected_item" "${menu_items[@]}" -menu_result="$?" +run_menu "$selected_item" "${menu_opts[@]}" +menu_chosen="$?" -case "$menu_result" -in - 0) - echo "Install selected" - ;; - 1) - echo "Uninstall selected" - ;; - 2) - echo "Goodbye" - ;; -esac \ No newline at end of file +case "$menu_chosen" in + 0) install;; + 1) uninstall;; + 2) clean_up;; +esac