]> cloud.milkyroute.net Git - dolphin.git/commitdiff
terminal: Clear line using escapes instead of SIGINT
authorJohn Brooks <john@fastquake.com>
Sat, 3 Sep 2022 22:22:15 +0000 (18:22 -0400)
committerMéven Car <meven.car@kdemail.net>
Sun, 2 Oct 2022 07:14:23 +0000 (07:14 +0000)
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 <john@fastquake.com>
src/panels/terminal/terminalpanel.cpp

index 86d3fd55573f2ee284458c63061ae9c5a9b1d1b0..22f840f5c930c7cd58cf31b9984bb5ee62baec36 100644 (file)
@@ -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