summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2026-02-27 10:34:22 -0500
committerbdunahu <bdunahu@operationnull.com>2026-02-27 10:35:34 -0500
commit0988980aa572f2d1b7b34488d1559e6083a7922f (patch)
tree51e4ddc4244dae3d52f1f27db266c75503887921
parent882d54c225b83c762acf5bb3967f4890c3ecef86 (diff)
add pdf patchHEADmaster
-rw-r--r--config.def.h1
-rw-r--r--config.mk7
-rw-r--r--patches/sent-pdf-e3b86c2.diff127
-rw-r--r--sent.c45
4 files changed, 174 insertions, 6 deletions
diff --git a/config.def.h b/config.def.h
index 60eb376..26c01b4 100644
--- a/config.def.h
+++ b/config.def.h
@@ -47,6 +47,7 @@ static Shortcut shortcuts[] = {
{ XK_n, advance, {.i = +1} },
{ XK_p, advance, {.i = -1} },
{ XK_r, reload, {0} },
+ { XK_g, pdf, {0} },
};
static Filter filters[] = {
diff --git a/config.mk b/config.mk
index d61c554..9174687 100644
--- a/config.mk
+++ b/config.mk
@@ -7,14 +7,17 @@ VERSION = 1
PREFIX = /usr/local
MANPREFIX = ${PREFIX}/share/man
+PKG_CONFIG = pkg-config
+
X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib
# includes and libs
INCS = -I. -I/usr/include -I/usr/include/freetype2 -I${X11INC}
-LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
+LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11 -lcairo
# OpenBSD (uncomment)
-#INCS = -I. -I${X11INC} -I${X11INC}/freetype2
+INCS = -I. -I${X11INC} -I${X11INC}/freetype2 `${PKG_CONFIG} --cflags cairo`
+LIBS += -L/usr/local/lib
# FreeBSD (uncomment)
#INCS = -I. -I/usr/local/include -I/usr/local/include/freetype2 -I${X11INC}
#LIBS = -L/usr/local/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
diff --git a/patches/sent-pdf-e3b86c2.diff b/patches/sent-pdf-e3b86c2.diff
new file mode 100644
index 0000000..56b7d20
--- /dev/null
+++ b/patches/sent-pdf-e3b86c2.diff
@@ -0,0 +1,127 @@
+From e3b86c2910111f7bb004833c8036122d5256ba3c Mon Sep 17 00:00:00 2001
+From: Bryce Vandegrift <bryce@brycevandegrift.xyz>
+Date: Sun, 23 Apr 2023 14:03:40 -0400
+Subject: [PATCH] Use default filename if reading stdin
+
+---
+ config.def.h | 1 +
+ config.mk | 7 +++++--
+ sent.c | 45 +++++++++++++++++++++++++++++++++++++++++----
+ 3 files changed, 47 insertions(+), 6 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 60eb376..26c01b4 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -47,6 +47,7 @@ static Shortcut shortcuts[] = {
+ { XK_n, advance, {.i = +1} },
+ { XK_p, advance, {.i = -1} },
+ { XK_r, reload, {0} },
++ { XK_g, pdf, {0} },
+ };
+
+ static Filter filters[] = {
+diff --git a/config.mk b/config.mk
+index d61c554..9174687 100644
+--- a/config.mk
++++ b/config.mk
+@@ -7,14 +7,17 @@ VERSION = 1
+ PREFIX = /usr/local
+ MANPREFIX = ${PREFIX}/share/man
+
++PKG_CONFIG = pkg-config
++
+ X11INC = /usr/X11R6/include
+ X11LIB = /usr/X11R6/lib
+
+ # includes and libs
+ INCS = -I. -I/usr/include -I/usr/include/freetype2 -I${X11INC}
+-LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
++LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11 -lcairo
+ # OpenBSD (uncomment)
+-#INCS = -I. -I${X11INC} -I${X11INC}/freetype2
++INCS = -I. -I${X11INC} -I${X11INC}/freetype2 `${PKG_CONFIG} --cflags cairo`
++LIBS += -L/usr/local/lib
+ # FreeBSD (uncomment)
+ #INCS = -I. -I/usr/local/include -I/usr/local/include/freetype2 -I${X11INC}
+ #LIBS = -L/usr/local/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
+diff --git a/sent.c b/sent.c
+index dfadd3a..a935554 100644
+--- a/sent.c
++++ b/sent.c
+@@ -19,6 +19,10 @@
+ #include <X11/Xutil.h>
+ #include <X11/Xft/Xft.h>
+
++#include <cairo/cairo.h>
++#include <cairo/cairo-xlib.h>
++#include <cairo/cairo-pdf.h>
++
+ #include "arg.h"
+ #include "util.h"
+ #include "drw.h"
+@@ -97,6 +101,7 @@ static void cleanup(int slidesonly);
+ static void reload(const Arg *arg);
+ static void load(FILE *fp);
+ static void advance(const Arg *arg);
++static void pdf();
+ static void quit(const Arg *arg);
+ static void resize(int width, int height);
+ static void run(void);
+@@ -430,10 +435,6 @@ load(FILE *fp)
+ maxlines = 0;
+ memset((s = &slides[slidecount]), 0, sizeof(Slide));
+ do {
+- /* if there's a leading null, we can't do blen-1 */
+- if (buf[0] == '\0')
+- continue;
+-
+ if (buf[0] == '#')
+ continue;
+
+@@ -481,6 +482,42 @@ advance(const Arg *arg)
+ }
+ }
+
++void
++pdf()
++{
++ const Arg next = { .i = 1 };
++ Arg first;
++ cairo_surface_t *cs;
++
++ if (!fname)
++ fname = "slides";
++
++ char filename[strlen(fname) + 5];
++ sprintf(filename, "%s.pdf", fname);
++ cairo_surface_t *pdf = cairo_pdf_surface_create(filename, xw.w, xw.h);
++
++ cairo_t *cr = cairo_create(pdf);
++
++ first.i = -idx;
++ advance(&first);
++
++ cs = cairo_xlib_surface_create(xw.dpy, xw.win, xw.vis, xw.w, xw.h);
++ cairo_set_source_surface(cr, cs, 0.0, 0.0);
++ for (int i = 0; i < slidecount; ++i) {
++ cairo_paint(cr);
++ cairo_show_page(cr);
++ cairo_surface_flush(cs);
++ advance(&next);
++ cairo_surface_mark_dirty(cs);
++ }
++ cairo_surface_destroy(cs);
++
++ cairo_destroy(cr);
++ cairo_surface_destroy(pdf);
++ first.i = -(slidecount-1);
++ advance(&first);
++}
++
+ void
+ quit(const Arg *arg)
+ {
+--
+2.40.0
+
diff --git a/sent.c b/sent.c
index dfadd3a..a935554 100644
--- a/sent.c
+++ b/sent.c
@@ -19,6 +19,10 @@
#include <X11/Xutil.h>
#include <X11/Xft/Xft.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-xlib.h>
+#include <cairo/cairo-pdf.h>
+
#include "arg.h"
#include "util.h"
#include "drw.h"
@@ -97,6 +101,7 @@ static void cleanup(int slidesonly);
static void reload(const Arg *arg);
static void load(FILE *fp);
static void advance(const Arg *arg);
+static void pdf();
static void quit(const Arg *arg);
static void resize(int width, int height);
static void run(void);
@@ -430,10 +435,6 @@ load(FILE *fp)
maxlines = 0;
memset((s = &slides[slidecount]), 0, sizeof(Slide));
do {
- /* if there's a leading null, we can't do blen-1 */
- if (buf[0] == '\0')
- continue;
-
if (buf[0] == '#')
continue;
@@ -482,6 +483,42 @@ advance(const Arg *arg)
}
void
+pdf()
+{
+ const Arg next = { .i = 1 };
+ Arg first;
+ cairo_surface_t *cs;
+
+ if (!fname)
+ fname = "slides";
+
+ char filename[strlen(fname) + 5];
+ sprintf(filename, "%s.pdf", fname);
+ cairo_surface_t *pdf = cairo_pdf_surface_create(filename, xw.w, xw.h);
+
+ cairo_t *cr = cairo_create(pdf);
+
+ first.i = -idx;
+ advance(&first);
+
+ cs = cairo_xlib_surface_create(xw.dpy, xw.win, xw.vis, xw.w, xw.h);
+ cairo_set_source_surface(cr, cs, 0.0, 0.0);
+ for (int i = 0; i < slidecount; ++i) {
+ cairo_paint(cr);
+ cairo_show_page(cr);
+ cairo_surface_flush(cs);
+ advance(&next);
+ cairo_surface_mark_dirty(cs);
+ }
+ cairo_surface_destroy(cs);
+
+ cairo_destroy(cr);
+ cairo_surface_destroy(pdf);
+ first.i = -(slidecount-1);
+ advance(&first);
+}
+
+void
quit(const Arg *arg)
{
running = 0;