aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2025-12-13 07:35:42 +0100
committerAndré Hartmann <aha_1980@gmx.de>2025-12-17 08:18:17 +0000
commit487a955bc8650f3d397b1ba7560e9bbfa5a04ce3 (patch)
tree85584f55f74f357d0a6bef13b1d1afccc9049bca /src
parent8824c6f6e28f08dd36a8b80a40a0821fd19d2b3a (diff)
DiffEditor: Add copy lines without patch markersHEADmaster
... to unified diff editor. The same is not needed for the side-by-side editor, as this editor does not show headers nor plus or minus signs at the line start. Fixes: QTCREATORBUG-23694 Change-Id: I5df2fe04a36c78cbf7f11e61686a0c9b6b5eece9 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/diffeditor/unifieddiffeditorwidget.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
index 8d536de65aa..f9eae6a8a1c 100644
--- a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
+++ b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
@@ -15,8 +15,10 @@
#include <texteditor/texteditorsettings.h>
#include <utils/async.h>
+#include <utils/icon.h>
#include <utils/mathutils.h>
#include <utils/qtcassert.h>
+#include <utils/stringutils.h>
#include <QMenu>
#include <QScrollBar>
@@ -141,6 +143,20 @@ void UnifiedDiffEditorWidget::contextMenuEvent(QContextMenuEvent *e)
const int startBlockNumber = start.blockNumber();
const int endBlockNumber = end.blockNumber();
+ if (tc.hasSelection()) {
+ menu->addSeparator();
+ QAction *action = menu->addAction(Tr::tr("Copy Cleaned Text"), this, [tc] {
+ const QRegularExpression endingsRe(R"([\r\x{2028}\x{2029}])");
+ const QRegularExpression headerRe(R"(^(?:@@ |\+\+\+ |--- ).*\n)",
+ QRegularExpression::MultilineOption);
+ const QRegularExpression patchRe(R"(^[\+\- ])", QRegularExpression::MultilineOption);
+ const QString text = tc.selectedText()
+ .replace(endingsRe, "\n").remove(headerRe).remove(patchRe);
+ Utils::setClipboardAndSelection(text);
+ });
+ action->setIcon(Icon::fromTheme("edit-copy"));
+ }
+
QTextCursor cursor = cursorForPosition(e->pos());
const int blockNumber = cursor.blockNumber();