diff --git a/README.md b/README.md index e213efb..3fda5ee 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,19 @@ sent is a simple plaintext presentation tool. sent does not need latex, libreoffice or any other fancy file format, it uses -plaintext files and png images. Every paragraph represents a slide in the -presentation. +plaintext files to describe the slides and can include images via farbfeld. +Every paragraph represents a slide in the presentation. The presentation is displayed in a simple X11 window. The content of each slide is automatically scaled to fit the window and centered so you also don't have to worry about alignment. Instead you can really concentrate on the content. +Dependencies + +You need Xlib to build sent and the farbfeld[0] tools installed to use images in +your presentations. + Demo To get a little demo, just type @@ -47,3 +52,6 @@ presentation file could look like this: Development sent is developed at http://tools.suckless.org/sent + + +0: http://git.2f30.org/farbfeld/about/ diff --git a/example b/example index d4b62d2..8b385f0 100644 --- a/example +++ b/example @@ -20,6 +20,7 @@ easy to use depends on ♽ Xlib +☃ farbfeld ~1000 lines of code diff --git a/sent.c b/sent.c index e10e8ca..5f3cb59 100644 --- a/sent.c +++ b/sent.c @@ -186,7 +186,7 @@ Image *ffopen(char *filename) tmpfd = fd; fd = filter(fd, bin); if (fd < 0) - eprintf("could not filter %s:", filename); + eprintf("Unable to filter %s:", filename); close(tmpfd); if (read(fd, hdr, 16) != 16) @@ -218,7 +218,7 @@ int ffread(Image *img) uint8_t opac; uint8_t fg_r, fg_g, fg_b, bg_r, bg_g, bg_b; size_t rowlen, off, nbytes; - ssize_t r; + ssize_t count; if (!img) return 0; @@ -249,10 +249,10 @@ int ffread(Image *img) for (off = 0, y = 0; y < img->bufheight; y++) { nbytes = 0; while (nbytes < rowlen) { - r = read(img->fd, (char *)row + nbytes, rowlen - nbytes); - if (r < 0) - eprintf("read:"); - nbytes += r; + count = read(img->fd, (char *)row + nbytes, rowlen - nbytes); + if (count < 0) + eprintf("Unable to read from pipe:"); + nbytes += count; } for (x = 0; x < rowlen / 2; x += 4) { fg_r = ntohs(row[x + 0]) / 256; @@ -346,7 +346,7 @@ void ffdraw(Image *img) int xoffset = (xw.w - img->ximg->width) / 2; int yoffset = (xw.h - img->ximg->height) / 2; XPutImage(xw.dpy, xw.win, d->gc, img->ximg, 0, 0, - xoffset, yoffset, img->ximg->width, img->ximg->height); + xoffset, yoffset, img->ximg->width, img->ximg->height); XFlush(xw.dpy); img->state |= DRAWN; } @@ -604,12 +604,13 @@ void xinit() resize(DisplayWidth(xw.dpy, xw.scr), DisplayHeight(xw.dpy, xw.scr)); xw.attrs.bit_gravity = CenterGravity; - xw.attrs.event_mask = KeyPressMask | ExposureMask | StructureNotifyMask - | ButtonMotionMask | ButtonPressMask; + xw.attrs.event_mask = KeyPressMask | ExposureMask | StructureNotifyMask | + ButtonMotionMask | ButtonPressMask; xw.win = XCreateWindow(xw.dpy, XRootWindow(xw.dpy, xw.scr), 0, 0, - xw.w, xw.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput, xw.vis, - CWBitGravity | CWEventMask, &xw.attrs); + xw.w, xw.h, 0, XDefaultDepth(xw.dpy, xw.scr), + InputOutput, xw.vis, CWBitGravity | CWEventMask, + &xw.attrs); xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False); xw.netwmname = XInternAtom(xw.dpy, "_NET_WM_NAME", False);