View Issue Details

IDProjectCategoryView StatusLast Update
0002096WishesEditorpublic2013-02-03 00:33
ReporterDAtaMan Assigned Tovskirdin  
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0002096: Навигация по тексту в меню результатов поиска
DescriptionВ приложенном editor.cpp в это меню добавлены следующие возможности:

- если включено "Выделять найденное", то после нажатия Enter найденное выделяется :)
- Ctrl-Enter позиционирует курсор на найденный текст и выделяет его, если включено "Выделять найденное"
- нажатие F5 переключает размер меню
- Ctrl-Up/Down скроллирует текст редактора
- Add - устанавливает стековую закладку
- RCtrl-(0-9) - установить закладку 0..9 в текущей позиции, LCtrl-(0-9) - перейти к позиции закладки 0-9
TagsNo tags attached.
Build2677

Activities

DAtaMan

2012-05-11 07:03

reporter  

FindAllMenuV1.7z (32,020 bytes)

vskirdin

2012-05-11 07:31

administrator   bugnote:0009143

Патч давай. И приплюсуй сюда же патч для FarEng.hlf.m4 и FarRus.hlf.m4 (это намёк про F1 в этом списке в виде отдельного раздела).
В принципе неплохо бы так же в разделе @EditorSearch про кнопку All (со ссылкой на новый раздел) что нить сказать.
Иначе неполноценно получается.

DAtaMan

2012-05-11 07:34

reporter   bugnote:0009144

Ок, но только вечером.
А пока так, "на попробовать". :)

vskirdin

2012-05-11 07:40

administrator   bugnote:0009145

Подумалось... может имеет смысл для Ctrl-Enter добавить так же перемещалку по пунктам меню?
Стоим на первом пункте в этом списке. Жмакнули Ctrl-Enter - редактор позиционируется на найденное, а курсор списка перемещается на второй.

DAtaMan

2012-05-11 07:45

reporter   bugnote:0009148

Last edited: 2012-05-11 07:46

Намакросить же можно. :-)

Всё руки не доходят назначить гуиды для всех меню - давно пора.

DAtaMan

2012-05-15 20:14

reporter  

FindAllV1.diff (7,514 bytes)   
Index: FarRus.hlf.m4
===================================================================
--- FarRus.hlf.m4	(revision 8050)
+++ FarRus.hlf.m4	(working copy)
@@ -2945,7 +2945,26 @@
 
       #Выделять найденное#   - ^<wrap>найденные последовательности будут выделены.
 
+    При нажатии кнопки #Всё# будет показано ~меню~@FindAllMenu@ с результатами поиска всех вхождений.
 
+@FindAllMenu
+$ #Редактор: меню с результатами поиска всех вхождений#
+    В этом меню доступны следующие сочетания клавиш:
+
+      #F5#                   - переключить размер меню
+
+      #Ctrl-Up, Ctrl-Down#   - скроллировать текст редактора
+
+      #Ctrl-Enter#           - перейти к позиции найденного текста
+
+      #Add#                  - добавить стековую закладку с текущей позицией
+
+      #ПравыйCtrl-0..9#      - установить закладку 0..9 в текущей позиции
+
+      #Ctrl-Shift-0..9#      - установить закладку 0..9 в текущей позиции
+
+      #ЛевыйCtrl-0..9#       - перейти к позиции закладки 0..9
+
 @FileOpenCreate
 $ #Редактор: Открыть/создать файл#
     С помощью комбинации #Shift-F4# можно открыть существующий или
Index: farlang.templ.m4
===================================================================
--- farlang.templ.m4	(revision 8050)
+++ farlang.templ.m4	(working copy)
@@ -5040,6 +5040,16 @@
 "Frecuencia: %1, líneas: %2"
 "Nájdených: %1, riadky: %2"
 
+MEditFindAllMenuFooter
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+"F1, F5, Ctrl-Enter, Ctrl-Up/Down, Add"
+
 MEditNotFound
 "Строка не найдена"
 "Could not find the string"
Index: editor.cpp
===================================================================
--- editor.cpp	(revision 8050)
+++ editor.cpp	(working copy)
@@ -3745,6 +3745,7 @@
 	{
 		UINT Line;
 		UINT Pos;
+		UINT SearchLen;
 	};
 
 	VMenu FindAllList(L"", nullptr, 0);
