aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/terminal/terminalwidget.cpp
diff options
context:
space:
mode:
authorMarcus Tillmanns <[email protected]>2024-01-22 14:27:20 +0100
committerMarcus Tillmanns <[email protected]>2024-01-25 05:43:17 +0000
commit87999abead1c32a809d909c89a34781ad7483afc (patch)
tree5f73a1f83507ca96ce9ae0854834a32ddff29348 /src/plugins/terminal/terminalwidget.cpp
parentee4d2587761d87992d742373dcb15ec4a09c9eea (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.cpp22
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")) {