void InsetMathNest::setBuffer(Buffer & buffer)
{
InsetMath::setBuffer(buffer);
- for (idx_type i = 0, n = nargs(); i != n; ++i) {
- MathData & data = cell(i);
- for (size_t j = 0; j != data.size(); ++j)
- data[j].nucleus()->setBuffer(buffer);
- }
+ for (MathData & data : cells_)
+ data.setBuffer(buffer);
}
if (cur.idx() == 0)
return false;
--cur.idx();
- cur.pos() = cur.lastpos();
+ cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
return true;
}
case LFUN_CUT:
cur.recordUndo();
- cutSelection(cur, true, true);
+ cutSelection(cur, true);
cur.message(_("Cut"));
// Prevent stale position >= size crash
// Probably not necessary anymore, see eraseSelection (gb 2005-10-09)
case LFUN_CELL_FORWARD:
cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
- cur.inset().idxNext(cur);
+ cur.selHandle(false);
+ cur.clearTargetX();
+ cur.macroModeClose();
+ if (!cur.inset().idxNext(cur)) {
+ cur.idx() = firstIdx();
+ cur.pos() = 0;
+ }
break;
case LFUN_CELL_BACKWARD:
cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
- cur.inset().idxPrev(cur);
+ cur.selHandle(false);
+ cur.clearTargetX();
+ cur.macroModeClose();
+ if (!cur.inset().idxPrev(cur)) {
+ cur.idx() = lastIdx();
+ cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
+ }
break;
case LFUN_WORD_DELETE_BACKWARD:
// via macro mode, we want to put the cursor inside it
// if relevant. Think typing "\frac<space>".
if (c == ' '
- && cur.inMacroMode() && cur.macroName() != "\\"
- && cur.macroModeClose() && cur.pos() > 0) {
- MathAtom const atom = cur.prevAtom();
- if (atom->asNestInset() && atom->isActive()) {
- cur.posBackward();
- cur.pushBackward(*cur.nextInset());
- }
- } else if (!interpretChar(cur, c)) {
+ && cur.inMacroMode() && cur.macroName() != "\\"
+ && cur.macroModeClose() && cur.pos() > 0)
+ cur.editInsertedInset();
+ else if (!interpretChar(cur, c)) {
cmd = FuncRequest(LFUN_FINISHED_FORWARD);
cur.undispatched();
// FIXME: can we avoid skipping the end of the string?