diff options
author | Marcus Tillmanns <[email protected]> | 2024-01-22 14:27:20 +0100 |
---|---|---|
committer | Marcus Tillmanns <[email protected]> | 2024-01-25 05:43:17 +0000 |
commit | 87999abead1c32a809d909c89a34781ad7483afc (patch) | |
tree | 5f73a1f83507ca96ce9ae0854834a32ddff29348 /src/plugins/terminal/terminalwidget.cpp | |
parent | ee4d2587761d87992d742373dcb15ec4a09c9eea (diff) |
Terminal: Linkify git commits
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 <[email protected]>
Reviewed-by: <[email protected]>
Diffstat (limited to 'src/plugins/terminal/terminalwidget.cpp')
-rw-r--r-- | src/plugins/terminal/terminalwidget.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
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 <coreplugin/fileutils.h> #include <coreplugin/find/textfindconstants.h> #include <coreplugin/icore.h> -#include <coreplugin/locator/locatorconstants.h> +#include <coreplugin/iversioncontrol.h> #include <coreplugin/messagemanager.h> +#include <coreplugin/vcsmanager.h> #include <utils/algorithm.h> #include <utils/async.h> @@ -418,6 +419,13 @@ std::optional<TerminalSolution::TerminalView::Link> 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<Selection> &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")) { |