\{ and \% now correctly use the selection as their argument instead of erasing it. Solves <http://www.lyx.org/trac/ticket/6466>. Please criticise.

Also I noticed that LyX produces invalid LaTeX code if one nests braces and comments, e.g. by typing \{\%\{\% ... but this behaviour is already there before the patch.
>From 8910c096fce9378294feab1ee08e9f5ca3499775 Mon Sep 17 00:00:00 2001
From: gadmm <ga...@free.fr>
Date: Fri, 31 Jul 2015 04:13:05 +0100
Subject: [PATCH] \{ and \% now correctly use the selection as their argument
 instead of erasing it (bug #6466)

---
 src/mathed/InsetMathComment.cpp |  7 +++++++
 src/mathed/InsetMathComment.h   |  2 ++
 src/mathed/InsetMathNest.cpp    | 14 +++++++++-----
 3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/src/mathed/InsetMathComment.cpp b/src/mathed/InsetMathComment.cpp
index 096cf38..ff91991 100644
--- a/src/mathed/InsetMathComment.cpp
+++ b/src/mathed/InsetMathComment.cpp
@@ -26,6 +26,13 @@ InsetMathComment::InsetMathComment(Buffer * buf)
 {}
 
 
+InsetMathComment::InsetMathComment(MathData const & ar)
+	: InsetMathNest(const_cast<Buffer *>(ar.buffer()), 1)
+{
+	cell(0) = ar;
+}
+
+
 InsetMathComment::InsetMathComment(Buffer * buf, docstring const & str)
 	: InsetMathNest(buf, 1)
 {
diff --git a/src/mathed/InsetMathComment.h b/src/mathed/InsetMathComment.h
index fa33c63..8cfe136 100644
--- a/src/mathed/InsetMathComment.h
+++ b/src/mathed/InsetMathComment.h
@@ -25,6 +25,8 @@ public:
 	///
 	InsetMathComment(Buffer * buf);
 	///
+	InsetMathComment(MathData const & ar);
+	///
 	explicit InsetMathComment(Buffer * buf, docstring const &);
 	///
 	void metrics(MetricsInfo & mi, Dimension & dim) const;
diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp
index 133c336..7f0237f 100644
--- a/src/mathed/InsetMathNest.cpp
+++ b/src/mathed/InsetMathNest.cpp
@@ -1657,12 +1657,16 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
 			} else if (c == '^' && currentMode() == InsetMath::MATH_MODE) {
 				cur.backspace();
 				cur.niceInsert(createInsetMath("mathcircumflex", buf));
-			} else if (c == '{') {
-				cur.backspace();
-				cur.niceInsert(MathAtom(new InsetMathBrace(buf)));
-			} else if (c == '%') {
+			} else if (c == '{' || c == '%') {
+				//using the saved selection as argument
+				InsetMathUnknown * p = cur.activeMacro();
+				MathData sel(cur.buffer());
+				asArray(p->selection(), sel);
 				cur.backspace();
-				cur.niceInsert(MathAtom(new InsetMathComment(buf)));
+				if (c == '{')
+					cur.niceInsert(MathAtom(new InsetMathBrace(sel)));
+				else
+					cur.niceInsert(MathAtom(new InsetMathComment(sel)));
 			} else if (c == '#') {
 				LASSERT(cur.activeMacro(), return false);
 				cur.activeMacro()->setName(name + docstring(1, c));
-- 
2.1.4

Reply via email to