View Issue Details

IDProjectCategoryView StatusLast Update
0000796Far ManagerViewerpublic2011-04-15 03:37
ReporterchupakabraAssigned Toalexy 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version 
Target VersionFixed in Version3.0 
Summary0000796: Viewer и поведение клавиши End
DescriptionПри просмотре некоторых файлов (как правило бинарных) нажатие клавиши End перемещает позицию не в конец файла, а к примеру на 86%.
TagsNo tags attached.
Build1934

Activities

ujos

2009-03-21 17:42

reporter   bugnote:0002814

100% - это самый конец файла. А 86%, наверное, считается с верхнего байта в окне.

ujos

2009-03-21 17:44

reporter   bugnote:0002815

Таки да. End докручивает не до конца.

Ariman

2009-03-23 15:47

reporter   bugnote:0002821

Это скорее не End недокручивает, а Up не так крутит (вызывается при обработке End-а). Причем в файлах, в основном в UTF-8. Можно убедиться, если поскролить вверх/вниз.

vskirdin

2009-04-17 13:37

administrator   bugnote:0002965

chupakabra, проверь после build 872 (здесь 830 и 810 решены)

chupakabra

2009-04-17 15:23

developer   bugnote:0002968

Прокручивает до конца, но проценты может вывести неверно, к примеру может показать 99% вместо положенных 100%. Также клавишей "стрелка вниз" можно прокрутить файл на одну или несколько строк, чего по идее быть не должно.
Вот пример файла: http://www.mediafire.com/file/monxtntz5cd/ntfsfile.dll

Ariman

2009-04-17 15:31

reporter   bugnote:0002969

1.75 на этом файле тоже 99% показывает.

alexy

2009-04-17 17:25

administrator   bugnote:0002971

Да это уже совсем другой баг, которому хрен знает сколько лет, может вообще всегда был.

chupakabra

2009-04-18 11:53

developer   bugnote:0002976

Оказывается, проблема проявляется только если в реестре включена опция Viewer\Wrap (в GUI её нет?). Воспроизводится практически с любым exe-файлом.

Попутно заметил мелочь: в диалоге настройки viewer'а Alt+Z перемещает на "Show scrollbar", а не в окошко "Tab size".

JohnDoe

2010-09-19 15:43

updater   bugnote:0005807

Родственные темы на форуме:
http://forum.farmanager.com/viewtopic.php?f=9&t=667
http://forum.farmanager.com/viewtopic.php?f=9&t=3970

2useven10

2011-03-24 20:41

developer  

viewer_end_test.7z (494 bytes)

2useven10

2011-03-24 20:42

developer   bugnote:0006558

WordWrap не учитывается в функции Up().

2useven10

2011-03-24 23:07

developer   bugnote:0006559

кстати будет ли кто-нибудь возражать, если поправить искусственный интеллект вьювера по определению символа конца строки (считает число сиволов <LF> и <CR>
в начале файла ~1k - точно не помню, больший признаётся концом строки)
и сделать как редакторе eoline = <CRLF>, одинончый <LF>, одиночный <CR>
при этом:
<LF><CR> == <LF> <CR>
<LF><CR><LF> == <LF> <CRLF>
<CR><CR><LF> == <CR> <CRLF>

???

alexy

2011-03-25 01:10

administrator   bugnote:0006560

ни кто не будет возвражать.
если хочешь можешь вообще вьювере переписать раз уж ты им занялся.

2useven10

2011-03-25 14:24

developer  

viewer.diff (2,419 bytes)
Index: viewer.hpp
===================================================================
--- viewer.hpp	(revision 5885)
+++ viewer.hpp	(working copy)
@@ -164,6 +164,7 @@
 
 		UINT DefCodePage;
 		int vgetc_ready;
+      __int64 EOF_Pos;
 
 	private:
 		virtual void DisplayObject();
Index: viewer.cpp
===================================================================
--- viewer.cpp	(revision 5885)
+++ viewer.cpp	(working copy)
@@ -128,6 +128,7 @@
 	bVE_READ_Sent = false;
 	Signature = false;
 	vgetc_ready = -1;
+   EOF_Pos = -1;
 }
 
 
@@ -454,7 +455,11 @@
 	if (!SelectSize)
 		SelectPos=FilePos;
 
