#!/usr/bin/env bash # msgr / Messenger helper # Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved. # MIT License, https://opensource.org/license/mit/ # Modified from https://stackoverflow.com/a/28776166 ( [[ -n $ZSH_VERSION && $ZSH_EVAL_CONTEXT =~ :file$ ]] \ || [[ -n $BASH_VERSION ]] && (return 0 2> /dev/null) ) && sourced=1 || sourced=0 # ╭──────────────────────────────────────────────────────────╮ # │ Colors │ # ╰──────────────────────────────────────────────────────────╯ CLR_RED="\033[1;31m" CLR_YELLOW="\033[1;33m" CLR_GREEN="\033[1;32m" CLR_BLUE="\033[1;34m" CLR_RESET="\033[0m" # ╭──────────────────────────────────────────────────────────╮ # │ Color functions │ # ╰──────────────────────────────────────────────────────────╯ function __color_red() { local MSG="$1" echo -e "${CLR_RED}${MSG}${CLR_RESET}" } function __color_yellow() { local MSG="$1" echo -e "${CLR_YELLOW}${MSG}${CLR_RESET}" } function __color_green() { local MSG="$1" echo -e "${CLR_GREEN}${MSG}${CLR_RESET}" } function __color_blue() { local MSG="$1" echo -e "${CLR_BLUE}${MSG}${CLR_RESET}" } # ╭──────────────────────────────────────────────────────────╮ # │ Helpers │ # ╰──────────────────────────────────────────────────────────╯ function __log_marker() { echo -e "${CLR_BLUE}➜${CLR_RESET}" } function __log_marker_ok() { echo -e "${CLR_GREEN}✔${CLR_RESET}" } function __log_marker_ok_blue() { echo -e "${CLR_BLUE}✔${CLR_RESET}" } function __log_marker_warn() { echo -e "${CLR_YELLOW}⁕${CLR_RESET}" } function __log_marker_question() { echo -e "${CLR_YELLOW}?${CLR_RESET}" } function __log_marker_err() { echo -e "${CLR_RED}⛌${CLR_RESET}" } function __log_indent() { echo " " } # ╭──────────────────────────────────────────────────────────╮ # │ Log functions │ # ╰──────────────────────────────────────────────────────────╯ function msg() { echo -e "$(__log_marker) $1" } function msg_yay() { echo -e "🎉 $1" } function msg_yay_done() { echo -e "🎉 $1 ...$(__log_marker_ok)" } function msg_done() { echo -e "$(__log_marker) $1 ...$(__log_marker_ok)" } function msg_done_suffix() { echo -e "$(__log_marker) ...$(__log_marker_ok)" } function msg_prompt() { echo -e "$(__log_marker_question) $1" } function msg_prompt_done() { echo -e "$(__log_marker_question) $1 ...$(__log_marker_ok)" } function msg_nested() { echo -e "$(__log_indent)$(__log_marker) $1" } function msg_nested_done() { echo -e "$(__log_indent)$(__log_marker) $1 ...$(__log_marker_ok)" } function msg_run() { echo -e "${CLR_GREEN}➜ $1${CLR_RESET} $2" } function msg_run_done() { echo -e "${CLR_GREEN}➜ $1${CLR_RESET} $2 ...$(__log_marker_ok)" } function msg_ok() { echo -e "$(__log_marker_ok) $1" } function msg_warn() { echo -e "$(__log_marker_warn) $1" } function msg_err() { echo -e "$(__log_marker_err) $1" } # Create a prompt which you have to answer y/n to continue ask() { while true; do read -p "$1 ([y]/n) " -r REPLY=${REPLY:-"y"} if [[ $REPLY =~ ^[Yy]$ ]]; then return 1 elif [[ $REPLY =~ ^[Nn]$ ]]; then return 0 fi done } # If this is being sourced, no need to run the next steps. [ "$sourced" = 1 ] && return function __tests() { msg "[ msg ]" msg_done "[ done ]" msg_done_suffix "[ done_suffix ]" && echo " ^-- (done_suffix)" msg_err "[ err ]" msg_nested "[ nested ]" msg_nested_done "[ nested_done ]" msg_ok "[ ok ]" msg_prompt "[ prompt ]" msg_prompt_done "[ prompt_done ]" msg_run "[ run ]" "[ second_param ]" msg_run_done "[ run_done ]" "[ second_param ]" msg_warn "[ warn ]" msg_yay "[ yay ]" msg_yay_done "[ yay_done ]" } function usage() { echo "usage: msgr [type] [message] [optional second message]" echo "" echo "-- types and examples: --" __tests echo "" } # The main loop. first keyword after $0 triggers type, or help and usage examples. case "$1" in msg) msg "$2" ;; done) msg_done "$2" ;; done_suffix) msg_done_suffix "$2" ;; err) msg_err "$2" ;; nested) msg_nested "$2" ;; nested_done) msg_nested_done "$2" ;; ok) msg_ok "$2" ;; prompt) msg_prompt "$2" ;; prompt_done) msg_prompt_done "$2" ;; run) msg_run "$2" ;; run_done) msg_run_done "$2" "$3" ;; warn) msg_warn "$2" ;; yay) msg_yay "$2" ;; yay_done) msg_yay_done "$2" ;; tests) __tests "[first]" "[second]" ;; *) usage && exit 0 ;; esac