diff options
-rw-r--r-- | src/cmd/9term/9term.c | 14 | ||||
-rw-r--r-- | src/cmd/9term/SunOS.c | 9 | ||||
-rw-r--r-- | src/cmd/9term/bsdpty.c | 9 | ||||
-rw-r--r-- | src/cmd/9term/term.h | 1 |
4 files changed, 30 insertions, 3 deletions
diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c index c18e78c1..33104df1 100644 --- a/src/cmd/9term/9term.c +++ b/src/cmd/9term/9term.c @@ -946,13 +946,16 @@ key(Rune r) } if(r == 0x7F){ /* DEL: send interrupt; what a mess */ + char rubout[1]; + if(holdon){ holdon = 0; drawhold(holdon); } t.qh = t.q0 = t.q1 = t.nr; show(t.q0); - write(rcfd, "\x7F", 1); + rubout[0] = getintr(sfd); + write(rcfd, rubout, 1); return; } @@ -1031,7 +1034,7 @@ consready(void) /* look to see if there is a complete line */ for(i=t.qh; i<t.nr; i++){ c = t.r[i]; - if(c=='\n' || c=='\004' || c=='\x7F') + if(c=='\n' || c=='\004' || c==0x7F) return 1; } return 0; @@ -1062,7 +1065,12 @@ consread(void) c = *p; p += width; n -= width; - if(!raw && (c == '\n' || c == '\004' || c == '\x7F')) + if(c == 0x7F){ + *(p-1) = getintr(sfd); + if(!raw) + break; + } + if(!raw && (c == '\n' || c == '\004')) break; } n = p-buf; diff --git a/src/cmd/9term/SunOS.c b/src/cmd/9term/SunOS.c index 467f0d23..77ef2823 100644 --- a/src/cmd/9term/SunOS.c +++ b/src/cmd/9term/SunOS.c @@ -95,3 +95,12 @@ setecho(int fd, int newe) } return old; } + +int +getintr(int fd) +{ + if((tcgetattr(fd, &ttmode) < 0) + return 0x7F; + return ttmode.c_cc[VINTR]; +} + diff --git a/src/cmd/9term/bsdpty.c b/src/cmd/9term/bsdpty.c index 0de9137d..915836a8 100644 --- a/src/cmd/9term/bsdpty.c +++ b/src/cmd/9term/bsdpty.c @@ -117,3 +117,12 @@ setecho(int fd, int newe) } return old; } + +int +getintr(int fd) +{ + if(tcgetattr(fd, &ttmode) < 0) + return 0x7F; + return ttmode.c_cc[VINTR]; +} + diff --git a/src/cmd/9term/term.h b/src/cmd/9term/term.h index 62ef0e68..272b4847 100644 --- a/src/cmd/9term/term.h +++ b/src/cmd/9term/term.h @@ -6,3 +6,4 @@ extern int rcstart(int, char*[], int*, int*); extern int isecho(int); extern int setecho(int, int); extern int noecho; +extern int getintr(int); |