Introduction
Introduction Statistics Contact Development Disclaimer Help
st-externalpipe-0.8.2.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
st-externalpipe-0.8.2.diff (1563B)
---
1 diff --git a/st.c b/st.c
2 index ede7ae6..f55d30f 100644
3 --- a/st.c
4 +++ b/st.c
5 @@ -1914,6 +1914,59 @@ strparse(void)
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 strdump(void)
64 {
65 diff --git a/st.h b/st.h
66 index 4da3051..cb7101f 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 printscreen(const Arg *);
75 void printsel(const Arg *);
76 void sendbreak(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.