diff options
author | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2023-03-10 13:55:17 +0100 |
---|---|---|
committer | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2023-03-16 06:08:09 +0000 |
commit | bd52e53dbfa7641098313edd56d885df69916f9f (patch) | |
tree | 161502368e1ebabb785bd9db668d028e65005fcd /src/plugins/terminal/terminalwidget.cpp | |
parent | 3507229a007e3fd5f004a94f4c3857518ab1c9df (diff) | |
download | qt-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.cpp | 37 |
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 ¤tDir) { + 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(); |