runparams.encoding);
wi.canBreakLine(os.canBreakLine());
write(wi);
+ // Reset parbreak status after a math inset.
+ os.lastChar(0);
os.canBreakLine(wi.canBreakLine());
int lf = wi.line();
case LFUN_MOUSE_DOUBLE:
case LFUN_MOUSE_TRIPLE:
case LFUN_WORD_SELECT:
- case LFUN_INSET_SELECT_ALL:
cur.pos() = 0;
cur.idx() = 0;
cur.resetAnchor();
cur.setSelection(true);
- cur.pos() = cur.lastpos();
cur.idx() = cur.lastidx();
+ cur.pos() = cur.lastpos();
+ cur.bv().cursor() = cur;
break;
case LFUN_PARAGRAPH_UP:
cur.recordUndo();
unsigned int m = 1;
unsigned int n = 1;
- docstring name;
+ docstring name = from_ascii("matrix");
idocstringstream is(cmd.argument());
is >> m >> n >> name;
if (m < 1)
m = 1;
if (n < 1)
n = 1;
+ // check if we have a valid decoration
+ if (name != "pmatrix" && name != "bmatrix"
+ && name != "Bmatrix" && name != "vmatrix"
+ && name != "Vmatrix" && name != "matrix")
+ name = from_ascii("matrix");
+
cur.niceInsert(
MathAtom(new InsetMathAMSArray(buffer_, name, m, n)));
break;
void InsetMathNest::lfunMouseMotion(Cursor & cur, FuncRequest & cmd)
{
// only select with button 1
- if (cmd.button() == mouse_button::button1) {
- Cursor & bvcur = cur.bv().cursor();
- if (bvcur.realAnchor().hasPart(cur)) {
- //lyxerr << "## lfunMouseMotion: cursor: " << cur << endl;
- bvcur.setCursor(cur);
- bvcur.setSelection(true);
- //lyxerr << "MOTION " << bvcur << endl;
- } else
- cur.undispatched();
+ if (cmd.button() != mouse_button::button1)
+ return;
+
+ Cursor & bvcur = cur.bv().cursor();
+
+ // ignore motions deeper nested than the real anchor
+ if (!bvcur.realAnchor().hasPart(cur)) {
+ cur.undispatched();
+ return;
}
+
+ CursorSlice old = bvcur.top();
+
+ // We continue with our existing selection or start a new one, so don't
+ // reset the anchor.
+ bvcur.setCursor(cur);
+ // Did we actually move?
+ if (cur.top() == old)
+ // We didn't move one iota, so no need to change selection status
+ // or update the screen.
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
+ else
+ bvcur.setSelection();
}
new InsetMathBig(name.substr(1), delim)));
return true;
}
+ } else if (name == "\\smash" && c == '[') {
+ // We can't use cur.macroModeClose() because
+ // it would create an InsetMathPhantom
+ InsetMathUnknown * p = cur.activeMacro();
+ p->finalize();
+ interpretChar(cur, c);
+ return true;
}
// leave macro mode and try again if necessary
// 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() != ' ') {
+ if (cur.pos() == 0 || cur.prevAtom()->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
globals.push_back(from_ascii("\\framebox"));
globals.push_back(from_ascii("\\makebox"));
globals.push_back(from_ascii("\\kern"));
+ globals.push_back(from_ascii("\\xhookrightarrow"));
+ globals.push_back(from_ascii("\\xhookleftarrow"));
globals.push_back(from_ascii("\\xrightarrow"));
+ globals.push_back(from_ascii("\\xRightarrow"));
+ globals.push_back(from_ascii("\\xrightharpoondown"));
+ globals.push_back(from_ascii("\\xrightharpoonup"));
+ globals.push_back(from_ascii("\\xrightleftharpoons"));
globals.push_back(from_ascii("\\xleftarrow"));
+ globals.push_back(from_ascii("\\xLeftarrow"));
+ globals.push_back(from_ascii("\\xleftharpoondown"));
+ globals.push_back(from_ascii("\\xleftharpoonup"));
+ globals.push_back(from_ascii("\\xleftrightarrow"));
+ globals.push_back(from_ascii("\\xLeftrightarrow"));
+ globals.push_back(from_ascii("\\xleftrightharpoons"));
+ globals.push_back(from_ascii("\\xmapsto"));
globals.push_back(from_ascii("\\split"));
globals.push_back(from_ascii("\\gathered"));
globals.push_back(from_ascii("\\aligned"));