]> git.lyx.org Git - features.git/blobdiff - src/mathed/InsetMathNest.cpp
Revert part of 503c7c16: InsetMathNest:edit resets anchor.
[features.git] / src / mathed / InsetMathNest.cpp
index 7e763b7e8000d40200a721c1e04b747ffce40443..7241e0bc3bd4e065f7e64bf886731938ce5cc8a6 100644 (file)
@@ -780,8 +780,12 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.clearTargetX();
                cur.macroModeClose();
                if (!cur.inset().idxNext(cur)) {
-                       cur.idx() = firstIdx();
-                       cur.pos() = 0;
+                       if (cur.lastidx() == 0)
+                               cur.popForward();
+                       else {
+                               cur.idx() = firstIdx();
+                               cur.pos() = 0;
+                       }
                }
                break;
 
@@ -791,8 +795,12 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.clearTargetX();
                cur.macroModeClose();
                if (!cur.inset().idxPrev(cur)) {
-                       cur.idx() = cur.lastidx();
-                       cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
+                       if (cur.lastidx() == 0)
+                               cur.popBackward();
+                       else {
+                               cur.idx() = cur.lastidx();
+                               cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
+                       }
                }
                break;
 
@@ -1895,10 +1903,16 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        return true;
                }
                if (currentMode() == InsetMath::MATH_MODE && Encodings::isUnicodeTextOnly(c)) {
-                       MathAtom at = createInsetMath("text", buf);
-                       at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
-                       cur.insert(at);
-                       cur.posForward();
+                       MathAtom const atom(new InsetMathChar(c));
+                       if (cur.prevInset() && cur.prevInset()->asInsetMath()->name() == "text") {
+                               // reuse existing \text inset
+                               cur.prevInset()->asInsetMath()->cell(0).push_back(atom);
+                       } else {
+                               MathAtom at = createInsetMath("text", buf);
+                               at.nucleus()->cell(0).push_back(atom);
+                               cur.insert(at);
+                               cur.posForward();
+                       }
                        return true;
                }
        } else {