From 87999abead1c32a809d909c89a34781ad7483afc Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 22 Jan 2024 14:27:20 +0100 Subject: [PATCH] Terminal: Linkify git commits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows the user to Ctrl(Cmd)+Click "version like" text (e.g. text that only contains 0-9 and a-f) and starts a "vcsDescribe" if a version control can be found for the current directory. Fixes: QTCREATORBUG-29213 Change-Id: I462092b58bf595a6968f4765f83a207506f0cf87 Reviewed-by: André Hartmann Reviewed-by: --- src/plugins/terminal/terminalwidget.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index e1990cdcfb2..1e9b24ff014 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -14,8 +14,9 @@ #include #include #include -#include +#include #include +#include #include #include @@ -418,6 +419,13 @@ std::optional TerminalWidget::toLink(const return Link{link.targetFilePath.toString(), link.targetLine, link.targetColumn}; } } + if (!m_cwd.isEmpty() && Utils::allOf(text, [](QChar c) { + c = c.toLower(); + return c.isDigit() || (c >= 'a' && c <= 'f'); + })) { + Link link{QString("vcs:///%1").arg(text)}; + return link; + } } return std::nullopt; @@ -489,6 +497,18 @@ void TerminalWidget::selectionChanged(const std::optional &newSelecti void TerminalWidget::linkActivated(const Link &link) { + if (link.text.startsWith("vcs:///")) { + QString reference = link.text.mid(7); + IVersionControl *vcs = VcsManager::findVersionControlForDirectory(m_cwd); + + if (vcs) { + vcs->vcsDescribe(m_cwd, reference); + return; + } + + return; + } + FilePath filePath = FilePath::fromUserInput(link.text); if (filePath.scheme().toString().startsWith("http")) {