Add MC sequence
authorRoberto E. Vargas Caballero <k0ga@shike2.com>
Fri, 31 Jan 2014 19:57:09 +0000 (20:57 +0100)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Sat, 22 Feb 2014 10:54:30 +0000 (11:54 +0100)
This sequence control when the printer is enabled or disabled. This
sequence control the behaviour of the -o option.

st.c

diff --git a/st.c b/st.c
index cad61bf..314bf3f 100644 (file)
--- a/st.c
+++ b/st.c
@@ -134,6 +134,7 @@ enum term_mode {
        MODE_MOUSEX10    = 131072,
        MODE_MOUSEMANY   = 262144,
        MODE_BRCKTPASTE  = 524288,
        MODE_MOUSEX10    = 131072,
        MODE_MOUSEMANY   = 262144,
        MODE_BRCKTPASTE  = 524288,
+       MODE_PRINT       = 1048576,
        MODE_MOUSE       = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
                          |MODE_MOUSEMANY,
 };
        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 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;
 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) {
                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);
                        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;
                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);
        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);
        }
 
                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));
                if(xwrite(iofd, c, len) < 0) {
                        fprintf(stderr, "Error writing in %s:%s\n",
                                opt_io, strerror(errno));