sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

sent-pdf-e3b86c2.diff (3295B)


      1 From e3b86c2910111f7bb004833c8036122d5256ba3c Mon Sep 17 00:00:00 2001
      2 From: Bryce Vandegrift <bryce@brycevandegrift.xyz>
      3 Date: Sun, 23 Apr 2023 14:03:40 -0400
      4 Subject: [PATCH] Use default filename if reading stdin
      5 
      6 ---
      7  config.def.h |  1 +
      8  config.mk    |  7 +++++--
      9  sent.c       | 45 +++++++++++++++++++++++++++++++++++++++++----
     10  3 files changed, 47 insertions(+), 6 deletions(-)
     11 
     12 diff --git a/config.def.h b/config.def.h
     13 index 60eb376..26c01b4 100644
     14 --- a/config.def.h
     15 +++ b/config.def.h
     16 @@ -47,6 +47,7 @@ static Shortcut shortcuts[] = {
     17  	{ XK_n,           advance,        {.i = +1} },
     18  	{ XK_p,           advance,        {.i = -1} },
     19  	{ XK_r,           reload,         {0} },
     20 +	{ XK_g,           pdf,            {0} },
     21  };
     22  
     23  static Filter filters[] = {
     24 diff --git a/config.mk b/config.mk
     25 index d61c554..9174687 100644
     26 --- a/config.mk
     27 +++ b/config.mk
     28 @@ -7,14 +7,17 @@ VERSION = 1
     29  PREFIX = /usr/local
     30  MANPREFIX = ${PREFIX}/share/man
     31  
     32 +PKG_CONFIG = pkg-config
     33 +
     34  X11INC = /usr/X11R6/include
     35  X11LIB = /usr/X11R6/lib
     36  
     37  # includes and libs
     38  INCS = -I. -I/usr/include -I/usr/include/freetype2 -I${X11INC}
     39 -LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
     40 +LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11 -lcairo
     41  # OpenBSD (uncomment)
     42 -#INCS = -I. -I${X11INC} -I${X11INC}/freetype2
     43 +INCS = -I. -I${X11INC} -I${X11INC}/freetype2 `${PKG_CONFIG} --cflags cairo`
     44 +LIBS += -L/usr/local/lib
     45  # FreeBSD (uncomment)
     46  #INCS = -I. -I/usr/local/include -I/usr/local/include/freetype2 -I${X11INC}
     47  #LIBS = -L/usr/local/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
     48 diff --git a/sent.c b/sent.c
     49 index dfadd3a..a935554 100644
     50 --- a/sent.c
     51 +++ b/sent.c
     52 @@ -19,6 +19,10 @@
     53  #include <X11/Xutil.h>
     54  #include <X11/Xft/Xft.h>
     55  
     56 +#include <cairo/cairo.h>
     57 +#include <cairo/cairo-xlib.h>
     58 +#include <cairo/cairo-pdf.h>
     59 +
     60  #include "arg.h"
     61  #include "util.h"
     62  #include "drw.h"
     63 @@ -97,6 +101,7 @@ static void cleanup(int slidesonly);
     64  static void reload(const Arg *arg);
     65  static void load(FILE *fp);
     66  static void advance(const Arg *arg);
     67 +static void pdf();
     68  static void quit(const Arg *arg);
     69  static void resize(int width, int height);
     70  static void run(void);
     71 @@ -430,10 +435,6 @@ load(FILE *fp)
     72  		maxlines = 0;
     73  		memset((s = &slides[slidecount]), 0, sizeof(Slide));
     74  		do {
     75 -			/* if there's a leading null, we can't do blen-1 */
     76 -			if (buf[0] == '\0')
     77 -				continue;
     78 -
     79  			if (buf[0] == '#')
     80  				continue;
     81  
     82 @@ -481,6 +482,42 @@ advance(const Arg *arg)
     83  	}
     84  }
     85  
     86 +void
     87 +pdf()
     88 +{
     89 +	const Arg next = { .i = 1 };
     90 +	Arg first;
     91 +	cairo_surface_t *cs;
     92 +
     93 +	if (!fname)
     94 +		fname = "slides";
     95 +
     96 +	char filename[strlen(fname) + 5];
     97 +	sprintf(filename, "%s.pdf", fname);
     98 +	cairo_surface_t *pdf = cairo_pdf_surface_create(filename, xw.w, xw.h);
     99 +
    100 +	cairo_t *cr = cairo_create(pdf);
    101 +
    102 +	first.i = -idx;
    103 +	advance(&first);
    104 +
    105 +	cs = cairo_xlib_surface_create(xw.dpy, xw.win, xw.vis, xw.w, xw.h);
    106 +	cairo_set_source_surface(cr, cs, 0.0, 0.0);
    107 +	for (int i = 0; i < slidecount; ++i) {
    108 +		cairo_paint(cr);
    109 +		cairo_show_page(cr);
    110 +		cairo_surface_flush(cs);
    111 +		advance(&next);
    112 +		cairo_surface_mark_dirty(cs);
    113 +	}
    114 +	cairo_surface_destroy(cs);
    115 +
    116 +	cairo_destroy(cr);
    117 +	cairo_surface_destroy(pdf);
    118 +	first.i = -(slidecount-1);
    119 +	advance(&first);
    120 +}
    121 +
    122  void
    123  quit(const Arg *arg)
    124  {
    125 -- 
    126 2.40.0
    127