summaryrefslogtreecommitdiff
path: root/src/plugins/terminal/terminalwidget.cpp
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2023-03-10 13:55:17 +0100
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2023-03-16 06:08:09 +0000
commitbd52e53dbfa7641098313edd56d885df69916f9f (patch)
tree161502368e1ebabb785bd9db668d028e65005fcd /src/plugins/terminal/terminalwidget.cpp
parent3507229a007e3fd5f004a94f4c3857518ab1c9df (diff)
downloadqt-creator-bd52e53dbfa7641098313edd56d885df69916f9f.tar.gz
Terminal: Add shell integration
Change-Id: Ic1e226b56f0103e5a6e7764073ab7ab241b67baa Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Diffstat (limited to 'src/plugins/terminal/terminalwidget.cpp')
-rw-r--r--src/plugins/terminal/terminalwidget.cpp37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp
index 23da5088ce..b168320dce 100644
--- a/src/plugins/terminal/terminalwidget.cpp
+++ b/src/plugins/terminal/terminalwidget.cpp
@@ -12,6 +12,7 @@
#include <utils/algorithm.h>
#include <utils/environment.h>
+#include <utils/fileutils.h>
#include <utils/hostosinfo.h>
#include <utils/processinterface.h>
#include <utils/stringutils.h>
@@ -132,6 +133,10 @@ void TerminalWidget::setupPty()
m_process->setWorkingDirectory(*m_openParameters.workingDirectory);
m_process->setEnvironment(env);
+ if (m_surface->shellIntegration()) {
+ m_surface->shellIntegration()->prepareProcess(*m_process.get());
+ }
+
connect(m_process.get(), &QtcProcess::readyReadStandardOutput, this, [this]() {
onReadyRead(false);
});
@@ -242,7 +247,8 @@ void TerminalWidget::setupActions()
connect(&m_zoomInAction, &QAction::triggered, this, &TerminalWidget::zoomIn);
connect(&m_zoomOutAction, &QAction::triggered, this, &TerminalWidget::zoomOut);
- addActions({&m_copyAction, &m_pasteAction, &m_clearSelectionAction, &m_zoomInAction, &m_zoomOutAction});
+ addActions(
+ {&m_copyAction, &m_pasteAction, &m_clearSelectionAction, &m_zoomInAction, &m_zoomOutAction});
}
void TerminalWidget::writeToPty(const QByteArray &data)
@@ -253,7 +259,8 @@ void TerminalWidget::writeToPty(const QByteArray &data)
void TerminalWidget::setupSurface()
{
- m_surface = std::make_unique<Internal::TerminalSurface>(QSize{80, 60});
+ m_shellIntegration.reset(new ShellIntegration());
+ m_surface = std::make_unique<Internal::TerminalSurface>(QSize{80, 60}, m_shellIntegration.get());
connect(m_surface.get(),
&Internal::TerminalSurface::writeToPty,
@@ -299,6 +306,22 @@ void TerminalWidget::setupSurface()
connect(m_surface.get(), &Internal::TerminalSurface::unscroll, this, [this] {
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
});
+ if (m_shellIntegration) {
+ connect(m_shellIntegration.get(),
+ &ShellIntegration::commandChanged,
+ this,
+ [this](const CommandLine &command) {
+ m_currentCommand = command;
+ emit commandChanged(m_currentCommand);
+ });
+ connect(m_shellIntegration.get(),
+ &ShellIntegration::currentDirChanged,
+ this,
+ [this](const QString &currentDir) {
+ m_cwd = FilePath::fromUserInput(currentDir);
+ emit cwdChanged(m_cwd);
+ });
+ }
}
void TerminalWidget::configBlinkTimer()
@@ -470,6 +493,16 @@ QString TerminalWidget::shellName() const
return m_shellName;
}
+FilePath TerminalWidget::cwd() const
+{
+ return m_cwd;
+}
+
+CommandLine TerminalWidget::currentCommand() const
+{
+ return m_currentCommand;
+}
+
QPoint TerminalWidget::viewportToGlobal(QPoint p) const
{
int y = p.y() - topMargin();