diff options
| -rw-r--r-- | src/plugins/diffeditor/unifieddiffeditorwidget.cpp | 16 |
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(); |
