From cf4ab3460dba6b84c1341976c729eb460218176d 2022-05-31 21:15:41
From: Branko Majic <branko@majic.rs>
Date: 2022-05-31 21:15:41
Subject: [PATCH] Noticket: [factorio_manager.sh] Add support for forcing colour output.

---

diff --git a/games/factorio_manager.sh b/games/factorio_manager.sh
index 2a904054b45b1b250fd61507bb5d0e841311a266..dfa33f706ed1ba857fd5d7a10bb5b6ee6f4299aa 100755
--- a/games/factorio_manager.sh
+++ b/games/factorio_manager.sh
@@ -212,6 +212,8 @@ versions
 
 $program accepts the following options:
 
+    -C
+        Force colour output.
     -q
         Quiet mode. Output a message only if newer packages are available.
     -d
@@ -250,82 +252,85 @@ $program, version $version
 EOF
 }
 
-# Set-up colours for message printing if we're not piping and terminal is
-# capable of outputting the colors.
-_color_terminal=$(tput colors 2>&1)
-if [[ -t 1 ]] && (( _color_terminal > 0 )); then
-    _text_black=$(tput setaf 0)
-    _text_red=$(tput setaf 1)
-    _text_green=$(tput setaf 2)
-    _text_yellow=$(tput setaf 3)
-    _text_blue=$(tput setaf 4)
-    _text_purple=$(tput setaf 5)
-    _text_cyan=$(tput setaf 6)
-    _text_white=$(tput setaf 7)
-
-    _text_bold=$(tput bold)
-    _text_reset=$(tput sgr0)
-
-    _bg_black=$(tput setab 0)
-    _bg_red=$(tput setab 1)
-    _bg_green=$(tput setab 2)
-    _bg_yellow=$(tput setab 3)
-    _bg_blue=$(tput setab 4)
-    _bg_purple=$(tput setab 5)
-    _bg_cyan=$(tput setab 6)
-    _bg_white=$(tput setab 7)
-else
-    _text_black=""
-    _text_red=""
-    _text_green=""
-    _text_yellow=""
-    _text_blue=""
-    _text_purple=""
-    _text_cyan=""
-    _text_white=""
-
-    _text_bold=""
-    _text_reset=""
-
-    # Part of the standard Majic Bash script template.
-    # shellcheck disable=SC2034
-    _bg_black=""
-    # shellcheck disable=SC2034
-    _bg_red=""
-    # shellcheck disable=SC2034
-    _bg_green=""
-    # shellcheck disable=SC2034
-    _bg_yellow=""
-    # shellcheck disable=SC2034
-    _bg_blue=""
-    # shellcheck disable=SC2034
-    _bg_purple=""
-    # shellcheck disable=SC2034
-    _bg_cyan=""
-    # shellcheck disable=SC2034
-    _bg_white=""
-fi
+function setup_colours() {
+
+    # Set-up colours for message printing if we're not piping and terminal is
+    # capable of outputting the colors.
+    _color_terminal=$(tput colors 2>&1)
+    if [[ -t 1 ]] && (( _color_terminal > 0 )) || (( force_colours == 1 )); then
+        _text_black=$(tput setaf 0)
+        _text_red=$(tput setaf 1)
+        _text_green=$(tput setaf 2)
+        _text_yellow=$(tput setaf 3)
+        _text_blue=$(tput setaf 4)
+        _text_purple=$(tput setaf 5)
+        _text_cyan=$(tput setaf 6)
+        _text_white=$(tput setaf 7)
+
+        _text_bold=$(tput bold)
+        _text_reset=$(tput sgr0)
+
+        _bg_black=$(tput setab 0)
+        _bg_red=$(tput setab 1)
+        _bg_green=$(tput setab 2)
+        _bg_yellow=$(tput setab 3)
+        _bg_blue=$(tput setab 4)
+        _bg_purple=$(tput setab 5)
+        _bg_cyan=$(tput setab 6)
+        _bg_white=$(tput setab 7)
+    else
+        _text_black=""
+        _text_red=""
+        _text_green=""
+        _text_yellow=""
+        _text_blue=""
+        _text_purple=""
+        _text_cyan=""
+        _text_white=""
+
+        _text_bold=""
+        _text_reset=""
+
+        # Part of the standard Majic Bash script template.
+        # shellcheck disable=SC2034
+        _bg_black=""
+        # shellcheck disable=SC2034
+        _bg_red=""
+        # shellcheck disable=SC2034
+        _bg_green=""
+        # shellcheck disable=SC2034
+        _bg_yellow=""
+        # shellcheck disable=SC2034
+        _bg_blue=""
+        # shellcheck disable=SC2034
+        _bg_purple=""
+        # shellcheck disable=SC2034
+        _bg_cyan=""
+        # shellcheck disable=SC2034
+        _bg_white=""
+    fi
 
-# Make the colors available via an associative array as well.
-declare -A _text_colors=()
-
-_text_colors[black]="${_text_black}"
-_text_colors[blue]="${_text_blue}"
-_text_colors[cyan]="${_text_cyan}"
-_text_colors[green]="${_text_green}"
-_text_colors[purple]="${_text_purple}"
-_text_colors[red]="${_text_red}"
-_text_colors[white]="${_text_white}"
-_text_colors[yellow]="${_text_yellow}"
-
-_text_colors[boldblack]="${_text_bold}${_text_black}"
-_text_colors[boldblue]="${_text_bold}${_text_blue}"
-_text_colors[boldcyan]="${_text_bold}${_text_cyan}"
-_text_colors[boldgreen]="${_text_bold}${_text_green}"
-_text_colors[boldpurple]="${_text_bold}${_text_purple}"
-_text_colors[boldred]="${_text_bold}${_text_red}"
-_text_colors[boldwhite]="${_text_bold}${_text_white}"
-_text_colors[boldyellow]="${_text_bold}${_text_yellow}"
+    # Make the colors available via an associative array as well.
+    declare -g -A _text_colors=()
+
+    _text_colors[black]="${_text_black}"
+    _text_colors[blue]="${_text_blue}"
+    _text_colors[cyan]="${_text_cyan}"
+    _text_colors[green]="${_text_green}"
+    _text_colors[purple]="${_text_purple}"
+    _text_colors[red]="${_text_red}"
+    _text_colors[white]="${_text_white}"
+    _text_colors[yellow]="${_text_yellow}"
+
+    _text_colors[boldblack]="${_text_bold}${_text_black}"
+    _text_colors[boldblue]="${_text_bold}${_text_blue}"
+    _text_colors[boldcyan]="${_text_bold}${_text_cyan}"
+    _text_colors[boldgreen]="${_text_bold}${_text_green}"
+    _text_colors[boldpurple]="${_text_bold}${_text_purple}"
+    _text_colors[boldred]="${_text_bold}${_text_red}"
+    _text_colors[boldwhite]="${_text_bold}${_text_white}"
+    _text_colors[boldyellow]="${_text_bold}${_text_yellow}"
+}
 
 # Set-up functions for printing coloured messages.
 function debug() {
@@ -1220,6 +1225,7 @@ ERROR_GENERAL=3
 # Disable debug and quiet modes by default.
 debug=0
 quiet=0
+force_colours=0
 
 # Set-up some default paths.
 manager_directory="$HOME/.factorio"
@@ -1227,13 +1233,15 @@ game_installations_directory="$manager_directory/.game_installations"
 
 # If no arguments were given, just show usage help.
 if [[ -z ${1-} ]]; then
+    setup_colours
     short_usage
     exit "$SUCCESS"
 fi
 
 # Parse the arguments
-while getopts "qdvh" opt; do
+while getopts "Cqdvh" opt; do
     case "$opt" in
+        C) force_colours=1;;
 	q) # shellcheck disable=SC2034 # part of standard Bash script template.
            quiet=1;;
 	d) debug=1;;
@@ -1248,6 +1256,8 @@ done
 i=$OPTIND
 shift $((i-1))
 
+setup_colours
+
 # Make sure the manager home directory exists.
 if [[ ! -e $manager_directory ]]; then
     info "Creating Factorio Manager home directory under: $manager_directory"