# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 1f0d981bd7a1450ddfae3591c6e457253b3a6842
    parent cdb3b1892af40110660da8c3f6fc06b1b054fd12
    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:
    Mst.c | 18++++++++++++++++--

    1 file changed, 16 insertions(+), 2 deletions(-)
    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));