tAdd write I/O to file - st - [fork] customized build of st, the simple terminal | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a984ffc4cb755c6dcdbc153b2591dca0ae6a8ead | |
parent cfefa054e80afa22d6948bf997a6818e778801f6 | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
Date: Mon, 3 Sep 2012 21:52:21 +0200 | |
Add write I/O to file | |
This is a theorical feature listed in http://st.suckless.org/goals. All the | |
input/output of the terminal will be written to a file, which can be very | |
useful for debugging, and also allow interconnect st to other process | |
tthrough named pipes. | |
--- | |
st.1 | 6 ++++++ | |
st.c | 14 +++++++++++++- | |
2 files changed, 19 insertions(+), 1 deletion(-) | |
Diffstat: | |
M st.1 | 6 ++++++ | |
M st.c | 14 +++++++++++++- | |
2 files changed, 19 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/st.1 b/st.1 | |
t@@ -10,6 +10,8 @@ st \- simple terminal | |
.RB [ \-w | |
.IR windowid ] | |
.RB [ \-v ] | |
+.RB [ \-f | |
+.IR file ] | |
.RB [ \-e | |
.IR command ...] | |
.SH DESCRIPTION | |
t@@ -30,6 +32,10 @@ embeds st within the window identified by | |
.B \-v | |
prints version information to stderr, then exits. | |
.TP | |
+.BI \-f " file" | |
+writes all the I/O to | |
+.I file | |
+.TP | |
.BI \-e " program " [ " arguments " "... ]" | |
st executes | |
.I program | |
diff --git a/st.c b/st.c | |
t@@ -36,7 +36,7 @@ | |
#define USAGE \ | |
"st " VERSION " (c) 2010-2012 st engineers\n" \ | |
- "usage: st [-t title] [-c class] [-w windowid] [-v] [-e command...]\n" | |
+ "usage: st [-t title] [-c class] [-w windowid] [-v] [-f file] [-e comm… | |
/* XEMBED messages */ | |
#define XEMBED_FOCUS_IN 4 | |
t@@ -342,7 +342,9 @@ static STREscape strescseq; | |
static int cmdfd; | |
static pid_t pid; | |
static Selection sel; | |
+static FILE *fileio; | |
static char **opt_cmd = NULL; | |
+static char *opt_io = NULL; | |
static char *opt_title = NULL; | |
static char *opt_embed = NULL; | |
static char *opt_class = NULL; | |
t@@ -776,6 +778,10 @@ ttynew(void) { | |
close(s); | |
cmdfd = m; | |
signal(SIGCHLD, sigchld); | |
+ if (opt_io && !(fileio = fopen(opt_io, "w"))) { | |
+ fprintf(stderr, "Error opening %s:%s", | |
+ opt_io, strerror(errno)); | |
+ } | |
} | |
} | |
t@@ -1534,6 +1540,9 @@ tputtab(bool forward) { | |
void | |
tputc(char *c) { | |
char ascii = *c; | |
+ | |
+ if (fileio) | |
+ putc(ascii, fileio); | |
if(term.esc & ESC_START) { | |
if(term.esc & ESC_CSI) { | |
csiescseq.buf[csiescseq.len++] = ascii; | |
t@@ -2269,6 +2278,9 @@ main(int argc, char *argv[]) { | |
case 'w': | |
if(++i < argc) opt_embed = argv[i]; | |
break; | |
+ case 'f': | |
+ if (++i < argc) opt_io = argv[i]; | |
+ break; | |
case 'e': | |
/* eat every remaining arguments */ | |
if(++i < argc) opt_cmd = &argv[i]; |