/
mansaver
executable file
·83 lines (70 loc) · 2.13 KB
/
mansaver
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
args=`getopt x:v:l:sw: $*`
set -- $args
DEFAULT_EXCLUDED_SECTIONS="3"
USER_SUPPLIED_EXCLUDED_SECTIONS=""
DEFAULT_EXCLUDE_PATTERNS=("_" "[A-Z]" "[0-9]" ":" "perl" "^.{10,}$")
USER_SUPPLIED_EXCLUDE_PATTERNS=()
USE_ALTERNATE_SCREEN=false
WPM=350
while true; do
case "$1" in
-x ) USER_SUPPLIED_EXCLUDED_SECTIONS=$2$USER_SUPPLIED_EXCLUDED_SECTIONS; shift 2 ;;
-v ) USER_SUPPLIED_EXCLUDE_PATTERNS+=("$2"); shift 2 ;;
-s ) USE_ALTERNATE_SCREEN=true; shift ;;
-w ) WPM=$2; shift 2 ;;
-- ) shift ; break ;;
* ) break ;;
esac
done
man_page_names=$(find $(manpath | tr ":" "\n") -type f -o -type l)
if [ "$USER_SUPPLIED_EXCLUDED_SECTIONS" != "" ]; then
EXCLUDED_SECTIONS=$USER_SUPPLIED_EXCLUDED_SECTIONS
else
EXCLUDED_SECTIONS=$DEFAULT_EXCLUDED_SECTIONS
fi
man_page_names=$(echo "$man_page_names" | egrep -v "man[$EXCLUDED_SECTIONS]")
man_page_names=$(echo "$man_page_names" |
sed 's/\..*$//' |
sed 's/.*\///' |
egrep -v "^$" |
sort |
uniq)
if [ ${#USER_SUPPLIED_EXCLUDE_PATTERNS[@]} -gt 0 ]; then
exclude_patterns=( "${USER_SUPPLIED_EXCLUDE_PATTERNS[@]}" )
else
exclude_patterns=( "${DEFAULT_EXCLUDE_PATTERNS[@]}" )
fi
for i in "${exclude_patterns[@]}"; do
man_page_names=$(echo "$man_page_names" | egrep -v "$i")
done
get_random_man_page_name() {
echo "$man_page_names" | shuf | head -1
}
switch_back() {
tput rmcup
exit 1
}
if $USE_ALTERNATE_SCREEN; then
tput smcup
trap "switch_back" SIGINT
fi
#echo $man_page_names
while true; do
export MANWIDTH=$(tput cols)
if [ -z "$current_man_page" ]; then
clear
current_man_page_name=$(get_random_man_page_name)
if [ "$current_man_page_name" = "lolcat" ]; then
man lolcat | lolcat -a
current_man_page_name=$(get_random_man_page_name)
continue
else
current_man_page=$(man $current_man_page_name)
fi
fi
current_line=$(echo "$current_man_page" | head -1)
current_man_page=$(echo "$current_man_page" | tail -n +2)
echo "$current_line"
sleep $(($(echo "$current_line" | wc -w) * 60 / $WPM))
done