View Issue Details

IDProjectCategoryView StatusLast Update
0001879Far ManagerPlugins API.Editorpublic2015-12-07 13:34
ReporterMaximus Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0001879: Фар игнорирует заданное плагином отсутствие EOL
DescriptionПлагин сказал "EOL не нужен". Зачем фар пишет дефолтный после каждой строки?
TagsNo tags attached.
Build2660

Relationships

related to 0002183 closedshmuel Не возможно макросом вставить конц строки. 
related to 0003129 closedshmuel Несколько строк склеивается в одну 

Activities

Maximus

2011-09-14 14:35

reporter  

Eol.diff (506 bytes)   
Index: fileedit.cpp
===================================================================
--- fileedit.cpp	(revision 6691)
+++ fileedit.cpp	(working copy)
@@ -1960,7 +1960,8 @@
 
 			CurPtr->GetBinaryString(&SaveStr,&EndSeq,Length);
 
-			if (!*EndSeq && CurPtr->m_next)
+			// ���� ������ ������ - EOL �� �����, ���� ��� ��� ����?
+			if (!*EndSeq && CurPtr->m_next && (*CurPtr->GetEOL()))
 				EndSeq=*m_editor->GlobalEOL ? m_editor->GlobalEOL:DOS_EOL_fmt;
 
 			if (TextFormat && *EndSeq)
Eol.diff (506 bytes)   

Maximus

2011-09-26 06:43

reporter  

EOL.110925.diff (3,307 bytes)   
Index: editor.cpp
===================================================================
--- editor.cpp	(revision 6730)
+++ editor.cpp	(working copy)
@@ -1664,6 +1664,7 @@
 							CurLine->GetSelection(SelStart,SelEnd);
 							CurLine->m_next->GetSelection(NextSelStart,NextSelEnd);
 							const wchar_t *Str;
+							const wchar_t *NextEOL = CurLine->m_next->GetEOL();
 							int NextLength;
 							CurLine->m_next->GetBinaryString(&Str,nullptr,NextLength);
 							CurLine->InsertBinaryString(Str,NextLength);
@@ -1671,9 +1672,9 @@
 							CurLine->SetCurPos(CurPos);
 							DeleteString(CurLine->m_next,NumLine+1,TRUE,NumLine+1);
 
-							if (!NextLength)
-								CurLine->SetEOL(L"");
+							CurLine->SetEOL(NextEOL);
 
+
 							if (NextSelStart!=-1)
 							{
 								if (SelStart==-1)
@@ -3273,8 +3274,6 @@
 	   ���� �� �� ��������� ��� ���� ������, �� ������ ��� ���� ������
 	   � ��� ����� DOS_EOL_fmt � ��������� ��� ����.
 	*/
-	if (!*EndSeq)
-		CurLine->SetEOL(*GlobalEOL?GlobalEOL:DOS_EOL_fmt);
 
 	CurPos=CurLine->GetCurPos();
 	CurLine->GetSelection(SelStart,SelEnd);
@@ -3355,7 +3354,7 @@
 		AddUndoData(UNDO_BEGIN);
 		AddUndoData(UNDO_EDIT,CurLine->GetStringAddr(),CurLine->GetEOL(),NumLine,
 		            CurLine->GetCurPos(),CurLine->GetLength());
-		AddUndoData(UNDO_INSSTR,nullptr,EndList==CurLine?L"":GlobalEOL,NumLine+1,0); // EOL? - CurLine->GetEOL()  GlobalEOL   ""
+		AddUndoData(UNDO_INSSTR,nullptr,CurLine->GetEOL(),NumLine+1,0); // EOL? - CurLine->GetEOL()  GlobalEOL   ""
 		AddUndoData(UNDO_END);
 		wchar_t *NewCurLineStr = (wchar_t *) xf_malloc((CurPos+1)*sizeof(wchar_t));
 
@@ -3373,15 +3372,24 @@
 		}
 
 		CurLine->SetBinaryString(NewCurLineStr,StrSize);
-		CurLine->SetEOL(EndSeq);
 		xf_free(NewCurLineStr);
 	}
 	else
 	{
 		NewString->SetString(L"");
-		AddUndoData(UNDO_INSSTR,nullptr,L"",NumLine+1,0);// EOL? - CurLine->GetEOL()  GlobalEOL   ""
+		AddUndoData(UNDO_INSSTR,nullptr,CurLine->GetEOL(),NumLine+1,0);// EOL? - CurLine->GetEOL()  GlobalEOL   ""
 	}
 
