aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-08-11 16:43:37 +0000
committerrsc <devnull@localhost>2005-08-11 16:43:37 +0000
commit38897b2053f81eb7f46d936159c8f29ecb5c4e99 (patch)
tree29895c9394644256588f1f1c8d3d30cf7f446753 /src
parentae89363c306de4540f403fc9f205a1e8f3be6674 (diff)
downloadplan9port-38897b2053f81eb7f46d936159c8f29ecb5c4e99.tar.gz
plan9port-38897b2053f81eb7f46d936159c8f29ecb5c4e99.tar.bz2
plan9port-38897b2053f81eb7f46d936159c8f29ecb5c4e99.zip
Generate interrupt key (according to terminal settings)
when user presses DEL.
Diffstat (limited to 'src')
-rw-r--r--src/cmd/9term/9term.c14
-rw-r--r--src/cmd/9term/SunOS.c9
-rw-r--r--src/cmd/9term/bsdpty.c9
-rw-r--r--src/cmd/9term/term.h1
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);