Compare commits

..

No commits in common. "master" and "1" have entirely different histories.
master ... 1

4 changed files with 64 additions and 66 deletions

25
LICENSE
View File

@ -1,6 +1,6 @@
ISC-License ISC-License
(c) 2014-2017 Markus Teich <markus.teich@stusta.mhn.de> (c) 2014-2016 Markus Teich <markus.teich@stusta.mhn.de>
Permission to use, copy, modify, and/or distribute this software for any Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above purpose with or without fee is hereby granted, provided that the above
@ -14,16 +14,15 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
(c) 2016,2017 Laslo Hunhold <dev@frign.de>
(c) 2016 ssd <ssd@mailless.org>
(c) 2016 Hiltjo Posthuma <hiltjo@codemadness.org>
(c) 2015 David Phillips <dbphillipsnz@gmail.com>
(c) 2015 Grant Mathews <grant.m.mathews@gmail.com>
(c) 2015 Dimitris Papastamos <sin@2f30.org>
(c) 2015 Alexis <surryhill@gmail.com>
(c) 2015 Quentin Rameau <quinq@fifth.space>
(c) 2015 Ivan Tham <pickfire@riseup.net>
(c) 2015 Jan Christoph Ebersbach <jceb@e-jc.de>
(c) 2015 Tony Lainson <t.lainson@gmail.com>
(c) 2015 Szabolcs Nagy <nsz@port70.net>
(c) 2015 Jonas Jelten <jj@sft.mx> (c) 2015 Jonas Jelten <jj@sft.mx>
(c) 2015 Szabolcs Nagy <nsz@port70.net>
(c) 2015 Tony Lainson <t.lainson@gmail.com>
(c) 2015 Jan Christoph Ebersbach <jceb@e-jc.de>
(c) 2015 Ivan Tham <pickfire@riseup.net>
(c) 2015 Quentin Rameau <quinq@fifth.space>
(c) 2015 Alexis <surryhill@gmail.com>
(c) 2015 Dimitris Papastamos <sin@2f30.org>
(c) 2015 Grant Mathews <grant.m.mathews@gmail.com>
(c) 2015 David Phillips <dbphillipsnz@gmail.com>
(c) 2016 Laslo Hunhold <dev@frign.de>
(c) 2016 Hiltjo Posthuma <hiltjo@codemadness.org>

View File

@ -18,35 +18,43 @@ config.h:
cp config.def.h config.h cp config.def.h config.h
.c.o: .c.o:
${CC} -c ${CFLAGS} $< @echo CC $<
@${CC} -c ${CFLAGS} $<
${OBJ}: config.h config.mk ${OBJ}: config.h config.mk
sent: ${OBJ} sent: ${OBJ}
${CC} -o $@ ${OBJ} ${LDFLAGS} @echo CC -o $@
@${CC} -o $@ ${OBJ} ${LDFLAGS}
cscope: ${SRC} config.h cscope: ${SRC} config.h
cscope -R -b || echo cScope not installed @echo cScope
@cscope -R -b || echo cScope not installed
clean: clean:
rm -f sent ${OBJ} sent-${VERSION}.tar.gz @echo cleaning
@rm -f sent ${OBJ} sent-${VERSION}.tar.gz
dist: clean dist: clean
mkdir -p sent-${VERSION} @echo creating dist tarball
cp -R LICENSE Makefile config.mk config.def.h ${SRC} sent-${VERSION} @mkdir -p sent-${VERSION}
tar -cf sent-${VERSION}.tar sent-${VERSION} @cp -R LICENSE Makefile config.mk config.def.h ${SRC} sent-${VERSION}
gzip sent-${VERSION}.tar @tar -cf sent-${VERSION}.tar sent-${VERSION}
rm -rf sent-${VERSION} @gzip sent-${VERSION}.tar
@rm -rf sent-${VERSION}
install: all install: all
mkdir -p ${DESTDIR}${PREFIX}/bin @echo installing executable file to ${DESTDIR}${PREFIX}/bin
cp -f sent ${DESTDIR}${PREFIX}/bin @mkdir -p ${DESTDIR}${PREFIX}/bin
chmod 755 ${DESTDIR}${PREFIX}/bin/sent @cp -f sent ${DESTDIR}${PREFIX}/bin
mkdir -p ${DESTDIR}${MANPREFIX}/man1 @chmod 755 ${DESTDIR}${PREFIX}/bin/sent
cp sent.1 ${DESTDIR}${MANPREFIX}/man1/sent.1 @echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
chmod 644 ${DESTDIR}${MANPREFIX}/man1/sent.1 @mkdir -p ${DESTDIR}${MANPREFIX}/man1
@cp sent.1 ${DESTDIR}${MANPREFIX}/man1/sent.1
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/sent.1
uninstall: uninstall:
rm -f ${DESTDIR}${PREFIX}/bin/sent @echo removing executable file from ${DESTDIR}${PREFIX}/bin
@rm -f ${DESTDIR}${PREFIX}/bin/sent
.PHONY: all options clean dist install uninstall cscope .PHONY: all options clean dist install uninstall cscope

