From 383d2a6e71bb0c3eef827cb686d60c4eca320882 Mon Sep 17 00:00:00 2001 From: Smitty van Bodegom Date: Tue, 3 Aug 2021 11:36:03 -0400 Subject: [PATCH] Match sed behavior for sed editing Before s/a/b/ turns "aaa" into "bbb", while sed would turn it into "baa". This updates the sed editing syntax to match sed behavior. The /g flag is supported for doing global replacements when needed. --- src/actionshandler.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/actionshandler.cpp b/src/actionshandler.cpp index d2173d768..5710b7302 100644 --- a/src/actionshandler.cpp +++ b/src/actionshandler.cpp @@ -68,7 +68,7 @@ void ActionsHandler::postEdit(const QString &text) const auto &evt = **it; if (const auto event = eventCast(&evt)) { if (event->senderId() == localId && event->hasTextContent()) { - static QRegularExpression re("^s/([^/]*)/([^/]*)"); + static QRegularExpression re("^s/([^/]*)/([^/]*)(/g)?"); auto match = re.match(text); if (!match.hasMatch()) { // should not happen but still make sure to send the message normally @@ -77,13 +77,22 @@ void ActionsHandler::postEdit(const QString &text) } const QString regex = match.captured(1); const QString replacement = match.captured(2); + const QString flags = match.captured(3); QString originalString; if (event->content()) { originalString = static_cast(event->content())->body; } else { originalString = event->plainBody(); } - m_room->postHtmlMessage(text, originalString.replace(regex, replacement), event->msgtype(), "", event->id()); + if (flags == "/g") { + m_room->postHtmlMessage(text, originalString.replace(regex, replacement), event->msgtype(), "", event->id()); + } else { + m_room->postHtmlMessage(text, + originalString.replace(originalString.indexOf(regex), regex.size(), replacement), + event->msgtype(), + "", + event->id()); + } return; } }