if (cur.idx() == 0)
return false;
--cur.idx();
- cur.pos() = cur.lastpos();
+ cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
return true;
}
Changer dummy = wi.changeRowEntry(TexRow::textEntry(runparams.lastid,
runparams.lastpos));
write(wi);
- // Reset parbreak status after a math inset.
+ // Reset parbreak and command termination status after a math inset.
os.lastChar(0);
os.canBreakLine(wi.canBreakLine());
+ os.terminateCommand(false);
}
|| act == LFUN_PARAGRAPH_UP_SELECT;
cur.selHandle(select);
- // handle autocorrect:
- if (lyxrc.autocorrection_math && cur.autocorrect()) {
- cur.autocorrect() = false;
- cur.message(_("Autocorrect Off ('!' to enter)"));
- }
-
// go up/down
bool up = act == LFUN_UP || act == LFUN_UP_SELECT
|| act == LFUN_PARAGRAPH_UP || act == LFUN_PARAGRAPH_UP_SELECT;
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?
// check if we have a valid decoration
if (name != "pmatrix" && name != "bmatrix"
&& name != "Bmatrix" && name != "vmatrix"
- && name != "Vmatrix" && name != "matrix")
+ && name != "Vmatrix" && name != "matrix"
+ && name != "smallmatrix")
name = from_ascii("matrix");
cur.niceInsert(
bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
{
+ // try auto-correction
+ if (lyxrc.autocorrection_math && cur.pos() != 0
+ && math_autocorrect(cur, c))
+ return true;
+
//lyxerr << "interpret 2: '" << c << "'" << endl;
docstring save_selection;
if (c == '^' || c == '_')
}
- // leave autocorrect mode if necessary
- if (lyxrc.autocorrection_math && c == ' ' && cur.autocorrect()) {
- cur.autocorrect() = false;
- cur.message(_("Autocorrect Off ('!' to enter)"));
- return true;
- }
- if (lyxrc.autocorrection_math && c == '!' && !cur.autocorrect()) {
- cur.autocorrect() = true;
- cur.message(_("Autocorrect On (<space> to exit)"));
- return true;
- }
-
// just clear selection on pressing the space bar
if (cur.selection() && c == ' ') {
cur.selection(false);
if (currentMode() == InsetMath::MATH_MODE && Encodings::isUnicodeTextOnly(c)) {
MathAtom at = createInsetMath("text", buf);
at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
- cur.niceInsert(at);
+ cur.insert(at);
cur.posForward();
return true;
}
return true;
}
-
- // try auto-correction
- if (lyxrc.autocorrection_math && cur.autocorrect() && cur.pos() != 0
- && math_autocorrect(cur.prevAtom(), c))
- return true;
-
// no special circumstances, so insert the character without any fuss
cur.insert(c);
- if (lyxrc.autocorrection_math) {
- if (!cur.autocorrect())
- cur.message(_("Autocorrect Off ('!' to enter)"));
- else
- cur.message(_("Autocorrect On (<space> to exit)"));
- }
return true;
}