+	if (EndSeq && *EndSeq)
+	{
+		CurLine->SetEOL(EndSeq);
+	}
+	else
+	{
+		CurLine->SetEOL(*GlobalEOL?GlobalEOL:DOS_EOL_fmt);
+		NewString->SetEOL(EndSeq);
+	}
+
 	if (VBlockStart && NumLine<VBlockY+VBlockSizeY)
 	{
 		if (NumLine<VBlockY)
Index: edit.cpp
===================================================================
--- edit.cpp	(revision 6730)
+++ edit.cpp	(working copy)
@@ -347,12 +347,12 @@
 	if (Mask && *Mask)
 		RefreshStrByMask();
 
-	wchar_t *OutStrTmp=(wchar_t *)xf_malloc((EditLength+1)*sizeof(wchar_t));
+	wchar_t *OutStrTmp=(wchar_t *)xf_malloc((EditLength+2)*sizeof(wchar_t));
 
 	if (!OutStrTmp)
 		return;
 
-	wchar_t *OutStr=(wchar_t *)xf_malloc((EditLength+1)*sizeof(wchar_t));
+	wchar_t *OutStr=(wchar_t *)xf_malloc((EditLength+2)*sizeof(wchar_t));
 
 	if (!OutStr)
 	{
@@ -411,6 +411,13 @@
 		if (Flags.Check(FEDITLINE_PASSWORDMODE))
 			wmemset(OutStr,L'*',OutStrLength);
 	}
+	
+	if (Flags.Check(FEDITLINE_SHOWWHITESPACE) && Flags.Check(FEDITLINE_EDITORMODE) && (OutStrLength < EditLength))
+	{
+		const wchar_t* EndSeq = GetEOL();
+		if (EndSeq && *EndSeq)
+			OutStr[OutStrLength++]=L'\xB6'; //L'\x266A';
+	}
 
 	OutStr[OutStrLength]=0;
 	SetColor(Color);
EOL.110925.diff (3,307 bytes)   

Maximus

2011-09-26 06:44

reporter   bugnote:0007740

Довесок. Исправления перевода и удаления строк.

Maximus

2012-04-16 19:12

reporter   bugnote:0008913

Ээээ, хотелось бы знать, фартим принципиально не хочет добавлять данный патч в транк, или он потерялся?
Если просто потерялся - обновление доложу, а нет - ну и нафиг.

vskirdin

2012-05-02 06:37

administrator   bugnote:0009085

потерялся - докладывай

Maximus

2012-05-02 06:44

reporter   bugnote:0009086

ok, вечером будет

Maximus

2012-05-03 07:12

reporter  

Eol.120502.diff (4,145 bytes)   
Index: editor.cpp
===================================================================
--- editor.cpp	(revision 7991)
+++ editor.cpp	(working copy)
@@ -1662,6 +1662,7 @@
 							CurLine->GetSelection(SelStart,SelEnd);
 							CurLine->m_next->GetSelection(NextSelStart,NextSelEnd);
 							const wchar_t *Str;
+							const wchar_t *NextEOL = CurLine->m_next->GetEOL();
 							int NextLength;
 							CurLine->m_next->GetBinaryString(&Str,nullptr,NextLength);
 							CurLine->InsertBinaryString(Str,NextLength);
@@ -1669,8 +1670,7 @@
 							CurLine->SetCurPos(CurPos);
 							DeleteString(CurLine->m_next,NumLine+1,TRUE,NumLine+1);
 
-							if (!NextLength)
-								CurLine->SetEOL(L"");
+							CurLine->SetEOL(NextEOL);
 
 							if (NextSelStart!=-1)
 							{
@@ -3270,12 +3270,6 @@
 	const wchar_t *EndSeq;
 	CurLine->GetBinaryString(&CurLineStr,&EndSeq,Length);
 
-	/* $ 13.01.2002 IS
-	   ���� �� �� ��������� ��� ���� ������, �� ������ ��� ���� ������
-	   � ��� ����� DOS_EOL_fmt � ��������� ��� ����.
-	*/
-	if (!*EndSeq)
-		CurLine->SetEOL(*GlobalEOL?GlobalEOL:DOS_EOL_fmt);
 
 	CurPos=CurLine->GetCurPos();
 	CurLine->GetSelection(SelStart,SelEnd);
@@ -3356,7 +3350,7 @@
 		AddUndoData(UNDO_BEGIN);
 		AddUndoData(UNDO_EDIT,CurLine->GetStringAddr(),CurLine->GetEOL(),NumLine,
 		            CurLine->GetCurPos(),CurLine->GetLength());
-		AddUndoData(UNDO_INSSTR,nullptr,EndList==CurLine?L"":GlobalEOL,NumLine+1,0); // EOL? - CurLine->GetEOL()  GlobalEOL   ""
+		AddUndoData(UNDO_INSSTR,nullptr,CurLine->GetEOL(),NumLine+1,0);
 		AddUndoData(UNDO_END);
 		wchar_t *NewCurLineStr = (wchar_t *) xf_malloc((CurPos+1)*sizeof(wchar_t));
 
@@ -3374,15 +3368,25 @@
 		}
 
 		CurLine->SetBinaryString(NewCurLineStr,StrSize);
-		CurLine->SetEOL(EndSeq);
 		xf_free(NewCurLineStr);
 		Change(ECTYPE_CHANGED,NumLine);
 	}
 	else
 	{
 		NewString->SetString(L"");
-		AddUndoData(UNDO_INSSTR,nullptr,L"",NumLine+1,0);// EOL? - CurLine->GetEOL()  GlobalEOL   ""
+		AddUndoData(UNDO_INSSTR,nullptr,CurLine->GetEOL(),NumLine+1,0);
 	}
