slide deck presentation tool written in pure bash

filter out color codes in length calculation

Akshay 053dc3e3 ba338add

Changed files
+22 -9
+22 -9
shlide
··· 5 5 6 6 # Color definitions 7 7 8 - BLK="\e[30m" 9 - RED="\e[31m" 10 - GRN="\e[32m" 11 - YLW="\e[33m" 12 - BLU="\e[34m" 13 - PUR="\e[35m" 14 - CYN="\e[36m" 8 + BLK="\e[38;5;30m" 9 + RED="\e[38;5;31m" 10 + GRN="\e[38;5;32m" 11 + YLW="\e[38;5;33m" 12 + BLU="\e[38;5;34m" 13 + PUR="\e[38;5;35m" 14 + CYN="\e[38;5;36m" 15 15 RST="\e[0m" 16 16 17 17 lines() { ··· 27 27 printf '%s\n' "$max" 28 28 } 29 29 30 + colorify() { 31 + eval "declare dummy=\"$1\"" 32 + printf '%b' "$dummy" 33 + } 34 + 35 + shopt -s extglob 36 + ansi_filter() { 37 + local IFS= 38 + echo "${1//$'\e'[\[(]*([0-9;])[@-n]/}" 39 + } 40 + 30 41 display() { 31 42 # 1 - slide contents 32 43 # 2 - slide name ··· 62 73 reduce=0 63 74 # Print the contents of the slide file, 64 75 # line by line. 65 - printf "%s" "$line" 76 + l=$(colorify "$line") 77 + printf '%s' "$l" 66 78 case $line in 67 79 "" | *"\n"*) 68 80 ((++reduce));; 69 81 esac 70 82 # Move down and back after each print. 71 - printf '\e[%sD\e[B' "$((${#line} - $reduce))" 83 + l=$(ansi_filter "$l") 84 + printf '\e[%sD\e[B' "$((${#l} - $reduce))" 72 85 done <<< "$slide_contents" 73 86 74 87 }