From d387802a3e1d1ed0e1feb7faacb6fdb2ec31f511 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 2 Mar 2023 16:59:03 +0100 Subject: [PATCH] Terminal: use shell name as terminal tab name This way cmd, bash, powershell are more descriptive than "Terminal" Change-Id: I19310f423cd4188ecc48580a30ed414833a15aee Reviewed-by: Marcus Tillmanns --- src/plugins/terminal/terminalpane.cpp | 29 ++++++++++++++++++++++--- src/plugins/terminal/terminalpane.h | 1 + src/plugins/terminal/terminalwidget.cpp | 9 ++++++++ src/plugins/terminal/terminalwidget.h | 4 ++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/plugins/terminal/terminalpane.cpp b/src/plugins/terminal/terminalpane.cpp index 260924a1b17..9eedfb3cce5 100644 --- a/src/plugins/terminal/terminalpane.cpp +++ b/src/plugins/terminal/terminalpane.cpp @@ -74,8 +74,9 @@ TerminalPane::TerminalPane(QObject *parent) void TerminalPane::openTerminal(const Utils::Terminal::OpenTerminalParameters ¶meters) { showPage(0); - m_tabWidget->setCurrentIndex( - m_tabWidget->addTab(new TerminalWidget(m_tabWidget, parameters), Tr::tr("Terminal"))); + auto terminalWidget = new TerminalWidget(m_tabWidget, parameters); + m_tabWidget->setCurrentIndex(m_tabWidget->addTab(terminalWidget, Tr::tr("Terminal"))); + setupTerminalWidget(terminalWidget); m_tabWidget->currentWidget()->setFocus(); @@ -87,6 +88,7 @@ void TerminalPane::addTerminal(TerminalWidget *terminal, const QString &title) { showPage(0); m_tabWidget->setCurrentIndex(m_tabWidget->addTab(terminal, title)); + setupTerminalWidget(terminal); m_closeTerminal.setEnabled(m_tabWidget->count() > 1); emit navigateStateUpdate(); @@ -106,7 +108,10 @@ QWidget *TerminalPane::outputWidget(QWidget *parent) removeTab(index); }); - m_tabWidget->addTab(new TerminalWidget(parent), Tr::tr("Terminal")); + auto terminalWidget = new TerminalWidget(parent); + m_tabWidget->addTab(terminalWidget, Tr::tr("Terminal")); + setupTerminalWidget(terminalWidget); + } return m_tabWidget; @@ -127,6 +132,24 @@ void TerminalPane::removeTab(int index) emit navigateStateUpdate(); } +void TerminalPane::setupTerminalWidget(TerminalWidget *terminal) +{ + if (!terminal) + return; + + auto setTabText = [this](TerminalWidget * terminal) { + auto index = m_tabWidget->indexOf(terminal); + m_tabWidget->setTabText(index, terminal->shellName()); + }; + + connect(terminal, &TerminalWidget::started, [setTabText, terminal](qint64 /*pid*/) { + setTabText(terminal); + }); + + if (!terminal->shellName().isEmpty()) + setTabText(terminal); +} + QList TerminalPane::toolBarWidgets() const { return {m_newTerminalButton, m_closeTerminalButton}; diff --git a/src/plugins/terminal/terminalpane.h b/src/plugins/terminal/terminalpane.h index 3dea1c84142..838fb3376ad 100644 --- a/src/plugins/terminal/terminalpane.h +++ b/src/plugins/terminal/terminalpane.h @@ -43,6 +43,7 @@ private: TerminalWidget *currentTerminal() const; void removeTab(int index); + void setupTerminalWidget(TerminalWidget *terminal); private: QTabWidget *m_tabWidget{nullptr}; diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index e88b78d2f11..a0096332981 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -162,6 +162,10 @@ void TerminalWidget::setupPty() }); connect(m_process.get(), &QtcProcess::started, this, [this] { + m_shellName = m_process->commandLine().executable().fileName(); + if (HostOsInfo::isWindowsHost() && m_shellName.endsWith(QTC_WIN_EXE_SUFFIX)) + m_shellName.chop(QStringLiteral(QTC_WIN_EXE_SUFFIX).size()); + applySizeChange(); emit started(m_process->processId()); }); @@ -463,6 +467,11 @@ void TerminalWidget::setSelection(const std::optional &selection) m_selection = selection; } +QString TerminalWidget::shellName() const +{ + return m_shellName; +} + const VTermScreenCell *TerminalWidget::fetchCell(int x, int y) const { QTC_ASSERT(y >= 0, return nullptr); diff --git a/src/plugins/terminal/terminalwidget.h b/src/plugins/terminal/terminalwidget.h index 04fdc7cefc3..14c8be119f2 100644 --- a/src/plugins/terminal/terminalwidget.h +++ b/src/plugins/terminal/terminalwidget.h @@ -52,6 +52,8 @@ public: QPoint end; }; + QString shellName() const; + signals: void started(qint64 pid); @@ -119,6 +121,8 @@ protected: private: std::unique_ptr m_process; + QString m_shellName; + std::unique_ptr m_vterm; VTermScreen *m_vtermScreen; QSize m_vtermSize;