From 378c7e8edb4c1bfbcc1f0a0fffb9528969e1c05e Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sun, 2 Jun 2019 09:26:32 +0200 Subject: [PATCH] Allow for auto-inserting multiple arguments --- src/Text3.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Text3.cpp b/src/Text3.cpp index f8ef5ff49c..30cc08d085 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -1595,11 +1595,20 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } DocumentClass const & tclass = bv->buffer().params().documentClass(); + bool inautoarg = false; for (auto const & la_pair : tclass[layout].args()) { Layout::latexarg const & arg = la_pair.second; if (arg.autoinsert) { + // If we had already inserted an arg automatically, + // leave this now in order to insert the next one. + if (inautoarg) { + cur.leaveInset(cur.inset()); + cur.posForward(); + inautoarg = false; + } FuncRequest const cmd2(LFUN_ARGUMENT_INSERT, la_pair.first); lyx::dispatch(cmd2); + inautoarg = true; } } @@ -2063,7 +2072,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) bool const sel = cur.selection(); doInsertInset(cur, this, cmd, true, true); // Insert auto-insert arguments - bool autoargs = false; + bool autoargs, inautoarg = false; Layout::LaTeXArgMap args = cur.inset().getLayout().args(); Layout::LaTeXArgMap::const_iterator lait = args.begin(); Layout::LaTeXArgMap::const_iterator const laend = args.end(); @@ -2072,9 +2081,17 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) if (arg.autoinsert) { // The cursor might have been invalidated by the replaceSelection. cur.buffer()->changed(true); + // If we had already inserted an arg automatically, + // leave this now in order to insert the next one. + if (inautoarg) { + cur.leaveInset(cur.inset()); + cur.posForward(); + inautoarg = false; + } FuncRequest cmd2(LFUN_ARGUMENT_INSERT, (*lait).first); lyx::dispatch(cmd2); autoargs = true; + inautoarg = true; } } if (!autoargs) {