tFix techo handling of control and multibyte characters. - st - [fork] customiz… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f9dc374ea01c2921ec3bd1214f292a7036d069ae | |
parent fa19f241a34deddf6e089ab462cbd9cb02f61b3d | |
Author: noname <[email protected]> | |
Date: Wed, 23 Apr 2014 00:26:07 +0400 | |
Fix techo handling of control and multibyte characters. | |
ttecho compares signed char to '\x20'. Any character with code less then | |
'\x20' is treated as control character. This way characters with MSB | |
set to 1 are considered control characters too. | |
Also this patch makes techo display DEL character as ^?. | |
To reprocuce the bug, enable echo mode using printf '\e[12l', | |
tthen type DEL character or any non-ASCII character. | |
Diffstat: | |
M st.c | 4 ++-- | |
1 file changed, 2 insertions(+), 2 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -2308,9 +2308,9 @@ techo(char *buf, int len) { | |
for(; len > 0; buf++, len--) { | |
char c = *buf; | |
- if(c < '\x20') { /* control code */ | |
+ if(c < 0x20 || c == 0177) { /* control code */ | |
if(c != '\n' && c != '\r' && c != '\t') { | |
- c |= '\x40'; | |
+ c ^= '\x40'; | |
tputc("^", 1); | |
} | |
tputc(&c, 1); |