Introduction
Introduction Statistics Contact Development Disclaimer Help
st-externalpipe-0.8.1.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
st-externalpipe-0.8.1.diff (1588B)
---
1 diff --git a/st.c b/st.c
2 index 46c954b..35cd7de 100644
3 --- a/st.c
4 +++ b/st.c
5 @@ -1972,6 +1972,59 @@ tprinter(char *s, size_t len)
6 }
7 }
8
9 +void
10 +externalpipe(const Arg *arg)
11 +{
12 + int to[2];
13 + char buf[UTF_SIZ];
14 + void (*oldsigpipe)(int);
15 + Glyph *bp, *end;
16 + int lastpos, n, newline;
17 +
18 + if (pipe(to) == -1)
19 + return;
20 +
21 + switch (fork()) {
22 + case -1:
23 + close(to[0]);
24 + close(to[1]);
25 + return;
26 + case 0:
27 + dup2(to[0], STDIN_FILENO);
28 + close(to[0]);
29 + close(to[1]);
30 + execvp(((char **)arg->v)[0], (char **)arg->v);
31 + fprintf(stderr, "st: execvp %s\n", ((char **)arg->v)[0]…
32 + perror("failed");
33 + exit(0);
34 + }
35 +
36 + close(to[0]);
37 + /* ignore sigpipe for now, in case child exists early */
38 + oldsigpipe = signal(SIGPIPE, SIG_IGN);
39 + newline = 0;
40 + for (n = 0; n < term.row; n++) {
41 + bp = term.line[n];
42 + lastpos = MIN(tlinelen(n) + 1, term.col) - 1;
43 + if (lastpos < 0)
44 + break;
45 + end = &bp[lastpos + 1];
46 + for (; bp < end; ++bp)
47 + if (xwrite(to[1], buf, utf8encode(bp->u, buf)) …
48 + break;
49 + if ((newline = term.line[n][lastpos].mode & ATTR_WRAP))
50 + continue;
51 + if (xwrite(to[1], "\n", 1) < 0)
52 + break;
53 + newline = 0;
54 + }
55 + if (newline)
56 + (void)xwrite(to[1], "\n", 1);
57 + close(to[1]);
58 + /* restore */
59 + signal(SIGPIPE, oldsigpipe);
60 +}
61 +
62 void
63 iso14755(const Arg *arg)
64 {
65 diff --git a/st.h b/st.h
66 index dac64d8..86cd646 100644
67 --- a/st.h
68 +++ b/st.h
69 @@ -80,6 +80,7 @@ void die(const char *, ...);
70 void redraw(void);
71 void draw(void);
72
73 +void externalpipe(const Arg *);
74 void iso14755(const Arg *);
75 void printscreen(const Arg *);
76 void printsel(const Arg *);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.