View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0001879 | Far Manager | Plugins API.Editor | public | 2011-09-14 14:35 | 2015-12-07 13:34 |
| Reporter | Maximus | Assigned To | vskirdin | ||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | closed | Resolution | fixed | ||
| Product Version | 3.0 | ||||
| Fixed in Version | 3.0 | ||||
| Summary | 0001879: Фар игнорирует заданное плагином отсутствие EOL | ||||
| Description | Плагин сказал "EOL не нужен". Зачем фар пишет дефолтный после каждой строки? | ||||
| Tags | No tags attached. | ||||
| Build | 2660 | ||||
|
|
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.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);
|
|
|
Довесок. Исправления перевода и удаления строк. |
|
|
Ээээ, хотелось бы знать, фартим принципиально не хочет добавлять данный патч в транк, или он потерялся? Если просто потерялся - обновление доложу, а нет - ну и нафиг. |
|
|
потерялся - докладывай |
|
|
ok, вечером будет |
|
|
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)
|
|
|
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
|
|
|
Eol.120502.diff - сводный, вроде ничего не забыл ) DropModified.diff - нужен, чтобы после "прозрачного заворота" строк в редакторе не появлялся признак модифицирован (если его раньше не было). |
|
|
Господа, в морг такие костыли. Сворачивание строк надо делать только на уровне отрисовки редактора. |
|
|
2 патча применять, да? если да, то по последнему для ECTL_DROPMODIFEDFLAG давай патч под Писание. |
|
|
> Господа, в морг такие костыли. Это про DropModified.diff? |
|
|
Да. |
|
|
build 2658 |
|
|
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; } |
|
|
про анси плагины забыл. чтобы они работали "как раньше". |
|
|
build 2660 |
|
|
ok |
| 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 |