@@ -3839,7 +3840,7 @@
 
 					MenuItemEx Item = {};
 					Item.strName = FormatString() << fmt::LeftAlign() << fmt::Width(11) << fmt::Precision(11) << fmt::FillChar(L' ') << (FormatString() << NewNumLine+1 << L':' << CurPos+1) << BoxSymbols[BS_V1] << CurPtr->GetStringAddr() + CurPos;
-					FindCoord coord = {(UINT)NewNumLine, (UINT)CurPos};
+					FindCoord coord = {(UINT)NewNumLine, (UINT)CurPos, (UINT)SearchLength};
 					Item.UserData = &coord;
 					Item.UserDataSize = sizeof(coord);
 					FindAllList.AddItem(&Item);
@@ -4094,19 +4095,92 @@
 	{
 		FindAllList.SetFlags(VMENU_WRAPMODE|VMENU_SHOWAMPERSAND);
 		FindAllList.SetPosition(-1, -1, 0, 0);
-		FindAllList.SetBottomTitle(LangString(MEditSearchStatistics) << FindAllList.GetItemCount() << AllRefLines);
+		FindAllList.SetTitle(LangString(MEditSearchStatistics) << FindAllList.GetItemCount() << AllRefLines);
+		FindAllList.SetBottomTitle(LangString(MEditFindAllMenuFooter));
+		FindAllList.SetHelp(L"FindAllMenu");
 		FindAllList.Show();
+		int SelectedPos;
+		DWORD Key=0;
+		FindCoord* coord;
+		bool MenuZoomed=true;
 		while (!FindAllList.Done())
 		{
-			FindAllList.ReadInput();
+			SelectedPos=FindAllList.GetSelectPos();
+			Key=FindAllList.ReadInput();
+			switch (Key)
+			{
+				case KEY_ADD:
+					AddSessionBookmark();
+					break;
+				case KEY_CTRLENTER:
+				case KEY_RCTRLENTER:
+					coord = reinterpret_cast<FindCoord*>(FindAllList.GetUserData(nullptr, 0, SelectedPos));
+					GoToLine(coord->Line);
+					CurLine->SetCurPos(coord->Pos);
+					if (SelectFound)
+					{
+						Pasting++;
+						Lock();
+						// if (!EdOpt.PersistentBlocks)
+						UnmarkBlock();
+						Flags.Set(FEDITOR_MARKINGBLOCK);
+						CurLine->Select(coord->Pos, coord->Pos+coord->SearchLen);
+						BlockStart = CurLine;
+						BlockStartLine = coord->Line;
+						Unlock();
+						Pasting--;
+						Show();
+					}
+					FindAllList.Show();
+					break;
+				case KEY_CTRLUP: case KEY_RCTRLUP:
+				case KEY_CTRLDOWN: case KEY_RCTRLDOWN:
+					ProcessKey(Key);
+					FindAllList.Show();
+					break;
+				case KEY_F5:
+					MenuZoomed=!MenuZoomed;
+					if(MenuZoomed)
+					{
+						FindAllList.SetPosition(-1, -1, 0, 0);
+					}
+					else
+					{
+						FindAllList.SetPosition(-1, ScrY-20, 0, ScrY-10);
+					}
+					Show();
+					FindAllList.Show();
+					break;
+			default:
+				if ((Key>=KEY_CTRL0 && Key<=KEY_CTRL9) || (Key>=KEY_RCTRL0 && Key<=KEY_RCTRL9) ||
+				   (Key>=KEY_CTRLSHIFT0 && Key<=KEY_CTRLSHIFT9) || (Key>=KEY_RCTRLSHIFT0 && Key<=KEY_RCTRLSHIFT9))
+				{
+					ProcessKey(Key);
+					FindAllList.Show();
+				}
 			FindAllList.ProcessInput();
+				break;
+			}
 		}
 		int ExitCode = FindAllList.GetExitCode();
 		if(ExitCode >= 0)
 		{
-			FindCoord* coord = reinterpret_cast<FindCoord*>(FindAllList.GetUserData(nullptr, 0, ExitCode));
+			coord = reinterpret_cast<FindCoord*>(FindAllList.GetUserData(nullptr, 0, ExitCode));
 			GoToLine(coord->Line);
 			CurLine->SetCurPos(coord->Pos);
+			if (SelectFound)
+			{
+				Pasting++;
+				Lock();
+				// if (!EdOpt.PersistentBlocks)
+				UnmarkBlock();
+				Flags.Set(FEDITOR_MARKINGBLOCK);
+				CurLine->Select(coord->Pos, coord->Pos+coord->SearchLen);
+				BlockStart = CurLine;
+				BlockStartLine = coord->Line;
+				Unlock();
+				Pasting--;
+			}
 		}
 	}
 
