View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000547 | Far Manager | Editor | public | 2008-06-07 03:40 | 2009-09-03 21:39 |
Reporter | bitomaxsp | Assigned To | vskirdin | ||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0000547: Выделение найденных фрагментов при поиске | ||||
Description | Добавил возможность выделения найденного в редакторе. Теперь в диалоге есть галочка "Выделять найденное". Если она стоит, то происходит выделение найденного фрагмента, курсор становится в конце выделения. Если включена опция "Постоянные блоки" и если перед началом поиска выделен блок, то выделение снимается. По дефолту галочка снята, то есть поиск происходит без выделения. Очень удобная штука, с учетом того, что обычно не видно что найдено, так как курсор маленький и мигает. Любые пожелания критика - только за. Diff прицепил. | ||||
Tags | No tags attached. | ||||
Build | 1104 | ||||
2008-06-07 03:40
|
selfnd.patch (9,433 bytes)
Index: editor.cpp =================================================================== --- editor.cpp (revision 1728) +++ editor.cpp (working copy) @@ -85,6 +85,8 @@ LastSearchCase=GlobalSearchCase; LastSearchWholeWords=GlobalSearchWholeWords; LastSearchReverse=GlobalSearchReverse; + LastSearchSelFound=GlobalSearchSelFound; + SuccessfulSearch=0; Pasting=0; NumLine=0; @@ -1146,6 +1148,14 @@ } } + if( Key != KEY_F7 && Key != KEY_SHIFTF7 && Key != KEY_ALTF7 && + Key != KEY_SHIFT && Key != KEY_CTRL && Key != KEY_ALT && + Key != KEY_RCTRL && Key != KEY_RALT ) + { + // Reset flag to allow search from cursor position + SuccessfulSearch = 0; + } + switch(Key) { case KEY_CTRLSHIFTPGUP: case KEY_CTRLSHIFTNUMPAD9: @@ -3531,8 +3541,9 @@ static int LastSuccessfulReplaceMode=0; string strMsgStr; const wchar_t *TextHistoryName=L"SearchText",*ReplaceHistoryName=L"ReplaceText"; - int CurPos,Count,Case,WholeWords,ReverseSearch,Match,NewNumLine,UserBreak; - + int CurPos,Count,Case,WholeWords,ReverseSearch,SelectFound,Match,NewNumLine,UserBreak; + int iPosCorrection = 0; + if (Next && strLastSearchStr.IsEmpty() ) return TRUE; @@ -3542,20 +3553,26 @@ Case=LastSearchCase; WholeWords=LastSearchWholeWords; ReverseSearch=LastSearchReverse; - + SelectFound=LastSearchSelFound; + if (!Next) if(!GetSearchReplaceString(ReplaceMode,&strSearchStr, &strReplaceStr, TextHistoryName,ReplaceHistoryName, - &Case,&WholeWords,&ReverseSearch)) + &Case,&WholeWords,&ReverseSearch,&SelectFound)) return FALSE; + // Cheack if need to modify current pos + if( LastSearchSelFound && SuccessfulSearch ) + iPosCorrection = (int)strLastSearchStr.GetLength(); + strLastSearchStr = strSearchStr; strLastReplaceStr = strReplaceStr; LastSearchCase=Case; LastSearchWholeWords=WholeWords; LastSearchReverse=ReverseSearch; + LastSearchSelFound=SelectFound; if ( strSearchStr.IsEmpty() ) return TRUE; @@ -3565,7 +3582,7 @@ LastSuccessfulReplaceMode=ReplaceMode; - if (!EdOpt.PersistentBlocks) + if(!EdOpt.PersistentBlocks || SelectFound) UnmarkBlock(); { @@ -3580,9 +3597,17 @@ Count=0; Match=0; + SuccessfulSearch=0; UserBreak=0; CurPos=CurLine->GetCurPos(); + //++ Modify current position in select found mode + if( iPosCorrection != 0 ) + { + CurPos -= (iPosCorrection); + CurLine->SetCurPos( CurPos ); + } + /* $ 16.10.2000 tran CurPos ����������� ��� ������� ������ */ @@ -3618,6 +3643,18 @@ if (CurPtr->Search(SearchStr,CurPos,Case,WholeWords,ReverseSearch)) { + if( SelectFound ) + { + Flags.Set(FEDITOR_MARKINGBLOCK); + int iFoundPos = CurPtr->GetCurPos(); + CurPtr->Select( iFoundPos, iFoundPos+SearchLength ); + BlockStart = CurPtr; + BlockStartLine = NewNumLine; + // Set cursor after selection + iFoundPos += SearchLength; + CurPtr->SetCurPos(iFoundPos); + } + int Skip=FALSE; /* $ 24.01.2003 KM ! �� �������� ������ �������� �� ���� ������ �� ���� ������������ ����. @@ -3795,7 +3832,7 @@ Pasting--; } } - Match=1; + SuccessfulSearch=Match=1; if (!ReplaceMode) break; CurPos=CurLine->GetCurPos(); Index: editor.hpp =================================================================== --- editor.hpp (revision 1728) +++ editor.hpp (working copy) @@ -166,7 +166,8 @@ /* $ 30.07.2000 KM ���� ��������� �� ������ "Whole words" */ - int LastSearchCase,LastSearchWholeWords,LastSearchReverse; + int LastSearchCase,LastSearchWholeWords,LastSearchReverse,LastSearchSelFound; + int SuccessfulSearch; // successful search indicator int m_codepage; //BUGBUG Index: farlang.templ =================================================================== --- farlang.templ (revision 1728) +++ farlang.templ (working copy) @@ -1673,6 +1673,10 @@ "����&� ����" "Re&verse search" +MEditSearchSelFound +"&�뤥���� ���������" +"Se&lect found" + MEditSearchSearch "�᪠��" "Search" Index: fn.hpp =================================================================== --- fn.hpp (revision 1728) +++ fn.hpp (working copy) @@ -934,7 +934,8 @@ const wchar_t *ReplaceHistoryName, int *Case, int *WholeWords, - int *Reverse); + int *Reverse, + int *SelectFound); BOOL WINAPI KeyMacroToText(int Key,string &strKeyText0); Index: global.cpp =================================================================== --- global.cpp (revision 1728) +++ global.cpp (working copy) @@ -110,6 +110,7 @@ char GlobalSearchString[SEARCHSTRINGBUFSIZE]; int GlobalSearchCase=FALSE; int GlobalSearchWholeWords=FALSE; // ������� "Whole words" �� ������ +int GlobalSearchSelFound=FALSE; // ������� "Select found" �� ������ int GlobalSearchHex=FALSE; // ������� "Search for hex" �� ������ int GlobalSearchReverse=FALSE; Index: global.hpp =================================================================== --- global.hpp (revision 1728) +++ global.hpp (working copy) @@ -85,6 +85,7 @@ extern char GlobalSearchString[SEARCHSTRINGBUFSIZE]; extern int GlobalSearchCase; extern int GlobalSearchWholeWords; // ������� "Whole words" �� ������ +extern int GlobalSearchSelFound; //������� "Select found" �� ������ extern int GlobalSearchHex; // ������� "Search for hex" �� ������ extern int GlobalSearchReverse; Index: help.cpp =================================================================== --- help.cpp (revision 1728) +++ help.cpp (working copy) @@ -1065,7 +1065,7 @@ if (!Next) if(!GetSearchReplaceString(FALSE,SearchStr,sizeof(SearchStr), NULL,0,NULL,NULL, - NULL/*&Case*/,NULL/*&WholeWords*/,NULL/*&ReverseSearch*/)) + NULL/*&Case*/,NULL/*&WholeWords*/,NULL/*&ReverseSearch*/,NULL)) return FALSE; xstrncpy((char *)LastSearchStr,(char *)SearchStr,sizeof(LastSearchStr)); Index: stddlg.cpp =================================================================== --- stddlg.cpp (revision 1728) +++ stddlg.cpp (working copy) @@ -85,6 +85,10 @@ �������� �� ���������, ������� �� ������� ���� "Reverse search" ���� = NULL, �� ���������� ������� 0 (����� �����) + *SelectFound + �������� �� ���������, ������� �� ������� ���� "Select found" + ���� = NULL, �� ���������� ������� 0 (�� ����� ���������) + ����������� �������: TRUE - ���������� ���������� ���� �������� FALSE - ���������� �������� �� ������� (Esc) @@ -98,7 +102,8 @@ const wchar_t *ReplaceHistoryName, int *Case, int *WholeWords, - int *Reverse) + int *Reverse, + int *SelectFound) { if(!pSearchStr || (IsReplaceMode && !pReplaceStr)) return FALSE; @@ -262,9 +267,10 @@ /* 4 */DI_CHECKBOX,5,5,0,5,0,0,0,0,(const wchar_t *)MEditSearchCase, /* 5 */DI_CHECKBOX,5,6,0,6,0,0,0,0,(const wchar_t *)MEditSearchWholeWords, /* 6 */DI_CHECKBOX,5,7,0,7,0,0,0,0,(const wchar_t *)MEditSearchReverse, - /* 7 */DI_TEXT,3,8,0,8,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", - /* 8 */DI_BUTTON,0,9,0,9,0,0,DIF_CENTERGROUP,1,(const wchar_t *)MEditSearchSearch, - /* 9 */DI_BUTTON,0,9,0,9,0,0,DIF_CENTERGROUP,0,(const wchar_t *)MEditSearchCancel + /* 7 */DI_CHECKBOX,27,5,0,5,0,0,0,0,(const wchar_t *)MEditSearchSelFound, + /* 8 */DI_TEXT,3,8,0,8,0,0,DIF_BOXCOLOR|DIF_SEPARATOR,0,L"", + /* 9 */DI_BUTTON,0,9,0,9,0,0,DIF_CENTERGROUP,1,(const wchar_t *)MEditSearchSearch, + /* 10 */DI_BUTTON,0,9,0,9,0,0,DIF_CENTERGROUP,0,(const wchar_t *)MEditSearchCancel }; MakeDialogItemsEx(SearchDlgData,SearchDlg); HeightDialog=12; @@ -320,11 +326,25 @@ SearchDlg[I].Y2--; } } - + + if(SelectFound) + SearchDlg[7].Selected=*SelectFound; + else + { + HeightDialog--; + SearchDlg[0].Y2--; + SearchDlg[7].Type=DI_TEXT; + for(I=8; I < (int)countof(SearchDlgData); ++I) + { + SearchDlg[I].Y1--; + SearchDlg[I].Y2--; + } + } + // ��� �� ���� 2 ����������� ����� if(HeightDialog == 9) { - for(I=7; I < (int)countof(SearchDlgData); ++I) + for(I=8; I < (int)countof(SearchDlgData); ++I) { SearchDlg[I].Y1--; SearchDlg[I].Y2--; @@ -334,7 +354,7 @@ Dialog Dlg(SearchDlg,countof(SearchDlg)); Dlg.SetPosition(-1,-1,76,HeightDialog); Dlg.Process(); - if (Dlg.GetExitCode()!=8) + if (Dlg.GetExitCode()!=9) return FALSE; } @@ -343,6 +363,7 @@ if(Case) *Case=SearchDlg[4].Selected; if(WholeWords) *WholeWords=SearchDlg[5].Selected; if(Reverse) *Reverse=SearchDlg[6].Selected; + if(SelectFound) *SelectFound=SearchDlg[7].Selected; } return TRUE; } |
|
см. 498 |
|
Значение опции не запоминается. |
2008-06-15 21:53
|
restore.patch (23,844 bytes)
Index: editor.cpp =================================================================== --- editor.cpp (revision 1841) +++ editor.cpp (working copy) @@ -197,6 +197,7 @@ GlobalSearchCase=LastSearchCase; GlobalSearchWholeWords=LastSearchWholeWords; GlobalSearchReverse=LastSearchReverse; + GlobalSearchSelFound=LastSearchSelFound; } /* @@ -967,16 +968,16 @@ case MCODE_V_EDITORLINES: return (__int64)NumLastLine; - // ������ �� �������� ���������� - case MCODE_F_BM_ADD: - return AddStackBookmark(); - case MCODE_F_BM_CLEAR: - return ClearStackBookmarks(); - case MCODE_F_BM_NEXT: - return NextStackBookmark(); - case MCODE_F_BM_PREV: - return PrevStackBookmark(); - case MCODE_F_BM_STAT: + // ������ �� �������� ���������� + case MCODE_F_BM_ADD: + return AddStackBookmark(); + case MCODE_F_BM_CLEAR: + return ClearStackBookmarks(); + case MCODE_F_BM_NEXT: + return NextStackBookmark(); + case MCODE_F_BM_PREV: + return PrevStackBookmark(); + case MCODE_F_BM_STAT: // ���� ���, �.�. BM.Stat(0) ��������� ��������� return GetStackBookmarks(NULL); @@ -1152,10 +1153,10 @@ Key != KEY_SHIFT && Key != KEY_CTRL && Key != KEY_ALT && Key != KEY_RCTRL && Key != KEY_RALT ) { - // Reset flag to allow search from cursor position - SuccessfulSearch = 0; + // Reset flag to allow search from cursor position + SuccessfulSearch = 0; } - + switch(Key) { case KEY_CTRLSHIFTPGUP: case KEY_CTRLSHIFTNUMPAD9: @@ -1284,7 +1285,7 @@ } case KEY_SHIFTEND: - case KEY_SHIFTNUMPAD1: + case KEY_SHIFTNUMPAD1: { { int LeftPos=CurLine->GetLeftPos(); @@ -3112,25 +3113,25 @@ if (SavePos.Line[I]!=0xffffffff && UndoLine<static_cast<int>(SavePos.Line[I])) SavePos.Line[I]--; - if (StackPos) - { - struct InternalEditorStackBookMark *sb_temp = StackPos, *sb_new; + if (StackPos) + { + struct InternalEditorStackBookMark *sb_temp = StackPos, *sb_new; - while(sb_temp->prev) - sb_temp=sb_temp->prev; - while (sb_temp) - { - sb_new = sb_temp->next; - if (UndoLine < static_cast<int>(sb_temp->Line)) - sb_temp->Line--; - else - { - if (UndoLine == static_cast<int>(sb_temp->Line)) - DeleteStackBookmark(sb_temp); - } - sb_temp = sb_new; - } - } + while(sb_temp->prev) + sb_temp=sb_temp->prev; + while (sb_temp) + { + sb_new = sb_temp->next; + if (UndoLine < static_cast<int>(sb_temp->Line)) + sb_temp->Line--; + else + { + if (UndoLine == static_cast<int>(sb_temp->Line)) + DeleteStackBookmark(sb_temp); + } + sb_temp = sb_new; + } + } NumLastLine--; @@ -3206,7 +3207,7 @@ NewString = InsertString (NULL, 0, CurLine); if ( !NewString ) - return; + return; //NewString->SetTables(UseDecodeTable ? &TableSet:NULL); // ?? @@ -3230,19 +3231,19 @@ (NumLine<(int)SavePos.Line[I] || (NumLine==(int)SavePos.Line[I] && CurPos==0))) SavePos.Line[I]++; - if (StackPos) - { - struct InternalEditorStackBookMark *sb_temp = StackPos; + if (StackPos) + { + struct InternalEditorStackBookMark *sb_temp = StackPos; - while(sb_temp->prev) - sb_temp=sb_temp->prev; - while(sb_temp) - { - if (NumLine < static_cast<int>(sb_temp->Line) || (NumLine==static_cast<int>(sb_temp->Line) && CurPos==0)) - sb_temp->Line++; - sb_temp=sb_temp->next; - } - } + while(sb_temp->prev) + sb_temp=sb_temp->prev; + while(sb_temp) + { + if (NumLine < static_cast<int>(sb_temp->Line) || (NumLine==static_cast<int>(sb_temp->Line) && CurPos==0)) + sb_temp->Line++; + sb_temp=sb_temp->next; + } + } int IndentPos=0; @@ -3543,7 +3544,7 @@ const wchar_t *TextHistoryName=L"SearchText",*ReplaceHistoryName=L"ReplaceText"; int CurPos,Count,Case,WholeWords,ReverseSearch,SelectFound,Match,NewNumLine,UserBreak; int iPosCorrection = 0; - + if (Next && strLastSearchStr.IsEmpty() ) return TRUE; @@ -3554,7 +3555,7 @@ WholeWords=LastSearchWholeWords; ReverseSearch=LastSearchReverse; SelectFound=LastSearchSelFound; - + if (!Next) if(!GetSearchReplaceString(ReplaceMode,&strSearchStr, &strReplaceStr, @@ -3601,7 +3602,7 @@ UserBreak=0; CurPos=CurLine->GetCurPos(); - //++ Modify current position in select found mode + //++ Modify current position in select found mode if( iPosCorrection != 0 ) { CurPos -= (iPosCorrection); @@ -3654,7 +3655,7 @@ iFoundPos += SearchLength; CurPtr->SetCurPos(iFoundPos); } - + int Skip=FALSE; /* $ 24.01.2003 KM ! �� �������� ������ �������� �� ���� ������ �� ���� ������������ ����. @@ -4250,58 +4251,58 @@ void Editor::GoToLine(int Line) { - if (Line != NumLine) - { - bool bReverse = false; - int LastNumLine=NumLine; - int CurScrLine=CalcDistance(TopScreen,CurLine,-1); + if (Line != NumLine) + { + bool bReverse = false; + int LastNumLine=NumLine; + int CurScrLine=CalcDistance(TopScreen,CurLine,-1); - if (Line < NumLine) - { - if (Line > NumLine/2) - { - bReverse = true; - } - else - { - CurLine = TopList; - NumLine = 0; - } - } - else - { - if (Line > (NumLine + (NumLastLine-NumLine)/2)) - { - bReverse = true; - CurLine = EndList; - NumLine = NumLastLine-1; - } - } + if (Line < NumLine) + { + if (Line > NumLine/2) + { + bReverse = true; + } + else + { + CurLine = TopList; + NumLine = 0; + } + } + else + { + if (Line > (NumLine + (NumLastLine-NumLine)/2)) + { + bReverse = true; + CurLine = EndList; + NumLine = NumLastLine-1; + } + } - if (bReverse) - { - for ( ; NumLine>Line && CurLine->m_prev!=NULL; NumLine--) - CurLine=CurLine->m_prev; - } - else - { - for ( ; NumLine<Line && CurLine->m_next!=NULL; NumLine++) - CurLine=CurLine->m_next; - } + if (bReverse) + { + for ( ; NumLine>Line && CurLine->m_prev!=NULL; NumLine--) + CurLine=CurLine->m_prev; + } + else + { + for ( ; NumLine<Line && CurLine->m_next!=NULL; NumLine++) + CurLine=CurLine->m_next; + } - CurScrLine+=NumLine-LastNumLine; + CurScrLine+=NumLine-LastNumLine; - if (CurScrLine<0 || CurScrLine>Y2-Y1) - TopScreen=CurLine; - } + if (CurScrLine<0 || CurScrLine>Y2-Y1) + TopScreen=CurLine; + } // <GOTO_UNMARK:2> // if (!EdOpt.PersistentBlocks) // UnmarkBlock(); // </GOTO_UNMARK> - Show(); - return; + Show(); + return; } void Editor::GoToPosition() @@ -5719,197 +5720,197 @@ int Editor::RestoreStackBookmark() { - if(StackPos && ((int)StackPos->Line!=NumLine || (int)StackPos->Cursor!=CurLine->GetCurPos())) - { - GoToLine(StackPos->Line); - CurLine->SetCurPos(StackPos->Cursor); - CurLine->SetLeftPos(StackPos->LeftPos); - TopScreen=CurLine; - for (DWORD I=0;I<StackPos->ScreenLine && TopScreen->m_prev!=NULL;I++) - TopScreen=TopScreen->m_prev; - if (!EdOpt.PersistentBlocks) - UnmarkBlock(); - Show(); - return TRUE; - } + if(StackPos && ((int)StackPos->Line!=NumLine || (int)StackPos->Cursor!=CurLine->GetCurPos())) + { + GoToLine(StackPos->Line); + CurLine->SetCurPos(StackPos->Cursor); + CurLine->SetLeftPos(StackPos->LeftPos); + TopScreen=CurLine; + for (DWORD I=0;I<StackPos->ScreenLine && TopScreen->m_prev!=NULL;I++) + TopScreen=TopScreen->m_prev; + if (!EdOpt.PersistentBlocks) + UnmarkBlock(); + Show(); + return TRUE; + } return FALSE; } int Editor::AddStackBookmark() { - struct InternalEditorStackBookMark *sb_old=StackPos,*sb_new; + struct InternalEditorStackBookMark *sb_old=StackPos,*sb_new; - if (StackPos && StackPos->next) - { - StackPos=StackPos->next; - StackPos->prev=0; - ClearStackBookmarks(); - StackPos=sb_old; - StackPos->next = 0; - } + if (StackPos && StackPos->next) + { + StackPos=StackPos->next; + StackPos->prev=0; + ClearStackBookmarks(); + StackPos=sb_old; + StackPos->next = 0; + } - if (StackPos && (int)StackPos->Line==NumLine && (int)StackPos->Cursor==CurLine->GetCurPos()) - return TRUE; + if (StackPos && (int)StackPos->Line==NumLine && (int)StackPos->Cursor==CurLine->GetCurPos()) + return TRUE; - sb_new = (InternalEditorStackBookMark*) xf_malloc (sizeof (InternalEditorStackBookMark)); + sb_new = (InternalEditorStackBookMark*) xf_malloc (sizeof (InternalEditorStackBookMark)); - if (sb_new) - { - if (StackPos) - StackPos->next=sb_new; - StackPos=sb_new; - StackPos->prev=sb_old; - StackPos->next=0; - StackPos->Line=NumLine; - StackPos->Cursor=CurLine->GetCurPos(); - StackPos->LeftPos=CurLine->GetLeftPos(); - StackPos->ScreenLine=CalcDistance(TopScreen,CurLine,-1); - NewStackPos = TRUE; // When go prev bookmark, we must save current - return TRUE; - } - return FALSE; + if (sb_new) + { + if (StackPos) + StackPos->next=sb_new; + StackPos=sb_new; + StackPos->prev=sb_old; + StackPos->next=0; + StackPos->Line=NumLine; + StackPos->Cursor=CurLine->GetCurPos(); + StackPos->LeftPos=CurLine->GetLeftPos(); + StackPos->ScreenLine=CalcDistance(TopScreen,CurLine,-1); + NewStackPos = TRUE; // When go prev bookmark, we must save current + return TRUE; + } + return FALSE; } int Editor::PrevStackBookmark() { - if (StackPos) - { - if (NewStackPos) // Save last position in new bookmark - { - AddStackBookmark(); - NewStackPos = FALSE; - } + if (StackPos) + { + if (NewStackPos) // Save last position in new bookmark + { + AddStackBookmark(); + NewStackPos = FALSE; + } - if (StackPos->prev) // If not first bookmark - go - { - StackPos=StackPos->prev; - } - return RestoreStackBookmark(); - } - return FALSE; + if (StackPos->prev) // If not first bookmark - go + { + StackPos=StackPos->prev; + } + return RestoreStackBookmark(); + } + return FALSE; } int Editor::NextStackBookmark() { - if (StackPos) - { - if (StackPos->next) // If not last bookmark - go - { - StackPos=StackPos->next; - } - return RestoreStackBookmark(); - } - return FALSE; + if (StackPos) + { + if (StackPos->next) // If not last bookmark - go + { + StackPos=StackPos->next; + } + return RestoreStackBookmark(); + } + return FALSE; } int Editor::ClearStackBookmarks() { - if (StackPos) - { - struct InternalEditorStackBookMark *sb_prev = StackPos->prev, *sb_next; + if (StackPos) + { + struct InternalEditorStackBookMark *sb_prev = StackPos->prev, *sb_next; - while(StackPos) - { - sb_next = StackPos->next; - xf_free (StackPos); - StackPos = sb_next; - } + while(StackPos) + { + sb_next = StackPos->next; + xf_free (StackPos); + StackPos = sb_next; + } - StackPos = sb_prev; + StackPos = sb_prev; - while(StackPos) - { - sb_prev = StackPos->prev; - xf_free (StackPos); - StackPos = sb_prev; - } + while(StackPos) + { + sb_prev = StackPos->prev; + xf_free (StackPos); + StackPos = sb_prev; + } - NewStackPos = FALSE; - } + NewStackPos = FALSE; + } - return TRUE; + return TRUE; } InternalEditorStackBookMark* Editor::PointerToStackBookmark(int iIdx) { - InternalEditorStackBookMark *sb_temp=StackPos; - if (iIdx!=-1 && sb_temp) - { - while(sb_temp->prev) - sb_temp=sb_temp->prev; - for (int i=0;i!=iIdx && sb_temp;i++) - sb_temp=sb_temp->next; - } - return sb_temp; + InternalEditorStackBookMark *sb_temp=StackPos; + if (iIdx!=-1 && sb_temp) + { + while(sb_temp->prev) + sb_temp=sb_temp->prev; + for (int i=0;i!=iIdx && sb_temp;i++) + sb_temp=sb_temp->next; + } + return sb_temp; } int Editor::DeleteStackBookmark(InternalEditorStackBookMark *sb_delete) { - if (sb_delete) - { - if (sb_delete->next) - sb_delete->next->prev=sb_delete->prev; - if (sb_delete->prev) - sb_delete->prev->next=sb_delete->next; - if (StackPos==sb_delete) - StackPos=(sb_delete->next)?sb_delete->next:sb_delete->prev; - xf_free (sb_delete); - return TRUE; - } - return FALSE; + if (sb_delete) + { + if (sb_delete->next) + sb_delete->next->prev=sb_delete->prev; + if (sb_delete->prev) + sb_delete->prev->next=sb_delete->next; + if (StackPos==sb_delete) + StackPos=(sb_delete->next)?sb_delete->next:sb_delete->prev; + xf_free (sb_delete); + return TRUE; + } + return FALSE; } int Editor::GetStackBookmark(int iIdx,EditorBookMarks *Param) { - InternalEditorStackBookMark *sb_temp = PointerToStackBookmark(iIdx); + InternalEditorStackBookMark *sb_temp = PointerToStackBookmark(iIdx); - if (sb_temp && Param && !IsBadWritePtr(Param,sizeof(EditorBookMarks))) - { - if(Param->Line) Param->Line[0] =sb_temp->Line; - if(Param->Cursor) Param->Cursor[0] =sb_temp->Cursor; - if(Param->LeftPos) Param->LeftPos[0] =sb_temp->LeftPos; - if(Param->ScreenLine) Param->ScreenLine[0] =sb_temp->ScreenLine; - return TRUE; - } - return FALSE; + if (sb_temp && Param && !IsBadWritePtr(Param,sizeof(EditorBookMarks))) + { + if(Param->Line) Param->Line[0] =sb_temp->Line; + if(Param->Cursor) Param->Cursor[0] =sb_temp->Cursor; + if(Param->LeftPos) Param->LeftPos[0] =sb_temp->LeftPos; + if(Param->ScreenLine) Param->ScreenLine[0] =sb_temp->ScreenLine; + return TRUE; + } + return FALSE; } int Editor::GetStackBookmarks(EditorBookMarks *Param) { - InternalEditorStackBookMark *sb_temp=StackPos, *sb_start; - int iCount=0; + InternalEditorStackBookMark *sb_temp=StackPos, *sb_start; + int iCount=0; - if (sb_temp) - { - for (;sb_temp->prev;iCount++) - sb_temp=sb_temp->prev; - sb_start=sb_temp; - for (sb_temp=StackPos;sb_temp;iCount++) - sb_temp=sb_temp->next; + if (sb_temp) + { + for (;sb_temp->prev;iCount++) + sb_temp=sb_temp->prev; + sb_start=sb_temp; + for (sb_temp=StackPos;sb_temp;iCount++) + sb_temp=sb_temp->next; - if (Param && !IsBadReadPtr(Param,sizeof(EditorBookMarks))) - { - bool blLine = Param->Line && !IsBadWritePtr(Param->Line,iCount*sizeof(long)); - bool blCursor = Param->Cursor && !IsBadWritePtr(Param->Cursor,iCount*sizeof(long)); - bool blLeftPos = Param->LeftPos && !IsBadWritePtr(Param->LeftPos,iCount*sizeof(long)); - bool blScreenLine = Param->ScreenLine && !IsBadWritePtr(Param->ScreenLine,iCount*sizeof(long)); + if (Param && !IsBadReadPtr(Param,sizeof(EditorBookMarks))) + { + bool blLine = Param->Line && !IsBadWritePtr(Param->Line,iCount*sizeof(long)); + bool blCursor = Param->Cursor && !IsBadWritePtr(Param->Cursor,iCount*sizeof(long)); + bool blLeftPos = Param->LeftPos && !IsBadWritePtr(Param->LeftPos,iCount*sizeof(long)); + bool blScreenLine = Param->ScreenLine && !IsBadWritePtr(Param->ScreenLine,iCount*sizeof(long)); - if (blLine || blCursor || blLeftPos || blScreenLine) - { - sb_temp=sb_start; - for(int i=0;i<iCount;i++) - { - if (blLine) Param->Line[i]=sb_temp->Line; - if (blCursor) Param->Cursor[i]=sb_temp->Cursor; - if (blLeftPos) Param->LeftPos[i]=sb_temp->LeftPos; - if (blScreenLine) Param->ScreenLine[i]=sb_temp->ScreenLine; - sb_temp=sb_temp->next; - } - } - else iCount=0; - } - } - return iCount; + if (blLine || blCursor || blLeftPos || blScreenLine) + { + sb_temp=sb_start; + for(int i=0;i<iCount;i++) + { + if (blLine) Param->Line[i]=sb_temp->Line; + if (blCursor) Param->Cursor[i]=sb_temp->Cursor; + if (blLeftPos) Param->LeftPos[i]=sb_temp->LeftPos; + if (blScreenLine) Param->ScreenLine[i]=sb_temp->ScreenLine; + sb_temp=sb_temp->next; + } + } + else iCount=0; + } + } + return iCount; } Edit * Editor::GetStringByNumber(int DestLine) @@ -6233,152 +6234,152 @@ Edit *Editor::CreateString (const wchar_t *lpwszStr, int nLength) { - Edit *pEdit = new Edit (this); + Edit *pEdit = new Edit (this); - if ( pEdit ) - { - pEdit->m_next = NULL; - pEdit->m_prev = NULL; - pEdit->SetTabSize (EdOpt.TabSize); - pEdit->SetPersistentBlocks (EdOpt.PersistentBlocks); - pEdit->SetConvertTabs (EdOpt.ExpandTabs); - pEdit->SetCodePage (m_codepage); - if ( lpwszStr ) - pEdit->SetBinaryString(lpwszStr, nLength); - pEdit->SetCurPos (0); - pEdit->SetObjectColor (COL_EDITORTEXT,COL_EDITORSELECTEDTEXT); - pEdit->SetEditorMode (TRUE); - pEdit->SetWordDiv (EdOpt.strWordDiv); - } + if ( pEdit ) + { + pEdit->m_next = NULL; + pEdit->m_prev = NULL; + pEdit->SetTabSize (EdOpt.TabSize); + pEdit->SetPersistentBlocks (EdOpt.PersistentBlocks); + pEdit->SetConvertTabs (EdOpt.ExpandTabs); + pEdit->SetCodePage (m_codepage); + if ( lpwszStr ) + pEdit->SetBinaryString(lpwszStr, nLength); + pEdit->SetCurPos (0); + pEdit->SetObjectColor (COL_EDITORTEXT,COL_EDITORSELECTEDTEXT); + pEdit->SetEditorMode (TRUE); + pEdit->SetWordDiv (EdOpt.strWordDiv); + } - return pEdit; + return pEdit; } /*bool Editor::AddString (const wchar_t *lpwszStr, int nLength) { - Edit *pNewEdit = CreateString (lpwszStr, nLength); + Edit *pNewEdit = CreateString (lpwszStr, nLength); - if ( !pNewEdit ) - return false; + if ( !pNewEdit ) + return false; - if ( !TopList || !NumLastLine ) //??? - TopList = EndList = TopScreen = CurLine = pNewEdit; - else - { - Edit *PrevPtr; + if ( !TopList || !NumLastLine ) //??? + TopList = EndList = TopScreen = CurLine = pNewEdit; + else + { + Edit *PrevPtr; - EndList->m_next = pNewEdit; + EndList->m_next = pNewEdit; - PrevPtr = EndList; - EndList = EndList->m_next; - EndList->m_prev = PrevPtr; - EndList->m_next = NULL; - } + PrevPtr = EndList; + EndList = EndList->m_next; + EndList->m_prev = PrevPtr; + EndList->m_next = NULL; + } - NumLastLine++; + NumLastLine++; - return true; + return true; }*/ Edit *Editor::InsertString (const wchar_t *lpwszStr, int nLength, Edit *pAfter) { - Edit *pNewEdit = CreateString (lpwszStr, nLength); + Edit *pNewEdit = CreateString (lpwszStr, nLength); - if ( pNewEdit ) - { - if ( !TopList || !NumLastLine ) //??? - TopList = EndList = TopScreen = CurLine = pNewEdit; - else - { - Edit *pWork = pAfter?pAfter:EndList; + if ( pNewEdit ) + { + if ( !TopList || !NumLastLine ) //??? + TopList = EndList = TopScreen = CurLine = pNewEdit; + else + { + Edit *pWork = pAfter?pAfter:EndList; - Edit *pNext = pWork->m_next; + Edit *pNext = pWork->m_next; - pNewEdit->m_next = pNext; - pNewEdit->m_prev = pWork; + pNewEdit->m_next = pNext; + pNewEdit->m_prev = pWork; - pWork->m_next = pNewEdit; + pWork->m_next = pNewEdit; - if ( pNext ) - pNext->m_prev = pNewEdit; + if ( pNext ) + pNext->m_prev = pNewEdit; - if ( !pAfter ) - EndList = pNewEdit; - } + if ( !pAfter ) + EndList = pNewEdit; + } - NumLastLine++; - } + NumLastLine++; + } - return pNewEdit; + return pNewEdit; } void Editor::SetCacheParams (EditorCacheParams *pp) { - memcpy (&SavePos, &pp->SavePos, sizeof (InternalEditorBookMark)); + memcpy (&SavePos, &pp->SavePos, sizeof (InternalEditorBookMark)); - //m_codepage = pp->Table; //BUGBUG!!!, LoadFile do it itself + //m_codepage = pp->Table; //BUGBUG!!!, LoadFile do it itself - if ( pp->ScreenLine > ObjHeight)//ScrY //BUGBUG - pp->ScreenLine=ObjHeight;//ScrY; + if ( pp->ScreenLine > ObjHeight)//ScrY //BUGBUG + pp->ScreenLine=ObjHeight;//ScrY; - if ( pp->Line >= pp->ScreenLine) - { - Lock (); - GoToLine (pp->Line-pp->ScreenLine); - TopScreen = CurLine; + if ( pp->Line >= pp->ScreenLine) + { + Lock (); + GoToLine (pp->Line-pp->ScreenLine); + TopScreen = CurLine; - for (int I=0; I < pp->ScreenLine; I++) - ProcessKey(KEY_DOWN); + for (int I=0; I < pp->ScreenLine; I++) + ProcessKey(KEY_DOWN); - CurLine->SetTabCurPos(pp->LinePos); - CurLine->SetLeftPos(pp->LeftPos); + CurLine->SetTabCurPos(pp->LinePos); + CurLine->SetLeftPos(pp->LeftPos); - Unlock (); - } + Unlock (); + } } void Editor::GetCacheParams (EditorCacheParams *pp) { - memset (pp, 0, sizeof (EditorCacheParams)); + memset (pp, 0, sizeof (EditorCacheParams)); - pp->Line = NumLine; - pp->ScreenLine = CalcDistance(TopScreen, CurLine,-1); - pp->LinePos = CurLine->GetTabCurPos(); - pp->LeftPos = CurLine->GetLeftPos(); + pp->Line = NumLine; + pp->ScreenLine = CalcDistance(TopScreen, CurLine,-1); + pp->LinePos = CurLine->GetTabCurPos(); + pp->LeftPos = CurLine->GetLeftPos(); - pp->Table = m_codepage; //BUGBUG + pp->Table = m_codepage; //BUGBUG - if( Opt.EdOpt.SaveShortPos ) - memcpy (&pp->SavePos, &SavePos, sizeof (InternalEditorBookMark)); + if( Opt.EdOpt.SaveShortPos ) + memcpy (&pp->SavePos, &SavePos, sizeof (InternalEditorBookMark)); } bool Editor::SetCodePage (int codepage) { - if ( m_codepage != codepage ) + if ( m_codepage != codepage ) { - m_codepage = codepage; + m_codepage = codepage; - Edit *current = TopList; + Edit *current = TopList; - while ( current ) - { - current->SetCodePage (m_codepage); - current = current->m_next; - } + while ( current ) + { + current->SetCodePage (m_codepage); + current = current->m_next; + } - Show (); + Show (); - return true; - } + return true; + } - return false; + return false; } int Editor::GetCodePage () { - return m_codepage; + return m_codepage; } @@ -6392,7 +6393,7 @@ int Editor::GetOvertypeMode() { - return 0; + return 0; } void Editor::SetEditBeyondEnd(int Mode) @@ -6405,35 +6406,35 @@ int Editor::GetClearFlag(void) { - return 0; + return 0; } int Editor::GetCurCol() { - return CurLine->GetCurPos(); + return CurLine->GetCurPos(); } void Editor::SetCurPos(int NewCol, int NewRow) { - Lock (); - GoToLine(NewRow); - CurLine->SetTabCurPos(NewCol); - //CurLine->SetLeftPos(LeftPos); ??? - Unlock (); + Lock (); + GoToLine(NewRow); + CurLine->SetTabCurPos(NewCol); + //CurLine->SetLeftPos(LeftPos); ??? + Unlock (); } void Editor::SetCursorType(int Visible,int Size) { - CurLine->SetCursorType(Visible,Size); //??? + CurLine->SetCursorType(Visible,Size); //??? } void Editor::GetCursorType(int &Visible,int &Size) { - CurLine->GetCursorType(Visible,Size); //??? + CurLine->GetCursorType(Visible,Size); //??? } void Editor::SetObjectColor(int Color,int SelColor,int ColorUnChanged) { - for (Edit *CurPtr=TopList;CurPtr!=NULL;CurPtr=CurPtr->m_next) //??? - CurPtr->SetObjectColor (Color,SelColor,ColorUnChanged); + for (Edit *CurPtr=TopList;CurPtr!=NULL;CurPtr=CurPtr->m_next) //??? + CurPtr->SetObjectColor (Color,SelColor,ColorUnChanged); } |
|
прицепил restore.diff. там есть запоминание между сессиями редактирования. |
|
Думал по поводу дефолтного значения этой опции. Я поставил в false - то есть не выделять, чтобы сохранить поведение с предыдущим. Но думается, что лучше поставить в true, чтобы по дефолту выделялось. Так должно быть удобнее. |
|
после 511 |
|
вроде все гут. можно закрывать. |
|
патч некорректно работает. |
|
пробуем здесь - build 768 |
|
А что если ещё добавить сохранение режима "[x] Select found" между сессиями Far'a? Есть ли противники? |
Date Modified | Username | Field | Change |
---|---|---|---|
2008-06-07 03:40 | bitomaxsp | New Issue | |
2008-06-07 03:40 | bitomaxsp | Status | new => assigned |
2008-06-07 03:40 | bitomaxsp | Assigned To | => vskirdin |
2008-06-07 03:40 | bitomaxsp | File Added: selfnd.patch | |
2008-06-09 06:01 | vskirdin | Note Added: 0001563 | |
2008-06-09 06:01 | vskirdin | Status | assigned => feedback |
2008-06-09 06:28 | DiRTy_GaRRy | Note Added: 0001564 | |
2008-06-15 21:53 | bitomaxsp | File Added: restore.patch | |
2008-06-15 21:54 | bitomaxsp | Note Added: 0001592 | |
2008-06-16 04:40 | bitomaxsp | Note Added: 0001598 | |
2008-06-17 06:43 | vskirdin | Note Added: 0001602 | |
2008-06-17 09:19 | bitomaxsp | Status | feedback => resolved |
2008-06-17 09:19 | bitomaxsp | Resolution | open => fixed |
2008-06-17 09:19 | bitomaxsp | Note Added: 0001605 | |
2008-06-17 09:26 | vskirdin | Build | => 511 |
2008-06-17 09:26 | vskirdin | Status | resolved => closed |
2008-06-17 09:26 | vskirdin | Fixed in Version | => 1.80 alpha 1 |
2009-02-08 15:01 | vskirdin | Relationship added | child of 0000711 |
2009-02-08 15:16 | vskirdin | Note Added: 0002390 | |
2009-02-08 15:16 | vskirdin | Status | closed => assigned |
2009-02-08 15:23 | vskirdin | Note Added: 0002391 | |
2009-02-08 15:23 | vskirdin | Status | assigned => feedback |
2009-02-09 07:28 | Denis | Note Added: 0002395 | |
2009-02-11 13:15 | vskirdin | Relationship deleted | child of 0000711 |
2009-09-03 21:39 | alexy | Build | 511 => 1104 |
2009-09-03 21:39 | alexy | Status | feedback => closed |
2009-09-03 21:39 | alexy | Fixed in Version | 1.80 alpha 1 => 2.0 |