View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000796 | Far Manager | Viewer | public | 2009-03-21 09:53 | 2011-04-15 00:37 |
Reporter | chupakabra | Assigned To | alexy | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 3.0 | ||||
Summary | 0000796: Viewer и поведение клавиши End | ||||
Description | При просмотре некоторых файлов (как правило бинарных) нажатие клавиши End перемещает позицию не в конец файла, а к примеру на 86%. | ||||
Tags | No tags attached. | ||||
Build | 1934 | ||||
|
100% - это самый конец файла. А 86%, наверное, считается с верхнего байта в окне. |
|
Таки да. End докручивает не до конца. |
|
Это скорее не End недокручивает, а Up не так крутит (вызывается при обработке End-а). Причем в файлах, в основном в UTF-8. Можно убедиться, если поскролить вверх/вниз. |
|
chupakabra, проверь после build 872 (здесь 830 и 810 решены) |
|
Прокручивает до конца, но проценты может вывести неверно, к примеру может показать 99% вместо положенных 100%. Также клавишей "стрелка вниз" можно прокрутить файл на одну или несколько строк, чего по идее быть не должно. Вот пример файла: http://www.mediafire.com/file/monxtntz5cd/ntfsfile.dll |
|
1.75 на этом файле тоже 99% показывает. |
|
Да это уже совсем другой баг, которому хрен знает сколько лет, может вообще всегда был. |
|
Оказывается, проблема проявляется только если в реестре включена опция Viewer\Wrap (в GUI её нет?). Воспроизводится практически с любым exe-файлом. Попутно заметил мелочь: в диалоге настройки viewer'а Alt+Z перемещает на "Show scrollbar", а не в окошко "Tab size". |
|
Родственные темы на форуме: http://forum.farmanager.com/viewtopic.php?f=9&t=667 http://forum.farmanager.com/viewtopic.php?f=9&t=3970 |
|
|
|
WordWrap не учитывается в функции Up(). |
|
кстати будет ли кто-нибудь возражать, если поправить искусственный интеллект вьювера по определению символа конца строки (считает число сиволов <LF> и <CR> в начале файла ~1k - точно не помню, больший признаётся концом строки) и сделать как редакторе eoline = <CRLF>, одинончый <LF>, одиночный <CR> при этом: <LF><CR> == <LF> <CR> <LF><CR><LF> == <LF> <CRLF> <CR><CR><LF> == <CR> <CRLF> ??? |
|
ни кто не будет возвражать. если хочешь можешь вообще вьювере переписать раз уж ты им занялся. |
|
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; } |
|
фикс выложил. концы строк оставил как есть. переписать конечно можно, но для этого нужно время... |
|
на будущее, пожалуйста используй табы для индентации, а не пробелы. |
|
с этим сложно. для меня это неудобно. во всех остальных моих проектах стандартно замена табов на пробелы... (долго боролся с противниками :) но постараюсь не забыть... |
|
1934 |
|
общий патч: http://bugs.farmanager.com/view.php?id=1031#bugnotes |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-03-21 09:53 | chupakabra | New Issue | |
2009-03-21 14:42 | ujos | Note Added: 0002814 | |
2009-03-21 14:44 | ujos | Note Added: 0002815 | |
2009-03-23 12:47 | Ariman | Note Added: 0002821 | |
2009-04-17 10:37 | vskirdin | Note Added: 0002965 | |
2009-04-17 12:23 | chupakabra | Note Added: 0002968 | |
2009-04-17 12:31 | Ariman | Note Added: 0002969 | |
2009-04-17 14:25 | alexy | Note Added: 0002971 | |
2009-04-18 08:53 | chupakabra | Note Added: 0002976 | |
2009-08-28 16:54 | chupakabra | Status | new => assigned |
2009-08-28 16:54 | chupakabra | Assigned To | => chupakabra |
2010-09-14 19:39 | chupakabra | Assigned To | chupakabra => |
2010-09-14 19:39 | chupakabra | Status | assigned => new |
2010-09-19 12:43 | JohnDoe | Note Added: 0005807 | |
2011-03-24 17:41 | 2useven10 | File Added: viewer_end_test.7z | |
2011-03-24 17:42 | 2useven10 | Note Added: 0006558 | |
2011-03-24 20:07 | 2useven10 | Note Added: 0006559 | |
2011-03-24 22:10 | alexy | Note Added: 0006560 | |
2011-03-24 22:11 | alexy | Assigned To | => alexy |
2011-03-24 22:11 | alexy | Status | new => assigned |
2011-03-25 11:24 | 2useven10 | File Added: viewer.diff | |
2011-03-25 11:26 | 2useven10 | Note Added: 0006562 | |
2011-03-25 12:56 | alexy | Note Added: 0006563 | |
2011-03-25 13:11 | 2useven10 | Note Added: 0006564 | |
2011-03-27 21:57 | alexy | Note Added: 0006584 | |
2011-03-27 21:57 | alexy | Status | assigned => feedback |
2011-03-30 09:16 | 2useven10 | Note Added: 0006639 | |
2011-04-15 00:37 | alexy | Build | => 1934 |
2011-04-15 00:37 | alexy | Status | feedback => closed |
2011-04-15 00:37 | alexy | Resolution | open => fixed |
2011-04-15 00:37 | alexy | Fixed in Version | => 3.0 |