view.sh - rohrpost - A commandline mail client to change the world as we see it.
(HTM) git clone git://r-36.net/rohrpost
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
view.sh (2067B)
---
1 #!/bin/bash
2
3 # structure
4 reset="$(tput sgr0)"
5 idformat="$(tput bold)"
6 keyformat="$(tput setaf 3)"
7 valueformat="$(tput setaf 7)"
8 partformat="$(tput setaf 3)"
9 alertformat="$(tput setaf 1; tput bold; tput blink;)"
10
11 # body text
12 textformat="$reset"
13 quoteformat="$(tput setaf 6)"
14 headerformat="$(tput setaf 8)"
15
16 italicformat="$(tput sitm)"
17 italicreset="$(tput ritm)"
18 boldformat="$(tput bold)"
19 boldreset="$(echo -ne "\033[22m")"
20 underlineformat="$(tput smul)"
21 underlinereset="$(tput rmul)"
22 reverseformat="$(tput rev)"
23 reversereset="$(echo -ne "\033[27m")"
24
25 state="id"
26
27 function formatheader {
28 line="$1"
29 if [ "$line" = "" ] || [ -z "$line" ];
30 then
31 printf "\n"
32 state="body"
33 return
34 fi
35
36 # GNU sed sucks at UTF-8
37 key=$(echo "$line" | perl -pe 's/: .*//')
38 value=$(echo "$line" | perl -pe 's/[A-Za-z0-9-]*: //')
39
40 uvformat="${valueformat}"
41 if [ "$key" = "X-Mailer" ];
42 then
43 case "$value" in
44 "Apple Mail"*|"iPhone Mail"*)
45 uvformat="${alertformat}"
46 ;;
47 esac
48 fi
49
50 printf "${keyformat}%s: ${reset}${uvformat}%s${reset}\n" \
51 "$key" "$value"
52 }
53
54 IFS="\\"
55 while read -r line;
56 do
57 if [ "$line" = "" ];
58 then
59 printf "\n"
60 state="id"
61 continue
62 fi
63
64 case $state in
65 id)
66 te=$(echo -n "$line" | grep "^---")
67 if [ -n "$te" ];
68 then
69 printf "${idformat}%s${reset}\n" "$line"
70 else
71 formatheader "$line"
72 fi
73 state="header"
74 ;;
75 header)
76 formatheader "$line"
77 ;;
78 body)
79 line=$(printf "%s" "$line" | sed 's///g')
80 case $line in
81 --MIME-Part*)
82 printf "${partformat}%s${reset}\n" "$line"
83 ;;
84 --*)
85 printf "${headerformat}%s${reset}\n" "$line"
86 ;;
87 ++*)
88 printf "${headerformat}%s${reset}\n" "$line"
89 ;;
90 \>*|\ \>*)
91 printf "${quoteformat}%s${reset}\n" "$line"
92 ;;
93 *)
94 line=$(printf "%s" "$line" \
95 | sed "s,\(\*[^ \t\v\r\f]*\*\),${boldformat}\1${boldreset},g" \
96 | sed "s,\(\/[^ \t\v\r\f]*\/\),${italicformat}\1${italicreset},g" \
97 | sed "s,\(_[^ \t\v\r\f]*_\),${underlineformat}\1${underlinereset},g")
98 printf "${textformat}%s${reset}\n" "$line"
99 ;;
100 esac
101 ;;
102 *)
103 echo "unknown state"
104 ;;
105 esac
106 done
107