-	switch (nMode)
+   __int64 last_filepos = -1;
+   bool eof_mode = EOF_Pos >= 0 && nMode == SHOW_RELOAD;
+   do {
+   
+   switch (nMode)
 	{
 		case SHOW_HEX:
 			CtrlObject->Plugins.CurViewer = this; //HostFileViewer;
@@ -473,6 +478,13 @@
 				ReadString(Strings[I],-1,MAX_VIEWLINEB);
 			}
 
+         if (eof_mode)
+         {
+            last_filepos = vtell();
+            eof_mode = last_filepos < EOF_Pos;
+            if (eof_mode)
+               nMode = SHOW_DOWN;
+         }
 			break;
 		case SHOW_UP:
 
@@ -506,8 +518,20 @@
 			ReadString(Strings[Y2-Y1],-1,MAX_VIEWLINEB);
 			Strings[Y2-Y1]->nFilePos = vtell();
 			ReadString(Strings[Y2-Y1],-1,MAX_VIEWLINEB);
+
+         if (eof_mode)
+         {
+            __int64 fpos = vtell();
+            if (fpos >= EOF_Pos || fpos <= last_filepos)
+            {
+               eof_mode = false; nMode = SHOW_RELOAD;
+            }
+            else
+               last_filepos = fpos;
+         }
 			break;
 	}
+   } while ( eof_mode );
 
 	if (nMode != SHOW_HEX)
 	{
@@ -676,7 +700,7 @@
 
 					if (!X)
 					{
-						*OutStr=0;
+						*OutStr = L'\0';
 						break;
 					}
 
@@ -721,7 +745,7 @@
 
 			if (!nr)
 			{
-				*OutStr=0;
+				*OutStr = L'\0';
 			}
 			else
 			{
@@ -816,7 +840,7 @@
 
 					if (!X)
 					{
-						*OutStr=0;
+						*OutStr = L'\0';
 						break;
 					}
 
@@ -1796,6 +1820,8 @@
 				}
 
 				FilePos=vtell();
+            if (!VM.Hex && VM.Wrap && VM.WordWrap)
+               EOF_Pos = FilePos; //!!! hack to adjust possible incorrect last page show
 
 				/*
 				        {
@@ -1826,6 +1852,7 @@
 				        }
 				*/
 				Show();
+            EOF_Pos = -1;
 //        LastSelPos=FilePos;
 			}
 
viewer.diff (2,419 bytes)

2useven10

2011-03-25 14:26

developer   bugnote:0006562

фикс выложил. концы строк оставил как есть.
переписать конечно можно, но для этого нужно время...

alexy

2011-03-25 15:56

administrator   bugnote:0006563

на будущее, пожалуйста используй табы для индентации, а не пробелы.

2useven10

2011-03-25 16:11

developer   bugnote:0006564

с этим сложно. для меня это неудобно. во всех остальных моих проектах стандартно замена табов на пробелы... (долго боролся с противниками :) но постараюсь не забыть...

alexy

2011-03-28 00:57

administrator   bugnote:0006584

1934

2useven10

2011-03-30 12:16

developer   bugnote:0006639

общий патч: http://bugs.farmanager.com/view.php?id=1031#bugnotes

Issue History

Date Modified Username Field Change
2009-03-21 12:53 chupakabra New Issue
2009-03-21 17:42 ujos Note Added: 0002814
2009-03-21 17:44 ujos Note Added: 0002815
2009-03-23 15:47 Ariman Note Added: 0002821
2009-04-17 13:37 vskirdin Note Added: 0002965
2009-04-17 15:23 chupakabra Note Added: 0002968
2009-04-17 15:31 Ariman Note Added: 0002969
2009-04-17 17:25 alexy Note Added: 0002971
2009-04-18 11:53 chupakabra Note Added: 0002976
2009-08-28 19:54 chupakabra Status new => assigned
2009-08-28 19:54 chupakabra Assigned To => chupakabra
2010-09-14 22:39 chupakabra Assigned To chupakabra =>
2010-09-14 22:39 chupakabra Status assigned => new
2010-09-19 15:43 JohnDoe Note Added: 0005807
2011-03-24 20:41 2useven10 File Added: viewer_end_test.7z
2011-03-24 20:42 2useven10 Note Added: 0006558
2011-03-24 23:07 2useven10 Note Added: 0006559
2011-03-25 01:10 alexy Note Added: 0006560
2011-03-25 01:11 alexy Assigned To => alexy
2011-03-25 01:11 alexy Status new => assigned
2011-03-25 14:24 2useven10 File Added: viewer.diff
2011-03-25 14:26 2useven10 Note Added: 0006562
2011-03-25 15:56 alexy Note Added: 0006563
2011-03-25 16:11 2useven10 Note Added: 0006564
2011-03-28 00:57 alexy Note Added: 0006584
2011-03-28 00:57 alexy Status assigned => feedback
2011-03-30 12:16 2useven10 Note Added: 0006639
2011-04-15 03:37 alexy Build => 1934
2011-04-15 03:37 alexy Status feedback => closed
2011-04-15 03:37 alexy Resolution open => fixed
2011-04-15 03:37 alexy Fixed in Version => 3.0