22
sent.1
View File

@ -1,6 +1,5 @@
.Dd August 12, 2016 .Dd 2016-08-12
.Dt SENT 1 .Dt SENT 1
.Os
.Sh NAME .Sh NAME
.Nm sent .Nm sent
.Nd simple plaintext presentation tool .Nd simple plaintext presentation tool
@ -11,14 +10,13 @@
.Sh DESCRIPTION .Sh DESCRIPTION
.Nm .Nm
is a simple plain text presentation tool for X. sent does not need LaTeX, is a simple plain text presentation tool for X. sent does not need LaTeX,
LibreOffice or any other fancy file format. LibreOffice or any other fancy file format. Instead, sent reads plain text
Instead, sent reads plain text describing the slides. sent can also draw describing the slides. sent can also draw images.
images.
.Pp .Pp
Every paragraph represents a slide in the presentation. Every paragraph represents a slide in the presentation. Especially for
Especially for presentations using the Takahashi method this is very nice and presentations using the Takahashi method this is very nice and allows
allows you to write the presentation for a quick lightning talk within a few you to write the presentation for a quick lightning talk within a
minutes. few minutes.
.Sh OPTIONS .Sh OPTIONS
.Bl -tag -width Ds .Bl -tag -width Ds
.It Fl v .It Fl v
@ -38,8 +36,7 @@ Go to previous slide, if existent.
.It Sy Escape | q .It Sy Escape | q
Quit. Quit.
.It Sy r .It Sy r
Reload the slides. Reload the slides. Only works on file input.
Only works on file input.
.It Sy Right | Return | Space | l | j | Down | Next | n .It Sy Right | Return | Space | l | j | Down | Next | n
Go to next slide, if existent. Go to next slide, if existent.
.It Sy Left | Backspace | h | k | Up | Prior | p .It Sy Left | Backspace | h | k | Up | Prior | p
@ -66,7 +63,6 @@ without interpreting them.
.Sh CUSTOMIZATION .Sh CUSTOMIZATION
.Nm .Nm
can be customized by creating a custom config.h and (re)compiling the can be customized by creating a custom config.h and (re)compiling the
source code. source code. This keeps it fast, secure and simple.
This keeps it fast, secure and simple.
.Sh SEE ALSO .Sh SEE ALSO
.Xr 2ff 1 .Xr 2ff 1

39
sent.c
View File