Index: FarEng.hlf.m4
===================================================================
--- FarEng.hlf.m4	(revision 8050)
+++ FarEng.hlf.m4	(working copy)
@@ -2868,8 +2868,26 @@
     The following option is available in search dialog only:
 
       #Select found#        - ^<wrap>found text is selected
+    При нажатии кнопки #Всё# будет показано ~меню~@FindAllMenu@ с результатами поиска всех вхождений.
 
+@FindAllMenu
+$ #Редактор: меню с результатами поиска всех вхождений#
+    В этом меню доступны следующие сочетания клавиш:
 
+      #F5#                   - переключить размер меню
+
+      #Ctrl-Up, Ctrl-Down#   - скроллировать текст редактора
+
+      #Ctrl-Enter#           - перейти к позиции найденного текста
+
+      #Add#                  - добавить стековую закладку с текущей позицией
+
+      #ПравыйCtrl-0..9#      - установить закладку 0..9 в текущей позиции
+
+      #Ctrl-Shift-0..9#      - установить закладку 0..9 в текущей позиции
+
+      #ЛевыйCtrl-0..9#       - перейти к позиции закладки 0..9
+
 @FileOpenCreate
 $ #Editor: Open/Create file#
     With #Shift-F4#, one can open the existing file or create a new file.
FindAllV1.diff (7,514 bytes)   

DAtaMan

2012-05-15 20:16

reporter   bugnote:0009207

Приложил diff.

vskirdin

2012-05-16 06:27

administrator   bugnote:0009210

build 2677

DAtaMan

2012-05-16 09:10

reporter   bugnote:0009211

line 4109: CtrlObject->Macro.SetMode(MACRO_MENU);
Это не моё :)
Может вынести из цикла повыше?

vskirdin

2012-05-16 11:12

administrator   bugnote:0009216

Это я добавил (таа же как и реакцию на распахивание консольного окна)
Думаю не стоит выносить повыше... :-)

DAtaMan

2012-05-16 12:24

reporter   bugnote:0009217

Ok, не стоит. :)

По поводу F5: может завести в настройках пару параметров? (например, верхнюю Y-координату и высоту меню. Либо, как сейчас - минус N строк от высоты окна Far и сколько строк показывать)

DAtaMan

2012-06-08 13:46

reporter   bugnote:0009323

Ну раз нет замечаний/других идей... :)

Issue History

Date Modified Username Field Change
2012-05-11 07:03 DAtaMan New Issue
2012-05-11 07:03 DAtaMan File Added: FindAllMenuV1.7z
2012-05-11 07:31 vskirdin Note Added: 0009143
2012-05-11 07:34 DAtaMan Note Added: 0009144
2012-05-11 07:40 vskirdin Note Added: 0009145
2012-05-11 07:45 DAtaMan Note Added: 0009148
2012-05-11 07:46 DAtaMan Note Edited: 0009148
2012-05-15 20:14 DAtaMan File Added: FindAllV1.diff
2012-05-15 20:16 DAtaMan Note Added: 0009207
2012-05-16 06:27 vskirdin Note Added: 0009210
2012-05-16 06:27 vskirdin Assigned To => vskirdin
2012-05-16 06:27 vskirdin Status new => feedback
2012-05-16 09:10 DAtaMan Note Added: 0009211
2012-05-16 09:10 DAtaMan Status feedback => assigned
2012-05-16 11:12 vskirdin Note Added: 0009216
2012-05-16 11:12 vskirdin Status assigned => feedback
2012-05-16 12:24 DAtaMan Note Added: 0009217
2012-05-16 12:24 DAtaMan Status feedback => assigned
2012-06-08 13:46 DAtaMan Note Added: 0009323
2012-06-08 13:46 DAtaMan Status assigned => resolved
2012-06-09 04:57 vskirdin Build => 2677
2012-06-09 04:57 vskirdin Status resolved => closed
2012-06-09 04:57 vskirdin Resolution open => fixed
2012-06-09 04:57 vskirdin Fixed in Version => 3.0
2013-02-03 00:33 alexy Severity minor => feature