Add MC sequence - 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 1f0d981bd7a1450ddfae3591c6e457253b3a6842
 (DIR) parent cdb3b1892af40110660da8c3f6fc06b1b054fd12
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Fri, 31 Jan 2014 20:57:09 +0100
       
       Add MC sequence
       
       This sequence control when the printer is enabled or disabled. This
       sequence control the behaviour of the -o option.
       
       Diffstat:
         M st.c                                |      18 ++++++++++++++++--
       
       1 file changed, 16 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -134,6 +134,7 @@ enum term_mode {
                MODE_MOUSEX10    = 131072,
                MODE_MOUSEMANY   = 262144,
                MODE_BRCKTPASTE  = 524288,
       +        MODE_PRINT       = 1048576,
                MODE_MOUSE       = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
                                  |MODE_MOUSEMANY,
        };
       @@ -469,7 +470,7 @@ static STREscape strescseq;
        static int cmdfd;
        static pid_t pid;
        static Selection sel;
       -static int iofd = -1;
       +static int iofd;
        static char **opt_cmd = NULL;
        static char *opt_io = NULL;
        static char *opt_title = NULL;
       @@ -1256,6 +1257,7 @@ ttynew(void) {
                        cmdfd = m;
                        signal(SIGCHLD, sigchld);
                        if(opt_io) {
       +                        term.mode |= MODE_PRINT;
                                iofd = (!strcmp(opt_io, "-")) ?
                                          STDOUT_FILENO :
                                          open(opt_io, O_WRONLY | O_CREAT, 0666);
       @@ -1979,6 +1981,18 @@ csihandle(void) {
                        DEFAULT(csiescseq.arg[0], 1);
                        tmoveto(term.c.x, term.c.y+csiescseq.arg[0]);
                        break;
       +        case 'i': /* MC -- Media Copy */
       +                switch(csiescseq.arg[0]) {
       +                case 0:
       +                case 1:
       +                case 4:
       +                        term.mode &= ~MODE_PRINT;
       +                        break;
       +                case 5:
       +                        term.mode |= MODE_PRINT;
       +                        break;
       +                }
       +                break;
                case 'c': /* DA -- Device Attributes */
                        if(csiescseq.arg[0] == 0)
                                ttywrite(VT102ID, sizeof(VT102ID) - 1);
       @@ -2332,7 +2346,7 @@ tputc(char *c, int len) {
                        width = wcwidth(u8char);
                }
        
       -        if(iofd != -1) {
       +        if(IS_SET(MODE_PRINT) && iofd != -1) {
                        if(xwrite(iofd, c, len) < 0) {
                                fprintf(stderr, "Error writing in %s:%s\n",
                                        opt_io, strerror(errno));