Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions lib/functions.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
# Set default log level if not specified
: "${MT_LOG_LEVEL:=INFO}"

# Bash 3.2 compatible case conversion helpers
# These replace ${var^^} and ${var,,} which require bash 4+
_mt_uppercase() {
echo "$1" | tr '[:lower:]' '[:upper:]'
}

_mt_lowercase() {
echo "$1" | tr '[:upper:]' '[:lower:]'
}

# Columnise - format tab-separated output into aligned columns
# Usage: command | columnise [--force]
# Options:
Expand Down Expand Up @@ -56,7 +66,9 @@ _mt_log() {
local message="$*"

# Convert level to number for comparison
case "${level^^}" in
local level_upper
level_upper=$(_mt_uppercase "$level")
case "$level_upper" in
ERROR) level_num=0 ;;
WARNING) level_num=1 ;;
INFO) level_num=2 ;;
Expand All @@ -65,7 +77,9 @@ _mt_log() {
esac

# Convert MT_LOG_LEVEL to number
case "${MT_LOG_LEVEL^^}" in
local log_level_upper
log_level_upper=$(_mt_uppercase "$MT_LOG_LEVEL")
case "$log_level_upper" in
ERROR) log_level_num=0 ;;
WARNING) log_level_num=1 ;;
INFO) log_level_num=2 ;;
Expand All @@ -78,7 +92,7 @@ _mt_log() {
local color prefix

# Set color and prefix based on level
case "${level^^}" in
case "$level_upper" in
ERROR)
color=$MT_COLOR_ERROR
prefix="🚫"
Expand Down Expand Up @@ -109,7 +123,7 @@ _mt_log() {
fi

# Output to appropriate stream
if [[ "${level^^}" == "ERROR" || "${level^^}" == "WARNING" ]]; then
if [[ "$level_upper" == "ERROR" || "$level_upper" == "WARNING" ]]; then
printf "%b\n" "$formatted_msg" >&2
else
printf "%b\n" "$formatted_msg"
Expand Down Expand Up @@ -551,7 +565,9 @@ _mt_init_ln_command() {
echo -n "Would you like to install it now? (Y)es/(N)o [N]: "
read -r response

if [[ "${response,,}" == "y" || "${response,,}" == "yes" ]]; then
local response_lower
response_lower=$(_mt_lowercase "$response")
if [[ "$response_lower" == "y" || "$response_lower" == "yes" ]]; then
_mt_info "Running: brew install coreutils"
if brew install coreutils; then
# Check again after installation
Expand Down
34 changes: 23 additions & 11 deletions lib/prompt.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ _mt_confirm() {
fi

# Make the default option uppercase
default_upper="${default^^}"
default_upper=$(_mt_uppercase "$default")

# Prepare prompt options (no colors)
local prompt_options="(Y)eah/(N)ah/(A)bort/(D)on't ask again [${default_upper}]:"

Expand All @@ -37,7 +37,9 @@ _mt_confirm() {
response="${response:-$default}"

# Process response
case "${response,,}" in
local response_lower
response_lower=$(_mt_lowercase "$response")
case "$response_lower" in
y|yeah)
return 0
;;
Expand All @@ -51,7 +53,9 @@ _mt_confirm() {
# Prompt for which value to remember
echo "Remember which response?"
read -p "(Y)eah/(N)ah/(C)ancel: " remember
case "${remember,,}" in
local remember_lower
remember_lower=$(_mt_lowercase "$remember")
case "$remember_lower" in
y|yeah)
export $don_t_ask_var="yeah"
_mt_info "Will automatically choose 'Yeah' for future prompts in this session"
Expand All @@ -72,7 +76,9 @@ _mt_confirm() {
;;
*)
# For any other response, use the default
if [[ "${default,,}" == "yeah" ]]; then
local default_lower
default_lower=$(_mt_lowercase "$default")
if [[ "$default_lower" == "yeah" ]]; then
return 0
else
return 1
Expand Down Expand Up @@ -105,8 +111,8 @@ _mt_confirm_multiple() {
fi

# Make the default option uppercase
default_upper="${default^^}"
default_upper=$(_mt_uppercase "$default")

# Prepare prompt options (no colors)
local prompt_options="(Y)eah/(N)ah/(A)ll/(Q)uit/(D)on't ask again [${default_upper}]:"

Expand All @@ -120,7 +126,9 @@ _mt_confirm_multiple() {
response="${response:-$default}"

# Process response
case "${response,,}" in
local response_lower
response_lower=$(_mt_lowercase "$response")
case "$response_lower" in
y|yeah)
return 0
;;
Expand All @@ -139,7 +147,9 @@ _mt_confirm_multiple() {
echo -n "(Y)eah/(N)ah/(A)ll/(C)ancel: "
read -n1 -s remember
echo # Add newline after character input
case "${remember,,}" in
local remember_lower
remember_lower=$(_mt_lowercase "$remember")
case "$remember_lower" in
y|yeah)
export $don_t_ask_var="yeah"
_mt_info "Will automatically choose 'Yeah' for future prompts in this session"
Expand All @@ -165,9 +175,11 @@ _mt_confirm_multiple() {
;;
*)
# For any other response, use the default
if [[ "${default,,}" == "yeah" ]]; then
local default_lower
default_lower=$(_mt_lowercase "$default")
if [[ "$default_lower" == "yeah" ]]; then
return 0
elif [[ "${default,,}" == "all" ]]; then
elif [[ "$default_lower" == "all" ]]; then
return 2
else
return 1
Expand Down