> Jean-Marc Lasgouttes schrieb:
>> M-Return is supposed to be do for commands what Return would do for
>> Environments and do for environments what Return would do for
>> commands.
>>
>> However, I see now that it does not do anything interesting for
>> enumerations. I'll have to double check that.

Here is a patch that implements proper functionning of M-Return (at
least as I see it: like Return, but inverting role of environment and
non-environment). I'd be interested to have some feedback on it. This
is potentially for trunk and branch.

This is basically bug 2445
http://bugzilla.lyx.org/show_bug.cgi?id=2445
but not everybody agrees on what the behaviour should be.

JMarc

svndiff src

Index: src/Text.cpp
===================================================================
--- src/Text.cpp	(révision 20240)
+++ src/Text.cpp	(copie de travail)
@@ -356,7 +356,7 @@ double Text::spacing(Buffer const & buff
 }
 
 
-void Text::breakParagraph(Cursor & cur, bool keep_layout)
+void Text::breakParagraph(Cursor & cur, bool inverse_logic)
 {
 	BOOST_ASSERT(this == cur.text());
 
@@ -381,11 +381,9 @@ void Text::breakParagraph(Cursor & cur, 
 		cpar.eraseChar(cur.pos(), cur.buffer().params().trackChanges);
 
 	// What should the layout for the new paragraph be?
-	int preserve_layout = 0;
-	if (keep_layout)
-		preserve_layout = 2;
-	else
-		preserve_layout = layout->isEnvironment();
+	bool keep_layout = inverse_logic ? 
+		!layout->isEnvironment() 
+		: layout->isEnvironment();
 
 	// We need to remember this before we break the paragraph, because
 	// that invalidates the layout variable
@@ -395,7 +393,7 @@ void Text::breakParagraph(Cursor & cur, 
 	bool const isempty = cpar.allowEmpty() && cpar.empty();
 
 	lyx::breakParagraph(cur.buffer().params(), paragraphs(), cpit,
-			 cur.pos(), preserve_layout);
+			 cur.pos(), keep_layout);
 
 	// After this, neither paragraph contains any rows!
 
Index: src/Text3.cpp
===================================================================
--- src/Text3.cpp	(révision 20240)
+++ src/Text3.cpp	(copie de travail)
@@ -574,13 +574,13 @@ void Text::dispatch(Cursor & cur, FuncRe
 
 	case LFUN_BREAK_PARAGRAPH:
 		cap::replaceSelection(cur);
-		breakParagraph(cur, 0);
+		breakParagraph(cur, false);
 		cur.resetAnchor();
 		break;
 
 	case LFUN_BREAK_PARAGRAPH_KEEP_LAYOUT:
 		cap::replaceSelection(cur);
-		breakParagraph(cur, 1);
+		breakParagraph(cur, true);
 		cur.resetAnchor();
 		break;
 
@@ -591,7 +591,7 @@ void Text::dispatch(Cursor & cur, FuncRe
 		if (cur.pos() == 0)
 			cur.paragraph().params().labelWidthString(docstring());
 		else
-			breakParagraph(cur, 0);
+			breakParagraph(cur, false);
 		cur.resetAnchor();
 		break;
 	}
Index: src/paragraph_funcs.h
===================================================================
--- src/paragraph_funcs.h	(révision 20240)
+++ src/paragraph_funcs.h	(copie de travail)
@@ -27,9 +27,9 @@ class ParagraphList;
 /**
  * This breaks a paragraph at the specified position.
  * The new paragraph will:
- * get the default layout, when flag == 0
- * will inherit the existing one, except for depth, when flag == 1
- * will inherit the existing one, including depth, when flag == 2
+ * - Decrease depth by one (or chenge layout to default layout when 
+ *    keep_layout == false  
+ * - keep current depth and layout when keep_layout == true
  * Be aware that the old or new paragraph does not contain any rows
  * after this.
  */
@@ -37,7 +37,7 @@ void breakParagraph(BufferParams const &
 		    ParagraphList & paragraphs,
 		    pit_type par,
 		    pos_type pos,
-		    int flag);
+		    bool keep_layout);
 
 ///
 void breakParagraphConservative(BufferParams const & bparams,
Index: src/paragraph_funcs.cpp
===================================================================
--- src/paragraph_funcs.cpp	(révision 20240)
+++ src/paragraph_funcs.cpp	(copie de travail)
@@ -60,7 +60,8 @@ static bool moveItem(Paragraph & fromPar
 
 
 void breakParagraph(BufferParams const & bparams,
-	ParagraphList & pars, pit_type par_offset, pos_type pos, int flag)
+		    ParagraphList & pars, pit_type par_offset, pos_type pos, 
+		    bool keep_layout)
 {
 	// create a new paragraph, and insert into the list
 	ParagraphList::iterator tmp =
@@ -76,7 +77,7 @@ void breakParagraph(BufferParams const &
 	tmp->setInsetOwner(par.inInset());
 
 	// layout stays the same with latex-environments
-	if (flag) {
+	if (keep_layout) {
 		tmp->layout(par.layout());
 		tmp->setLabelWidthString(par.params().labelWidthString());
 		tmp->params().depth(par.params().depth());
@@ -90,7 +91,7 @@ void breakParagraph(BufferParams const &
 
 	bool const isempty = (par.allowEmpty() && par.empty());
 
-	if (!isempty && (par.size() > pos || par.empty() || flag == 2)) {
+	if (!isempty && (par.size() > pos || par.empty())) {
 		tmp->layout(par.layout());
 		tmp->params().align(par.params().align());
 		tmp->setLabelWidthString(par.params().labelWidthString());
@@ -142,7 +143,7 @@ void breakParagraph(BufferParams const &
 	}
 
 	// layout stays the same with latex-environments
-	if (flag) {
+	if (keep_layout) {
 		par.layout(tmp->layout());
 		par.setLabelWidthString(tmp->params().labelWidthString());
 		par.params().depth(tmp->params().depth());
Index: src/Text.h
===================================================================
--- src/Text.h	(révision 20240)
+++ src/Text.h	(copie de travail)
@@ -75,7 +75,7 @@ public:
 		Font const & font, bool toggleall = false);
 
 	/// what you expect when pressing \<enter\> at cursor position
-	void breakParagraph(Cursor & cur, bool keep_layout = false);
+	void breakParagraph(Cursor & cur, bool inverse_logic = false);
 
 	/// set layout over selection
 	void setLayout(Buffer const & buffer, pit_type start, pit_type end,

Reply via email to