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 | |
| parent | cfefa054e80afa22d6948bf997a6818e778801f6 (diff) | |
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(-)
| -rw-r--r-- | st.1 | 6 | ||||
| -rw-r--r-- | st.c | 14 | 
2 files changed, 19 insertions, 1 deletions
| @@ -10,6 +10,8 @@ st \- simple terminal  .RB [ \-w   .IR windowid ]  .RB [ \-v ] +.RB [ \-f +.IR file ]  .RB [ \-e  .IR command ...]  .SH DESCRIPTION @@ -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 @@ -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]; | 
