Commit 3656da18 authored by John Brooks's avatar John Brooks 💬 Committed by Méven Car
Browse files

terminal: Clear line using escapes instead of SIGINT

Sending SIGINT can be destructive, for example if we interrupt the
loading of the shell init files (e.g. .bashrc) and clobber history
preservation settings. Follow the example of Kate and send a Ctrl-E
Ctrl-U to clear the prompt instead.

BUG: 279614


Signed-off-by: John Brooks's avatarJohn Brooks <john@fastquake.com>
parent 2f171f57
Pipeline #239912 passed with stage
in 3 minutes and 52 seconds
......@@ -239,18 +239,10 @@ void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHist
return;
}
#ifndef Q_OS_WIN
if (!m_clearTerminal) {
// The TerminalV2 interface does not provide a way to delete the
// current line before sending a new input. This is mandatory,
// otherwise sending a 'cd x' to a existing 'rm -rf *' might
// result in data loss. As workaround SIGINT is sent.
const int processId = m_terminal->terminalProcessId();
if (processId > 0) {
kill(processId, SIGINT);
}
}
#endif
// Send prior Ctrl-E, Ctrl-U to ensure the line is empty. This is
// mandatory, otherwise sending a 'cd x\n' to a prompt with 'rm -rf *'
// would result in data loss.
m_terminal->sendInput(QStringLiteral("\x05\x15"));
// We want to ignore the currentDirectoryChanged(QString) signal, which we will receive after
// the directory change, because this directory change is not caused by a "cd" command that the
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment