From 712c3e5450ef77bde96ee8730efc2c0557ae9d5c Mon Sep 17 00:00:00 2001
From: Bruno Windels <brunow@matrix.org>
Date: Mon, 2 Sep 2019 17:53:14 +0200
Subject: [PATCH 1/2] allow escaping the first slash to not write a command

---
 src/components/views/rooms/SendMessageComposer.js |  3 ++-
 src/editor/serialize.js                           | 13 +++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/components/views/rooms/SendMessageComposer.js b/src/components/views/rooms/SendMessageComposer.js
index 0e03d83467..f1fac1cab0 100644
--- a/src/components/views/rooms/SendMessageComposer.js
+++ b/src/components/views/rooms/SendMessageComposer.js
@@ -18,7 +18,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import dis from '../../../dispatcher';
 import EditorModel from '../../../editor/model';
-import {htmlSerializeIfNeeded, textSerialize, containsEmote, stripEmoteCommand} from '../../../editor/serialize';
+import {htmlSerializeIfNeeded, textSerialize, containsEmote, stripEmoteCommand, unescapeMessage} from '../../../editor/serialize';
 import {CommandPartCreator} from '../../../editor/parts';
 import {MatrixClient} from 'matrix-js-sdk';
 import BasicMessageComposer from "./BasicMessageComposer";
@@ -54,6 +54,7 @@ function createMessageContent(model, permalinkCreator) {
     if (isEmote) {
         model = stripEmoteCommand(model);
     }
+    model = unescapeMessage(model);
     const repliedToEvent = RoomViewStore.getQuotingEvent();
 
     const body = textSerialize(model);
diff --git a/src/editor/serialize.js b/src/editor/serialize.js
index f3371ac8ee..07a1ad908e 100644
--- a/src/editor/serialize.js
+++ b/src/editor/serialize.js
@@ -74,3 +74,16 @@ export function stripEmoteCommand(model) {
     model.removeText({index: 0, offset: 0}, 4);
     return model;
 }
+
+export function unescapeMessage(model) {
+    const {parts} = model;
+    if (parts.length) {
+        const firstPart = parts[0];
+        // only unescape \/ to / at start of editor
+        if (firstPart.type === "plain" && firstPart.text.startsWith("\\/")) {
+            model = model.clone();
+            model.removeText({index: 0, offset: 0}, 1);
+        }
+    }
+    return model;
+}

From 06ae0645c77ae840c154d1e29491b758d428bf3c Mon Sep 17 00:00:00 2001
From: Bruno Windels <brunow@matrix.org>
Date: Mon, 2 Sep 2019 17:56:16 +0200
Subject: [PATCH 2/2] fix lint

---
 src/components/views/rooms/SendMessageComposer.js | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/components/views/rooms/SendMessageComposer.js b/src/components/views/rooms/SendMessageComposer.js
index f1fac1cab0..b0a20a115a 100644
--- a/src/components/views/rooms/SendMessageComposer.js
+++ b/src/components/views/rooms/SendMessageComposer.js
@@ -18,7 +18,13 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import dis from '../../../dispatcher';
 import EditorModel from '../../../editor/model';
-import {htmlSerializeIfNeeded, textSerialize, containsEmote, stripEmoteCommand, unescapeMessage} from '../../../editor/serialize';
+import {
+    htmlSerializeIfNeeded,
+    textSerialize,
+    containsEmote,
+    stripEmoteCommand,
+    unescapeMessage,
+} from '../../../editor/serialize';
 import {CommandPartCreator} from '../../../editor/parts';
 import {MatrixClient} from 'matrix-js-sdk';
 import BasicMessageComposer from "./BasicMessageComposer";