+14
-2
readme.md
+14
-2
readme.md
···
1
1
# shlide
2
2
> a slide deck presentation tool written in pure bash
3
3
4
-

4
+

5
5
6
6
## Features
7
7
8
8
- All slides are plain-text files.
9
-
- Navigation using `j` / `k` or `n` / `p`.
9
+
- Vim like navigation.
10
10
- Text color and style formatting.
11
11
- Pure bash.
12
12
···
27
27
# so on
28
28
```
29
29
30
+
**Note**: Make sure to prefix the first 9 slides with a `0` (`01-foo.txt`, `02-bar.txt` ...),
31
+
if you have more than 10 slides.
32
+
30
33
Finally, run:
31
34
32
35
```shell
33
36
$ shlide deck/
34
37
```
38
+
39
+
## Controls
40
+
41
+
- Next slide: `j`, `n`, `;`, `space`, `enter`
42
+
- Previous slide: `k`, `p`, `,`, `backspace`
43
+
- Jump to first slide: `0`
44
+
- Jump to last slide: `G`
45
+
- Reload: `r`
46
+
- Quit: `q`
35
47
36
48
## Formatting
37
49
+27
-22
shlide
+27
-22
shlide
···
51
51
}
52
52
53
53
# Filter out color sequences.
54
-
shopt -s extglob
55
54
ansi_filter() {
55
+
shopt -s extglob
56
56
local IFS=
57
57
printf '%s' "${1//$'\e'[\[(]*([0-9;])[@-n]/}"
58
58
#" A little fix to prevent vim syntax highlighting from breaking.
59
+
shopt -u extglob
59
60
}
60
61
61
62
···
74
75
printf '\e[2J'
75
76
76
77
# Get screen size.
77
-
read -r LINES COLUMNS < <(stty -F /dev/tty size)
78
+
shopt -s checkwinsize; (:;:)
78
79
79
80
# Write slide number at bottom left.
80
81
printf '\e[H'
···
110
111
die() {
111
112
printf '\e[2J'
112
113
printf '\e[?25h'
114
+
printf '\e[0H'
113
115
exit 0
114
116
}
115
117
···
125
127
126
128
slides_dir="${1:-./}"
127
129
slides=("$slides_dir"/[0-9]*.txt)
130
+
total="${#slides[@]}"
128
131
i=0
129
-
while true; do
132
+
while :; do
130
133
# Clear the screen.
131
134
printf '\e[2J'
132
135
133
136
# Capture Ctrl+C.
134
137
trap 'die' INT
135
138
139
+
# Don't go below 0.
140
+
[[ "$i" -lt 0 ]] && i=0
141
+
136
142
# Display END reached prompt, and then exit.
137
-
[[ "$i" -eq "${#slides[@]}" ]] && {
143
+
if [[ "$i" -eq "$total" ]]; then
138
144
display_end
139
-
read -rsn1 input
140
-
case "$input" in
141
-
"j"|"n"|"q")
142
-
die
143
-
;;
144
-
*)
145
-
((--i))
146
-
;;
147
-
esac
148
-
}
145
+
else
146
+
display "$(<"${slides[$i]}")" "${slides[$i]}" "$i" "$total"
147
+
fi
149
148
150
-
# Don't go below 0.
151
-
[[ "$i" -lt 0 ]] && i=0
152
-
153
-
# Navigate on j/k/n/p and quit on q.
154
-
display "$(<"${slides[$i]}")" "${slides[$i]}" "$i" "${#slides[@]}"
149
+
# Navigation
155
150
read -rsn1 input
156
-
case "$input" in
157
-
"j"|"n")
151
+
case "$input" in
152
+
"j"|"n"|""|";")
153
+
[[ "$i" -eq "$total" ]] && die
158
154
((++i))
159
155
;;
160
-
"k"|"p")
156
+
"k"|"p"|""|",")
161
157
((--i))
162
158
;;
159
+
"0")
160
+
((i=0))
161
+
;;
162
+
"G")
163
+
((i=total-1))
164
+
;;
163
165
"q")
164
166
# Return the cursor on exit.
165
167
die
168
+
;;
169
+
*)
170
+
# Reloads the slide
166
171
;;
167
172
esac
168
173
done
+105
shlide.1.scd
+105
shlide.1.scd
···
1
+
shlide(1) ["Version 1.0"]
2
+
3
+
# NAME
4
+
5
+
shlide - a slide deck presentation tool written in pure bash
6
+
7
+
# SYNOPSIS
8
+
9
+
shlide _deck-directory/_
10
+
11
+
# DESCRIPTION
12
+
13
+
Create a directory for your slides. Name each slide starting with
14
+
a number and a hyphen, like so:
15
+
16
+
$ mkdir deck++
17
+
$ touch deck/1-first-slide.txt++
18
+
$ touch deck/2-another.txt
19
+
20
+
*Note*: Make sure to prefix the first 9 slides with a *0* (e.g. 01-foo.txt, 02-bar.txt ...), if you have more than 10 slides.
21
+
22
+
Finally, run:
23
+
24
+
$ shlide deck/
25
+
26
+
# CONTROLS
27
+
28
+
Next slide:
29
+
*j*, *n*, *;*, *space*, *enter*
30
+
31
+
Previous slide:
32
+
*k*, *p*, *,*, *backspace*
33
+
34
+
Jump to first slide:
35
+
*0*
36
+
37
+
Jump to last slide:
38
+
*G*
39
+
40
+
Reload:
41
+
*r*
42
+
43
+
Quit:
44
+
*q*
45
+
46
+
# FORMATTING
47
+
48
+
Slide content can be formatted like so:
49
+
50
+
Welcome to ${GRN}shlide${RST}. ${STR}Here${RST} are a few bullet points:
51
+
52
+
\- first point++
53
+
\- second point++
54
+
\* ${ITA}sub point${RST}++
55
+
\* ${BLD}another${RST} sub point
56
+
57
+
*Note*: Make sure to add ${RST} (reset) at the end.
58
+
59
+
A full list of formatting options are below:
60
+
61
+
## Colors
62
+
63
+
[[ *Key*
64
+
:- *Effect*
65
+
|- BLK
66
+
:- black
67
+
|- RED
68
+
:- red
69
+
|- GRN
70
+
:- green
71
+
|- YLW
72
+
:- yellow
73
+
|- BLU
74
+
:- blue
75
+
|- PUR
76
+
:- purple
77
+
|- CYN
78
+
:- cyan
79
+
|- RST
80
+
:- reset
81
+
82
+
## Styles
83
+
84
+
[[ *Key*
85
+
:- *Effect*
86
+
|- BLD
87
+
:- bold
88
+
|- DIM
89
+
:- dim
90
+
|- ITA
91
+
:- italics
92
+
|- UND
93
+
:- underline
94
+
|- FLS
95
+
:- flashing
96
+
|- REV
97
+
:- reverse
98
+
|- INV
99
+
:- invert
100
+
|- STR
101
+
:- strikethrough
102
+
103
+
# LICENSES
104
+
105
+
shlide is licensed under the MIT license.