]> Freerunner's - dotfiles.git/commitdiff
colors: add a new mode
authorAndre Ramnitz <tux.rising@gmail.com>
Thu, 3 Oct 2024 22:22:39 +0000 (00:22 +0200)
committerAndre Ramnitz <tux.rising@gmail.com>
Thu, 3 Oct 2024 22:22:39 +0000 (00:22 +0200)
local/dot-local/bin/colors

index 32ebd2ca5e595df23b63f3a4eb18fd01801d97ec..157ff926c28485e03dbc9434112627801578fda2 100755 (executable)
@@ -1,68 +1,8 @@
 #!/bin/bash
 
 case $1 in
-    1)
-        set -e
-        mainFunction () {
-            echo
-            printColors
-            printGuidelines
-        }
-
-
-        printColor () {
-            local color="${1}"
-
-            printf "\033[1;4%sm     " "${color}"
-            printf "\033[0m    "
-            printf "\033[1;3%smSampleText  " "${color}"
-            printf "\033[0;3%smSampleText  " "${color}"
-            printf "\033[0m\n"
-        }
-
-
-        printColors () {
-            local color
-            # 0 black
-            # 1 red
-            # 2 green
-            # 3 yellow
-            # 4 blue
-            # 5 magenta / orange
-            # 6 cyan / purple
-            # 7 white
-
-            for color in 0 7; do
-                printColor "${color}"
-            done
-            echo
-
-            for color in 4 5 6; do
-                printColor "${color}"
-            done
-            echo
-
-            for color in 2 3 1; do
-                printColor "${color}"
-            done
-            echo
-        }
-
-
-        printGuidelines () {
-            echo "A good palette has:"
-            echo "- All colors easy to read."
-            echo "- Similar eye catchiness within the same group, except for monochromes."
-            echo "- Similar or greater eye catchiness in upper groups, including this text."
-            echo "- Similar color within the same line."
-            echo "- The first group as: blue purple cyan."
-            echo "- The last group as: green yellow red."
-            echo
-        }
-
-
-        mainFunction;;
-
+    "--help")
+        echo "Enter a number [1-4] to specify, which demo to run.";;
     2)
         echo -e "\033[0mNC (No color)"
         echo -e "\033[1;37mWHITE\t\033[0;30mBLACK"
@@ -72,7 +12,8 @@ case $1 in
         echo -e "\033[0;31mRED\t\033[1;31mLIGHT_RED"
         echo -e "\033[0;35mPURPLE\t\033[1;35mLIGHT_PURPLE"
         echo -e "\033[0;33mYELLOW\t\033[1;33mLIGHT_YELLOW"
-        echo -e "\033[1;30mGRAY\t\033[0;37mLIGHT_GRAY";;
+        echo -e "\033[1;30mGRAY\t\033[0;37mLIGHT_GRAY"
+        ;;
     3)
         # Description:
         #
@@ -119,13 +60,139 @@ case $1 in
         done
 
         echo
-        echo;;
+        echo
+        ;;
     4)
         for colour in {1..225}
             do echo -en "\033[38;5;${colour}m38;5;${colour} \n"
-            done | column -x;;
+            done | column -x
+        ;;
+    5)
+        theme=$(dirname $0)/scripts/${1:-base16-default-dark.sh}
+        if [ -f $theme ]; then
+          # get the color declarations in said theme, assumes there is a block of text that starts with color00= and ends with new line
+          source $theme
+          eval $(awk '/^color00=/,/^$/ {print}' $theme | sed 's/#.*//')
+        else
+          printf "No theme file %s found\n" $theme
+        fi;
+        ansi_mappings=(
+          Black
+          Red
+          Green
+          Yellow
+          Blue
+          Magenta
+          Cyan
+          White
+          Bright_Black
+          Bright_Red
+          Bright_Green
+          Bright_Yellow
+          Bright_Blue
+          Bright_Magenta
+          Bright_Cyan
+          Bright_White
+        )
+        colors=(
+          base00
+          base08
+          base0B
+          base0A
+          base0D
+          base0E
+          base0C
+          base05
+          base03
+          base08
+          base0B
+          base0A
+          base0D
+          base0E
+          base0C
+          base07
+          base09
+          base0F
+          base01
+          base02
+          base04
+          base06
+        )
+        for padded_value in `seq -w 0 21`; do
+          color_variable="color${padded_value}"
+          eval current_color=\$${color_variable}
+          current_color=$(echo ${current_color//\//} | tr '[:lower:]' '[:upper:]') # get rid of slashes, and uppercase
+          non_padded_value=$((10#$padded_value))
+          base16_color_name=${colors[$non_padded_value]}
+          current_color_label=${current_color:-unknown}
+          ansi_label=${ansi_mappings[$non_padded_value]} 
+          block=$(printf "\x1b[48;5;${non_padded_value}m___________________________")
+          foreground=$(printf "\x1b[38;5;${non_padded_value}m$color_variable")
+          printf "%s %s %s %-30s %s\x1b[0m\n" $foreground $base16_color_name $current_color_label ${ansi_label:-""} $block
+        done;
+        if [ $# -eq 1 ]; then
+            printf "To restore current theme, source ~/.base16_theme or reopen your terminal\n"
+        fi
+        ;;
     *)
-        colors 1
-        echo "Enter a number [1-4] to specify, which demo to run.";;
+        set -e
+        mainFunction () {
+            echo
+            printColors
+            printGuidelines
+        }
+
+
+        printColor () {
+            local color="${1}"
+
+            printf "\033[1;4%sm     " "${color}"
+            printf "\033[0m    "
+            printf "\033[1;3%smSampleText  " "${color}"
+            printf "\033[0;3%smSampleText  " "${color}"
+            printf "\033[0m\n"
+        }
+
+
+        printColors () {
+            local color
+            # 0 black
+            # 1 red
+            # 2 green
+            # 3 yellow
+            # 4 blue
+            # 5 magenta / orange
+            # 6 cyan / purple
+            # 7 white
+
+            for color in 0 7; do
+                printColor "${color}"
+            done
+            echo
+
+            for color in 4 5 6; do
+                printColor "${color}"
+            done
+            echo
+
+            for color in 2 3 1; do
+                printColor "${color}"
+            done
+            echo
+        }
+
+
+        printGuidelines () {
+            echo "A good palette has:"
+            echo "- All colors easy to read."
+            echo "- Similar eye catchiness within the same group, except for monochromes."
+            echo "- Similar or greater eye catchiness in upper groups, including this text."
+            echo "- Similar color within the same line."
+            echo "- The first group as: blue purple cyan."
+            echo "- The last group as: green yellow red."
+        }
+
+        mainFunction
+        ;;
 esac