]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathNest.cpp
We only support gcc >= 4.9.
[lyx.git] / src / mathed / InsetMathNest.cpp
index 406bd93d997bfe8f48ac2ec36330a434fc730aa7..01719e50f7c81d0440847f5e1dc2ef78e10b6ae1 100644 (file)
@@ -539,7 +539,8 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                        size_t n = 0;
                        idocstringstream is(cmd.argument());
                        is >> n;
-                       topaste = cap::selection(n, buffer().params().documentClassPtr());
+                       topaste = cap::selection(n, make_pair(buffer().params().documentClassPtr(),
+                                                             buffer().params().authors()));
                }
                cur.niceInsert(topaste, parseflg, false);
                cur.clearSelection(); // bug 393
@@ -558,11 +559,6 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.forceBufferUpdate();
                break;
 
-       case LFUN_COPY:
-               copySelection(cur);
-               cur.message(_("Copy"));
-               break;
-
        case LFUN_MOUSE_PRESS:
                lfunMousePress(cur, cmd);
                break;
@@ -795,7 +791,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.clearTargetX();
                cur.macroModeClose();
                if (!cur.inset().idxPrev(cur)) {
-                       cur.idx() = lastIdx();
+                       cur.idx() = cur.lastidx();
                        cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
                }
                break;
@@ -903,7 +899,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                if (cmd.argument().empty()) {
                        // do superscript if LyX handles
                        // deadkeys
-                       cur.recordUndoSelection();
+                       cur.recordUndoInset();
                        script(cur, true, grabAndEraseSelection(cur));
                }
                break;
@@ -1300,6 +1296,24 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                return;
        }
 
+       case LFUN_PHANTOM_INSERT: {
+               docstring const & arg = cmd.argument();
+               docstring newarg;
+               if (arg == "Phantom")
+                       newarg = from_ascii("\\phantom");
+               else if (arg == "HPhantom")
+                       newarg = from_ascii("\\hphantom");
+               else if (arg == "VPhantom")
+                       newarg = from_ascii("\\vphantom");
+               if (newarg.empty())
+                       LYXERR0("Unknown phantom type " + newarg);
+               else {
+                       FuncRequest const newfunc(LFUN_MATH_INSERT, newarg);
+                       lyx::dispatch(newfunc);
+               }
+               break;
+       }
+
        default:
                InsetMath::doDispatch(cur, cmd);
                break;
@@ -1806,7 +1820,13 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        // but suppress direct insertion of two spaces in a row
                        // the still allows typing  '<space>a<space>' and deleting the 'a', but
                        // it is better than nothing...
-                       if (cur.pos() == 0 || cur.prevAtom()->getChar() != ' ') {
+                       pos_type const pos = cur.pos();
+                       pos_type const lastpos = cur.lastpos();
+                       if ((pos == 0 && lastpos == 0)
+                           || (pos == 0 && cur.nextAtom()->getChar() != ' ')
+                           || (pos == lastpos && cur.prevAtom()->getChar() != ' ')
+                           || (pos > 0 && cur.prevAtom()->getChar() != ' '
+                                       && cur.nextAtom()->getChar() != ' ')) {
                                cur.insert(c);
                                // FIXME: we have to enable full redraw here because of the
                                // visual box corners that define the inset. If we know for
@@ -1861,10 +1881,12 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                return true;
        } else if (currentMode() != InsetMath::TEXT_MODE) {
                if (c == '_') {
+                       cur.recordUndoInset();
                        script(cur, false, save_selection);
                        return true;
                }
                if (c == '^') {
+                       cur.recordUndoInset();
                        script(cur, true, save_selection);
                        return true;
                }