View Issue Details

IDProjectCategoryView StatusLast Update
0000547Far ManagerEditorpublic2009-09-03 21:39
Reporterbitomaxsp Assigned Tovskirdin  
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionfixed 
Fixed in Version2.0 
Summary0000547: Выделение найденных фрагментов при поиске
DescriptionДобавил возможность выделения найденного в редакторе. Теперь в диалоге есть галочка "Выделять найденное". Если она стоит, то происходит выделение найденного фрагмента, курсор становится в конце выделения. Если включена опция "Постоянные блоки" и если перед началом поиска выделен блок, то выделение снимается. По дефолту галочка снята, то есть поиск происходит без выделения. Очень удобная штука, с учетом того, что обычно не видно что найдено, так как курсор маленький и мигает. Любые пожелания критика - только за. Diff прицепил.
TagsNo tags attached.
Build1104

Activities

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;
 }
selfnd.patch (9,433 bytes)   

vskirdin

2008-06-09 06:01

administrator   bugnote:0001563

см. 498

DiRTy_GaRRy

2008-06-09 06:28

developer   bugnote:0001564

Значение опции не запоминается.

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.patch (23,844 bytes)   

bitomaxsp

2008-06-15 21:54

reporter   bugnote:0001592

прицепил restore.diff. там есть запоминание между сессиями редактирования.

bitomaxsp

2008-06-16 04:40

reporter   bugnote:0001598

Думал по поводу дефолтного значения этой опции. Я поставил в false - то есть не выделять, чтобы сохранить поведение с предыдущим. Но думается, что лучше поставить в true, чтобы по дефолту выделялось. Так должно быть удобнее.

vskirdin

2008-06-17 06:43

administrator   bugnote:0001602

после 511

bitomaxsp

2008-06-17 09:19

reporter   bugnote:0001605

вроде все гут. можно закрывать.

vskirdin

2009-02-08 15:16

administrator   bugnote:0002390

патч некорректно работает.

vskirdin

2009-02-08 15:23

administrator   bugnote:0002391

пробуем здесь - build 768

Denis

2009-02-09 07:28

reporter   bugnote:0002395

А что если ещё добавить сохранение режима "[x] Select found" между сессиями Far'a? Есть ли противники?

Issue History

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