diff options
author | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2012-09-03 21:52:21 +0200 |
---|---|---|
committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2012-09-03 21:52:21 +0200 |
commit | a984ffc4cb755c6dcdbc153b2591dca0ae6a8ead (patch) | |
tree | 393e05c204a8a5c9153f358eecc40b0f79b6c827 /st.c | |
parent | cfefa054e80afa22d6948bf997a6818e778801f6 (diff) | |
download | st-a984ffc4cb755c6dcdbc153b2591dca0ae6a8ead.tar.gz st-a984ffc4cb755c6dcdbc153b2591dca0ae6a8ead.tar.bz2 |
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(-)
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -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 command...]\n" /* XEMBED messages */ #define XEMBED_FOCUS_IN 4 @@ -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; @@ -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)); + } } } @@ -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; @@ -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]; |