commit 378c7e8edb4c1bfbcc1f0a0fffb9528969e1c05e
Author: Juergen Spitzmueller <[email protected]>
Date:   Sun Jun 2 09:26:32 2019 +0200

    Allow for auto-inserting multiple arguments
---
 src/Text3.cpp |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/src/Text3.cpp b/src/Text3.cpp
index f8ef5ff..30cc08d 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) {

Reply via email to