@ -99,12 +99,12 @@ static void load(FILE *fp);
static void advance(const Arg *arg); static void advance(const Arg *arg);
static void quit(const Arg *arg); static void quit(const Arg *arg);
static void resize(int width, int height); static void resize(int width, int height);
static void run(void); static void run();
static void usage(void); static void usage();
static void xdraw(void); static void xdraw();
static void xhints(void); static void xhints();
static void xinit(void); static void xinit();
static void xloadfonts(void); static void xloadfonts();
static void bpress(XEvent *); static void bpress(XEvent *);
static void cmessage(XEvent *); static void cmessage(XEvent *);
@ -216,6 +216,7 @@ ffload(Slide *s)
s->img->bufwidth = ntohl(*(uint32_t *)&hdr[8]); s->img->bufwidth = ntohl(*(uint32_t *)&hdr[8]);
s->img->bufheight = ntohl(*(uint32_t *)&hdr[12]); s->img->bufheight = ntohl(*(uint32_t *)&hdr[12]);
if (s->img->buf)
free(s->img->buf); free(s->img->buf);
/* internally the image is stored in 888 format */ /* internally the image is stored in 888 format */
s->img->buf = ecalloc(s->img->bufwidth * s->img->bufheight, strlen("888")); s->img->buf = ecalloc(s->img->bufwidth * s->img->bufheight, strlen("888"));
@ -269,9 +270,6 @@ ffprepare(Image *img)
if (depth < 24) if (depth < 24)
die("sent: Display color depths < 24 not supported"); die("sent: Display color depths < 24 not supported");
if (img->ximg)
XDestroyImage(img->ximg);
if (!(img->ximg = XCreateImage(xw.dpy, CopyFromParent, depth, ZPixmap, 0, if (!(img->ximg = XCreateImage(xw.dpy, CopyFromParent, depth, ZPixmap, 0,
NULL, width, height, 32, 0))) NULL, width, height, 32, 0)))
die("sent: Unable to create XImage"); die("sent: Unable to create XImage");
@ -430,10 +428,6 @@ load(FILE *fp)
maxlines = 0; maxlines = 0;
memset((s = &slides[slidecount]), 0, sizeof(Slide)); memset((s = &slides[slidecount]), 0, sizeof(Slide));
do { do {
/* if there's a leading null, we can't do blen-1 */
if (buf[0] == '\0')
continue;
if (buf[0] == '#') if (buf[0] == '#')
continue; continue;
@ -463,9 +457,6 @@ load(FILE *fp)
if (!p) if (!p)
break; break;
} }
if (!slidecount)
die("sent: No slides in file");
} }
void void
@ -498,7 +489,7 @@ resize(int width, int height)
} }
void void
run(void) run()
{ {
XEvent ev; XEvent ev;
@ -520,7 +511,7 @@ run(void)
} }
void void
xdraw(void) xdraw()
{ {
unsigned int height, width, i; unsigned int height, width, i;
Image *im = slides[idx].img; Image *im = slides[idx].img;
@ -548,7 +539,7 @@ xdraw(void)
} }
void void
xhints(void) xhints()
{ {
XClassHint class = {.res_name = "sent", .res_class = "presenter"}; XClassHint class = {.res_name = "sent", .res_class = "presenter"};
XWMHints wm = {.flags = InputHint, .input = True}; XWMHints wm = {.flags = InputHint, .input = True};
@ -566,7 +557,7 @@ xhints(void)
} }
void void
xinit(void) xinit()
{ {
XTextProperty prop; XTextProperty prop;
unsigned int i; unsigned int i;
@ -610,7 +601,7 @@ xinit(void)
} }
void void
xloadfonts(void) xloadfonts()
{ {
int i, j; int i, j;
char *fstrs[LEN(fontfallbacks)]; char *fstrs[LEN(fontfallbacks)];
@ -629,6 +620,7 @@ xloadfonts(void)
} }
for (j = 0; j < LEN(fontfallbacks); j++) for (j = 0; j < LEN(fontfallbacks); j++)
if (fstrs[j])
free(fstrs[j]); free(fstrs[j]);
} }
@ -678,7 +670,7 @@ configure(XEvent *e)
} }
void void
usage(void) usage()
{ {
die("usage: %s [file]", argv0); die("usage: %s [file]", argv0);
} }
@ -703,6 +695,9 @@ main(int argc, char *argv[])
load(fp); load(fp);
fclose(fp); fclose(fp);
if (!slidecount)
usage();
xinit(); xinit();
run(); run();