st
simple terminal
git clone https://9o.is/git/st.git
commit ea7ff2257e94a8389b287c7521159049f4702095 parent 0e77d59ee8cf4f185316fd8cbea0abb016cf486f Author: noname <noname@inventati.org> Date: Sat, 26 Apr 2014 00:12:41 +0200 Do not eat ESC character if control string is not properly terminated. Currently tputc handles the case of too long control string waiting for the end of control string. Another case is when there is ESC character is encountered but is not followed by '\\'. In this case st stops processing control string, but ESC character is ignored. After this patch st processes ESC characters in control strings properly. Test case: printf '\e]0;abc\e[1mBOLD\e[0m' Also ^[\ is actually processed in the code that handles ST. According to ECMA-048 ST stands for STRING TERMINATOR and is used to close control strings. Diffstat:
| M | st.c | | | 8 | +++----- |
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/st.c b/st.c @@ -2452,10 +2452,6 @@ tputc(char *c, int len) { csiparse(); csihandle(); } - } else if(term.esc & ESC_STR_END) { - term.esc = 0; - if(ascii == '\\') - strhandle(); } else if(term.esc & ESC_ALTCHARSET) { tdeftran(ascii); tselcs(); @@ -2545,7 +2541,9 @@ tputc(char *c, int len) { tcursor(CURSOR_LOAD); term.esc = 0; break; - case '\\': /* ST -- Stop */ + case '\\': /* ST -- String Terminator */ + if(term.esc & ESC_STR_END) + strhandle(); term.esc = 0; break; default: