[dev] [st][PATCH 1/6] Add MC sequence

From: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
Date: Thu, 6 Mar 2014 08:04:27 +0100

This sequence control when the printer is enabled or disabled. This
sequence control the behaviour of the -o option.
---
 st.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/st.c b/st.c
index cad61bf..314bf3f 100644
--- a/st.c
+++ b/st.c
_AT_@ -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,
 };
_AT_@ -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;
_AT_@ -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);
_AT_@ -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);
_AT_@ -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));
-- 
1.8.5.3
Received on Thu Mar 06 2014 - 08:04:27 CET

This archive was generated by hypermail 2.3.0 : Thu Mar 06 2014 - 08:12:06 CET