|
@ -53,12 +53,12 @@ |
|
|
#define XEMBED_FOCUS_OUT 5 |
|
|
#define XEMBED_FOCUS_OUT 5 |
|
|
|
|
|
|
|
|
/* Arbitrary sizes */ |
|
|
/* Arbitrary sizes */ |
|
|
#define ESC_BUF_SIZ 256 |
|
|
|
|
|
|
|
|
#define UTF_SIZ 4 |
|
|
|
|
|
#define ESC_BUF_SIZ (128*UTF_SIZ) |
|
|
#define ESC_ARG_SIZ 16 |
|
|
#define ESC_ARG_SIZ 16 |
|
|
#define STR_BUF_SIZ 256 |
|
|
|
|
|
#define STR_ARG_SIZ 16 |
|
|
|
|
|
|
|
|
#define STR_BUF_SIZ ESC_BUF_SIZ |
|
|
|
|
|
#define STR_ARG_SIZ ESC_ARG_SIZ |
|
|
#define DRAW_BUF_SIZ 20*1024 |
|
|
#define DRAW_BUF_SIZ 20*1024 |
|
|
#define UTF_SIZ 4 |
|
|
|
|
|
#define XK_ANY_MOD UINT_MAX |
|
|
#define XK_ANY_MOD UINT_MAX |
|
|
#define XK_NO_MOD 0 |
|
|
#define XK_NO_MOD 0 |
|
|
|
|
|
|
|
@ -168,7 +168,7 @@ typedef struct { |
|
|
int len; /* raw string length */ |
|
|
int len; /* raw string length */ |
|
|
char priv; |
|
|
char priv; |
|
|
int arg[ESC_ARG_SIZ]; |
|
|
int arg[ESC_ARG_SIZ]; |
|
|
int narg; /* nb of args */ |
|
|
|
|
|
|
|
|
int narg; /* nb of args */ |
|
|
char mode; |
|
|
char mode; |
|
|
} CSIEscape; |
|
|
} CSIEscape; |
|
|
|
|
|
|
|
@ -1911,12 +1911,13 @@ tputc(char *c, int len) { |
|
|
|
|
|
|
|
|
if(iofd != -1) { |
|
|
if(iofd != -1) { |
|
|
if (xwrite(iofd, c, len) < 0) { |
|
|
if (xwrite(iofd, c, len) < 0) { |
|
|
fprintf(stderr, "Error writting in %s:%s\n", |
|
|
|
|
|
|
|
|
fprintf(stderr, "Error writing in %s:%s\n", |
|
|
opt_io, strerror(errno)); |
|
|
opt_io, strerror(errno)); |
|
|
close(iofd); |
|
|
close(iofd); |
|
|
iofd = -1; |
|
|
iofd = -1; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* |
|
|
/* |
|
|
* STR sequences must be checked before anything else |
|
|
* STR sequences must be checked before anything else |
|
|
* because it can use some control codes as part of the sequence. |
|
|
* because it can use some control codes as part of the sequence. |
|
@ -1931,10 +1932,23 @@ tputc(char *c, int len) { |
|
|
strhandle(); |
|
|
strhandle(); |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: |
|
|
strescseq.buf[strescseq.len++] = ascii; |
|
|
|
|
|
if(strescseq.len+1 >= STR_BUF_SIZ) { |
|
|
|
|
|
term.esc = 0; |
|
|
|
|
|
strhandle(); |
|
|
|
|
|
|
|
|
if(strescseq.len + len < sizeof(strescseq.buf)) { |
|
|
|
|
|
memmove(&strescseq.buf[strescseq.len], c, len); |
|
|
|
|
|
strescseq.len += len; |
|
|
|
|
|
} else { |
|
|
|
|
|
/* |
|
|
|
|
|
* Here is a bug in terminals. If the user never sends |
|
|
|
|
|
* some code to stop the str or esc command, then st |
|
|
|
|
|
* will stop responding. But this is better than |
|
|
|
|
|
* silently failing with unknown characters. At least |
|
|
|
|
|
* then users will report back. |
|
|
|
|
|
* |
|
|
|
|
|
* In the case users ever get fixed, here is the code: |
|
|
|
|
|
*/ |
|
|
|
|
|
/* |
|
|
|
|
|
* term.esc = 0; |
|
|
|
|
|
* strhandle(); |
|
|
|
|
|
*/ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return; |
|
|
return; |
|
|