Add write I/O to file - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a984ffc4cb755c6dcdbc153b2591dca0ae6a8ead
 (DIR) parent cfefa054e80afa22d6948bf997a6818e778801f6
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       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
       through 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(-)
       ---
 (DIR) diff --git a/st.1 b/st.1
       @@ -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
 (DIR) diff --git a/st.c b/st.c
       @@ -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];