summaryrefslogtreecommitdiff
path: root/sys/src/cmd/vt
diff options
context:
space:
mode:
authormischief <mischief@offblast.org>2013-10-28 02:13:35 -0700
committermischief <mischief@offblast.org>2013-10-28 02:13:35 -0700
commitb35df8dd22de95d51fb49b700b19935eb2c46e4a (patch)
tree4255c3a8cb1172bb5d0098d561382174e3291214 /sys/src/cmd/vt
parent96c1e08f481b67ea0e8694931cd7e46d339f5fc5 (diff)
vt: discard unhandle OSC escapes, and use nelem instead of sizeof for title buffer
Diffstat (limited to 'sys/src/cmd/vt')
-rw-r--r--sys/src/cmd/vt/vt.c51
1 files changed, 38 insertions, 13 deletions
diff --git a/sys/src/cmd/vt/vt.c b/sys/src/cmd/vt/vt.c
index 98f3ad29b..ed28277c1 100644
--- a/sys/src/cmd/vt/vt.c
+++ b/sys/src/cmd/vt/vt.c
@@ -122,6 +122,7 @@ char gmap[256] = {
};
static void setattr(int argc, int *argv);
+static void osc(void);
void
fixops(int *operand)
@@ -820,19 +821,9 @@ print("unknown escape2 '%c' (0x%x)\n", dch, dch);
peekc = '\033';
break;
- /* set title */
- case ']': /* it's actually <esc> ] num ; title <bel> */
- {
- int ch, fd;
- number(buf, nil);
- i = 0;
- while((ch = get_next_char()) != '\a')
- if(i < sizeof buf)
- buf[i++] = ch;
- fd = open("/dev/label", OWRITE);
- write(fd, buf, i);
- close(fd);
- }
+ /* OSC escape */
+ case ']':
+ osc();
break;
/*
@@ -946,3 +937,37 @@ setattr(int argc, int *argv)
}
}
}
+
+// handle ESC], Operating System Command
+static void
+osc(void)
+{
+ Rune ch, buf[BUFS+1];
+ int fd, osc, got, i;
+ osc = number(&ch, &got);
+
+ if(got) {
+ switch(osc) {
+ case 0:
+ case 1:
+ case 2:
+ // set title
+ i = 0;
+
+ while((ch = get_next_char()) != '\a') {
+ if(i < nelem(buf) - 1) {
+ buf[i++] = ch;
+ }
+ }
+ buf[i] = 0;
+ if((fd = open("/dev/label", OWRITE)) >= 0) {
+ fprint(fd, "%S", buf);
+ close(fd);
+ }
+ break;
+ default:
+ fprint(2, "unknown osc escape %d\n", osc);
+ break;
+ }
+ }
+}