From bc54898807d27e79ba9f1b595ef3e09e3da67522 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 20 Aug 2017 19:17:46 +0200 Subject: ssh: issue "winchon" ctl request to /dev/consctl to get interrupt on window size change from vt(1) --- sys/src/cmd/ssh.c | 58 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 19 deletions(-) (limited to 'sys/src/cmd/ssh.c') diff --git a/sys/src/cmd/ssh.c b/sys/src/cmd/ssh.c index 65c10799b..c40544ef7 100644 --- a/sys/src/cmd/ssh.c +++ b/sys/src/cmd/ssh.c @@ -97,7 +97,7 @@ shutdown(void) void catch(void*, char *msg) { - if(strstr(msg, "interrupt") != nil){ + if(strcmp(msg, "interrupt") == 0){ intr = 1; noted(NCONT); } @@ -114,7 +114,7 @@ wasintr(void) return 1; memset(err, 0, sizeof(err)); errstr(err, sizeof(err)); - r = strstr(err, "interrupt") != nil; + r = strcmp(err, "interrupted") == 0; errstr(err, sizeof(err)); return r; } @@ -1073,20 +1073,10 @@ static struct { } tty; void -rawon(void) +getdim(void) { - int ctl; char *s; - close(0); - if(open("/dev/cons", OREAD) != 0) - sysfatal("open: %r"); - close(1); - if(open("/dev/cons", OWRITE) != 1) - sysfatal("open: %r"); - dup(1, 2); - if((ctl = open("/dev/consctl", OWRITE)) >= 0) - write(ctl, "rawon", 5); if(s = getenv("XPIXELS")){ tty.xpixels = atoi(s); free(s); @@ -1105,6 +1095,25 @@ rawon(void) } } +void +rawon(void) +{ + int ctl; + + close(0); + if(open("/dev/cons", OREAD) != 0) + sysfatal("open: %r"); + close(1); + if(open("/dev/cons", OWRITE) != 1) + sysfatal("open: %r"); + dup(1, 2); + if((ctl = open("/dev/consctl", OWRITE)) >= 0){ + write(ctl, "rawon", 5); + write(ctl, "winchon", 7); /* vt(1): interrupt note on window change */ + } + getdim(); +} + #pragma varargck type "k" char* kfmt(Fmt *f) @@ -1323,12 +1332,23 @@ Next1: switch(recvpkt()){ break; if(n < 0 && wasintr()){ if(!raw) break; - sendpkt("busbs", MSG_CHANNEL_REQUEST, - send.chan, - "signal", 6, - 0, - "INT", 3); - intr = 0; + if(intr){ + getdim(); + sendpkt("busbuuuu", MSG_CHANNEL_REQUEST, + send.chan, + "window-change", 13, + 0, + tty.cols, + tty.lines, + tty.xpixels, + tty.ypixels); + sendpkt("busbs", MSG_CHANNEL_REQUEST, + send.chan, + "signal", 6, + 0, + "INT", 3); + intr = 0; + } continue; } if(n <= 0) -- cgit v1.2.3