From fdfbd66456b9ac3550fa59bacd597a8b5b4804ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 27 Apr 2006 19:46:45 +0000 Subject: [PATCH] should fix bug #501, Terminal title can be set with special characters git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17250 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/terminal/TermParse.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/apps/terminal/TermParse.cpp b/src/apps/terminal/TermParse.cpp index c66cf06f4d..c80e6b0fe0 100644 --- a/src/apps/terminal/TermParse.cpp +++ b/src/apps/terminal/TermParse.cpp @@ -6,6 +6,7 @@ */ +#include #include #include #include @@ -776,10 +777,38 @@ TermParse::EscParse(void *data) break; case CASE_OSC: + { /* Operating System Command: ESC ] */ - // do_osc(finput); + char string[512]; + uint32 len = 0; + char mode_char = theObj->GetReaderBuf(); + if (mode_char != '0' + && mode_char != '1' + && mode_char != '2') { + parsestate = groundtable; + break; + } + char current_char = theObj->GetReaderBuf(); + while ((current_char = theObj->GetReaderBuf()) != 0x7) { + if (!isprint(current_char & 0x7f) + || len+2 >= sizeof(string)) + break; + string[len++] = current_char; + } + if (current_char == 0x7) { + string[len] = '\0'; + switch (mode_char) { + case '0': + case '2': + theObj->fWinObj->SetTitle(string); + break; + case '1': + break; + } + } parsestate = groundtable; break; + } case CASE_RIS: // ESC c ... Reset terminal. break;