Kill macro mode when using LFUN_ESCAPE

Add a `cancel' boolean to macroModeClose() that just removes all trace
of what has been entered instead of finalizing it.

When entering a macro in mathed, let LFUN_ESCAPE invoke
macroModeClose(true). The new semantics of LFUN_ESCAPE in mathed is
thus to abort the input of a macro name.

Fixes bug #9251.
This commit is contained in:
Jean-Marc Lasgouttes 2018-02-20 12:09:10 +01:00
parent ed7cdfff26
commit 9296344b9a
3 changed files with 11 additions and 7 deletions

View File

@ -1672,7 +1672,7 @@ void Cursor::setTargetX()
}
bool Cursor::macroModeClose()
bool Cursor::macroModeClose(bool cancel)
{
if (!inMacroMode())
return false;
@ -1685,7 +1685,7 @@ bool Cursor::macroModeClose()
cell().erase(pos());
// do nothing if the macro name is empty
if (s == "\\")
if (s == "\\" || cancel)
return false;
// trigger updates of macros, at least, if no full

View File

@ -501,9 +501,9 @@ public:
///
void plainInsert(MathAtom const & at);
/// interpret name of a macro. Returns true if something got
/// inserted.
bool macroModeClose();
/// interpret name of a macro or ditch it if \c cancel is true.
/// Returns true if something got inserted.
bool macroModeClose(bool cancel = false);
/// are we currently typing the name of a macro?
bool inMacroMode() const;
/// get access to the macro we are currently typing

View File

@ -836,8 +836,12 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
if (cur.selection())
cur.clearSelection();
else {
cmd = FuncRequest(LFUN_FINISHED_FORWARD);
cur.undispatched();
if (cur.inMacroMode())
cur.macroModeClose(true);
else {
cmd = FuncRequest(LFUN_FINISHED_FORWARD);
cur.undispatched();
}
}
break;