+
+	if (EndSeq && *EndSeq)
+	{
+		CurLine->SetEOL(EndSeq);
+	}
+	else
+	{
+		CurLine->SetEOL(*GlobalEOL?GlobalEOL:DOS_EOL_fmt);
+		NewString->SetEOL(EndSeq);
+	}
+
 	Change(ECTYPE_CHANGED,NumLine+1);
 
 	if (VBlockStart && NumLine<VBlockY+VBlockSizeY)
@@ -4118,10 +4122,24 @@
 				CurLine->Select(StartPos,-1);
 				StartPos=0;
 				EdOpt.AutoIndent=FALSE;
+				Edit *PrevLine=CurLine;
 				ProcessKey(KEY_ENTER);
+				_ASSERTE(PrevLine!=CurLine);
+				wchar_t ClipEol[4] = {ClipText[I]};
+				if (ClipText[I]==L'\r' && ClipText[I+1]==L'\n')
+				{
+					ClipEol[1]=L'\n';
+					if (ClipText[I+2]==L'\n')
+						ClipEol[2]=L'\n'; // \r\n\n
+				}
+				PrevLine->SetEOL(ClipEol);
 
 				if (ClipText[I]==L'\r' && ClipText[I+1]==L'\n')
+				{
 					I++;
+					if (ClipText[I+1]==L'\n')
+						I++; // \r\n\n
+				}
 
 				I++;
 			}
@@ -4213,6 +4231,7 @@
 
 	size_t TotalChars = DataSize;
 	int StartSel, EndSel;
+	const wchar_t* Eol;
 	for (Edit *Ptr = BlockStart; Ptr; Ptr = Ptr->m_next)
 	{
 		Ptr->GetSelection(StartSel, EndSel);
@@ -4221,7 +4240,9 @@
 		if (EndSel == -1)
 		{
 			TotalChars += Ptr->GetLength() - StartSel;
-			TotalChars += 2; // CRLF
+			Eol = Ptr->GetEOL();
+			TotalChars += wcslen(Eol); // CRLF/CRCRLF/...
+
 		}
 		else
 			TotalChars += EndSel - StartSel;
@@ -4266,8 +4287,13 @@
 
 		if (EndSel == -1)
 		{
-			wcscpy(CopyData + DataSize, DOS_EOL_fmt);
-			DataSize += 2;
+			Eol = Ptr->GetEOL();
+			if (*Eol)
+			{
+				wcscpy(CopyData + DataSize, Eol);
+				DataSize += wcslen(Eol);
+			}
+
 		}
 	}
 
Index: fileedit.cpp
===================================================================
--- fileedit.cpp	(revision 7991)
+++ fileedit.cpp	(working copy)
@@ -1972,7 +1972,7 @@
 
 			CurPtr->GetBinaryString(&SaveStr,&EndSeq,Length);
 
-			if (!*EndSeq && CurPtr->m_next)
+			if (!*EndSeq && CurPtr->m_next && (*CurPtr->GetEOL()))
 				EndSeq=*m_editor->GlobalEOL ? m_editor->GlobalEOL:DOS_EOL_fmt;
 
 			if (TextFormat && *EndSeq)
Eol.120502.diff (4,145 bytes)   

Maximus

2012-05-03 07:17

reporter  

DropModified.diff (740 bytes)   
Index: editor.cpp
===================================================================
--- editor.cpp	(revision 7991)
+++ editor.cpp	(working copy)
@@ -6190,6 +6190,11 @@
 
 			return FALSE;
 		}
+		case ECTL_DROPMODIFEDFLAG:
+		{
+			Flags.Clear(FEDITOR_MODIFIED);
+			return TRUE;
+		}
 	}
 
 	return FALSE;
