From d547d1d177bd0582df95a5d50dc3b37e0636748e Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Wed, 23 May 2018 19:51:00 -0400 Subject: [PATCH] Ignore control characters in the text part of Xpe "ESC]" sequences Summary: Ignore control characters in the text part of Xpe (OSC, Operating System Control) of the form "ESC]Pn;Pt\a" escape sequences; this matches what XTerm docs say. If userTitle is an empty string, set the window title to a blank space when showWindowTitleOnTitleBar is enabled; basically if the user sets the title to an empty string, leave it as-is. BUG: 315581 FIXED-IN: 18.08 Test Plan: - unset PROMPT_COMMAND, in case the shell is configured to set the window title via that variable - Make sure "Show window title on the title bar" is enabled - Execute: $ /usr/bin/echo -e 'j\e]2;\n\aj' - The window title is changed to the tab title text; and the output looks like this: j j - Apply the diff, build, and try again, the window title should be set to an empty string (really a blank space), and the output should look like: jj Reviewers: #konsole, hindenburg Reviewed By: #konsole, hindenburg Subscribers: konsole-devel, #konsole Tags: #konsole Differential Revision: https://phabricator.kde.org/D13078 --- src/MainWindow.cpp | 9 ++++++--- src/Vt102Emulation.cpp | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index dd662422..21395552 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -287,9 +287,12 @@ void MainWindow::updateWindowCaption() // use tab title as caption by default QString caption = title; - // use window title as caption only when enabled and it is not empty - if (KonsoleSettings::showWindowTitleOnTitleBar() && !userTitle.isEmpty()) { - caption = userTitle; + // use window title as caption when this setting is enabled + // if the userTitle is empty, use a blank space (using an empty string + // removes the dash — before the application name; leaving the dash + // looks better) + if (KonsoleSettings::showWindowTitleOnTitleBar()) { + !userTitle.isEmpty() ? caption = userTitle : caption = QStringLiteral(" "); } if (KonsoleSettings::showAppNameOnTitleBar()) { diff --git a/src/Vt102Emulation.cpp b/src/Vt102Emulation.cpp index c8419554..8207ec7a 100644 --- a/src/Vt102Emulation.cpp +++ b/src/Vt102Emulation.cpp @@ -360,6 +360,12 @@ void Vt102Emulation::receiveChar(uint cc) if (ces(CTL)) { + // ignore control characters in the text part of Xpe (aka OSC) "ESC]" + // escape sequences; this matches what XTERM docs say + if (Xpe) { + return; + } + // DEC HACK ALERT! Control Characters are allowed *within* esc sequences in VT100 // This means, they do neither a resetTokenizer() nor a pushToToken(). Some of them, do // of course. Guess this originates from a weakly layered handling of the X-on