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:
		
							
								
								
									
										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];
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user