Index: plugin.hpp
===================================================================
--- plugin.hpp	(revision 7991)
+++ plugin.hpp	(working copy)
@@ -1499,6 +1499,7 @@
 	ECTL_UNDOREDO                   = 32,
 	ECTL_GETFILENAME                = 33,
 	ECTL_DELCOLOR                   = 34,
+	ECTL_DROPMODIFEDFLAG            = 35,
 #ifdef FAR_USE_INTERNALS
 	ECTL_SERVICEREGION,
 #endif // END FAR_USE_INTERNALS
DropModified.diff (740 bytes)   

Maximus

2012-05-03 07:20

reporter   bugnote:0009097

Eol.120502.diff - сводный, вроде ничего не забыл )

DropModified.diff - нужен, чтобы после "прозрачного заворота" строк в редакторе не появлялся признак модифицирован (если его раньше не было).

DrKnS

2012-05-03 07:40

administrator   bugnote:0009099

Господа, в морг такие костыли.

Сворачивание строк надо делать только на уровне отрисовки редактора.

vskirdin

2012-05-03 08:08

administrator   bugnote:0009100

2 патча применять, да?
если да, то по последнему для ECTL_DROPMODIFEDFLAG давай патч под Писание.

vskirdin

2012-05-03 08:22

administrator   bugnote:0009101

> Господа, в морг такие костыли.
Это про DropModified.diff?

DrKnS

2012-05-03 10:01

administrator   bugnote:0009102

Да.

vskirdin

2012-05-03 11:23

administrator   bugnote:0009103

build 2658

Maximus

2012-05-03 13:46

reporter  

ansi.diff (645 bytes)   
Index: PluginA.cpp
===================================================================
--- PluginA.cpp	(revision 7991)
+++ PluginA.cpp	(working copy)
@@ -4653,7 +4653,8 @@
 				newss.StringNumber=oldss->StringNumber;
 				UINT CodePage=GetEditorCodePageA();
 				newss.StringText=(oldss->StringText)?AnsiToUnicodeBin(oldss->StringText, oldss->StringLength,CodePage):nullptr;
-				newss.StringEOL=(oldss->StringEOL)?AnsiToUnicode(oldss->StringEOL,CodePage):nullptr;
+				newss.StringEOL=(oldss->StringEOL && *oldss->StringEOL)?AnsiToUnicode(oldss->StringEOL,CodePage):nullptr;
+
 				newss.StringLength=oldss->StringLength;
 			}
 
ansi.diff (645 bytes)   

Maximus

2012-05-03 13:48

reporter   bugnote:0009104

про анси плагины забыл. чтобы они работали "как раньше".

vskirdin

2012-05-04 11:15

administrator   bugnote:0009107

build 2660

Maximus

2012-05-11 07:18

reporter   bugnote:0009141

ok

Issue History

Date Modified Username Field Change
2011-09-14 14:35 Maximus New Issue
2011-09-14 14:35 Maximus File Added: Eol.diff
2011-09-26 06:43 Maximus File Added: EOL.110925.diff
2011-09-26 06:44 Maximus Note Added: 0007740
2012-04-16 19:12 Maximus Note Added: 0008913
2012-05-02 06:37 vskirdin Note Added: 0009085
2012-05-02 06:44 Maximus Note Added: 0009086
2012-05-03 07:12 Maximus File Added: Eol.120502.diff
2012-05-03 07:17 Maximus File Added: DropModified.diff
2012-05-03 07:20 Maximus Note Added: 0009097
2012-05-03 07:40 DrKnS Note Added: 0009099
2012-05-03 08:08 vskirdin Note Added: 0009100
2012-05-03 08:22 vskirdin Note Added: 0009101
2012-05-03 10:01 DrKnS Note Added: 0009102
2012-05-03 11:23 vskirdin Note Added: 0009103
2012-05-03 11:23 vskirdin Assigned To => vskirdin
2012-05-03 11:23 vskirdin Status new => feedback
2012-05-03 13:46 Maximus File Added: ansi.diff
2012-05-03 13:48 Maximus Note Added: 0009104
2012-05-03 13:48 Maximus Status feedback => assigned
2012-05-04 11:15 vskirdin Note Added: 0009107
2012-05-04 11:15 vskirdin Status assigned => feedback
2012-05-11 07:18 Maximus Note Added: 0009141
2012-05-11 07:18 Maximus Status feedback => assigned
2012-05-11 07:18 Maximus Status assigned => resolved
2012-05-11 07:21 vskirdin Build => 2660
2012-05-11 07:21 vskirdin Status resolved => closed
2012-05-11 07:21 vskirdin Resolution open => fixed
2012-05-11 07:21 vskirdin Fixed in Version => 3.0
2012-11-03 23:39 shmuel Relationship added related to 0002183
2015-12-07 13:34 shmuel Relationship added related to 0003129