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 through named pipes. --- st.1 | 6 ++++++ st.c | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-)
This commit is contained in:
parent
cfefa054e8
commit
a984ffc4cb
6
st.1
6
st.1
@ -10,6 +10,8 @@ st \- simple terminal
|
|||||||
.RB [ \-w
|
.RB [ \-w
|
||||||
.IR windowid ]
|
.IR windowid ]
|
||||||
.RB [ \-v ]
|
.RB [ \-v ]
|
||||||
|
.RB [ \-f
|
||||||
|
.IR file ]
|
||||||
.RB [ \-e
|
.RB [ \-e
|
||||||
.IR command ...]
|
.IR command ...]
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
@ -30,6 +32,10 @@ embeds st within the window identified by
|
|||||||
.B \-v
|
.B \-v
|
||||||
prints version information to stderr, then exits.
|
prints version information to stderr, then exits.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-f " file"
|
||||||
|
writes all the I/O to
|
||||||
|
.I file
|
||||||
|
.TP
|
||||||
.BI \-e " program " [ " arguments " "... ]"
|
.BI \-e " program " [ " arguments " "... ]"
|
||||||
st executes
|
st executes
|
||||||
.I program
|
.I program
|
||||||
|
14
st.c
14
st.c
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
#define USAGE \
|
#define USAGE \
|
||||||
"st " VERSION " (c) 2010-2012 st engineers\n" \
|
"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 command...]\n"
|
||||||
|
|
||||||
/* XEMBED messages */
|
/* XEMBED messages */
|
||||||
#define XEMBED_FOCUS_IN 4
|
#define XEMBED_FOCUS_IN 4
|
||||||
@ -342,7 +342,9 @@ static STREscape strescseq;
|
|||||||
static int cmdfd;
|
static int cmdfd;
|
||||||
static pid_t pid;
|
static pid_t pid;
|
||||||
static Selection sel;
|
static Selection sel;
|
||||||
|
static FILE *fileio;
|
||||||
static char **opt_cmd = NULL;
|
static char **opt_cmd = NULL;
|
||||||
|
static char *opt_io = NULL;
|
||||||
static char *opt_title = NULL;
|
static char *opt_title = NULL;
|
||||||
static char *opt_embed = NULL;
|
static char *opt_embed = NULL;
|
||||||
static char *opt_class = NULL;
|
static char *opt_class = NULL;
|
||||||
@ -776,6 +778,10 @@ ttynew(void) {
|
|||||||
close(s);
|
close(s);
|
||||||
cmdfd = m;
|
cmdfd = m;
|
||||||
signal(SIGCHLD, sigchld);
|
signal(SIGCHLD, sigchld);
|
||||||
|
if (opt_io && !(fileio = fopen(opt_io, "w"))) {
|
||||||
|
fprintf(stderr, "Error opening %s:%s",
|
||||||
|
opt_io, strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1534,6 +1540,9 @@ tputtab(bool forward) {
|
|||||||
void
|
void
|
||||||
tputc(char *c) {
|
tputc(char *c) {
|
||||||
char ascii = *c;
|
char ascii = *c;
|
||||||
|
|
||||||
|
if (fileio)
|
||||||
|
putc(ascii, fileio);
|
||||||
if(term.esc & ESC_START) {
|
if(term.esc & ESC_START) {
|
||||||
if(term.esc & ESC_CSI) {
|
if(term.esc & ESC_CSI) {
|
||||||
csiescseq.buf[csiescseq.len++] = ascii;
|
csiescseq.buf[csiescseq.len++] = ascii;
|
||||||
@ -2269,6 +2278,9 @@ main(int argc, char *argv[]) {
|
|||||||
case 'w':
|
case 'w':
|
||||||
if(++i < argc) opt_embed = argv[i];
|
if(++i < argc) opt_embed = argv[i];
|
||||||
break;
|
break;
|
||||||
|
case 'f':
|
||||||
|
if (++i < argc) opt_io = argv[i];
|
||||||
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
/* eat every remaining arguments */
|
/* eat every remaining arguments */
|
||||||
if(++i < argc) opt_cmd = &argv[i];
|
if(++i < argc) opt_cmd = &argv[i];
|
||||||
|
Loading…
Reference in New Issue
Block a user