View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001390 | Far Manager | Interface | public | 2010-05-23 03:23 | 2020-01-03 08:46 |
Reporter | alexmitin | Assigned To | |||
Priority | normal | Severity | major | Reproducibility | always |
Status | feedback | Resolution | open | ||
Platform | x86 | OS | Windows | OS Version | XP SP3 |
Product Version | 2.0 | ||||
Summary | 0001390: После Alt+F9, Alt+F9 появляются горизонтальный и вертикальный скроллбары | ||||
Description | После Alt+F9, Alt+F9 появляются горизонтальный и вертикальный скроллбары. Воспроизведение: 1) Нажать Alt+F9, чтобы максимизировать окно FAR 2) Нажать Alt+F9, чтобы вернуть старый размер. Наблюдаемое: Появляются горизонтальный и вертикальные полосы прокрутки. Желаемое: Окно FAR возвращается в прежний размер без полос прокрутки. Причина: Не восстанавливается Screen Buffer Size. | ||||
Additional Information | FAR 2.0 (build 1566) x86 | ||||
Tags | WindowMode | ||||
Build | |||||
has duplicate | 0003692 | new | после перехода в полный экран alt+enter и возвращения в обычный - не восстанавливается вид |
|
Полосы прокрутки появляются при WindowMode=1. [HKEY_CURRENT_USER\Software\Far2\System] "WindowMode"=dword:00000001 |
|
Ну так это так и задумано. В этом режиме фар не пытается управлять буфером. |
|
Это не совсем верно. При первом нажатии Alt+F9 (максимизация окна) функция console::SetSize() изменяет размер буфера консоли путем вызова SetConsoleScreenBufferSize(). А вот при втором нажатии Alt+F9 (восстановление прежнего размера) функция console::SetSize() уже не вызывает SetConsoleScreenBufferSize(). Это и приводит к появлению полос прокрутки. Функция: bool console::SetSize(COORD Size) { bool Result=false; if(Opt.WindowMode) { CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(GetOutputHandle(), &csbi); csbi.srWindow.Left=0; csbi.srWindow.Right=Size.X-1; csbi.srWindow.Bottom=csbi.dwSize.Y-1; csbi.srWindow.Top=csbi.srWindow.Bottom-(Size.Y-1); COORD WindowCoord={csbi.srWindow.Right-csbi.srWindow.Left+1, csbi.srWindow.Bottom-csbi.srWindow.Top+1}; if(WindowCoord.X>csbi.dwSize.X || WindowCoord.Y>csbi.dwSize.Y) { WindowCoord.X=Max(WindowCoord.X,csbi.dwSize.X); WindowCoord.Y=Max(WindowCoord.Y,csbi.dwSize.Y); SetConsoleScreenBufferSize(GetOutputHandle(), WindowCoord); } Result=SetWindowRect(csbi.srWindow); } else { Result=SetConsoleScreenBufferSize(GetOutputHandle(), Size)!=FALSE; } return Result; } |
|
Предлагаемое исправление: bool console::SetSize(COORD Size) { ... if(WindowCoord.X != csbi.dwSize.X || WindowCoord.Y>csbi.dwSize.Y) { //WindowCoord.X=Min(WindowCoord.X,csbi.dwSize.X); WindowCoord.Y=Max(WindowCoord.Y,csbi.dwSize.Y); SetConsoleScreenBufferSize(GetOutputHandle(), WindowCoord); } ... } Тестировалось с такими параметрами. 1) Far.exe -w 2) ScreenBufferSize=(150,9999) 3) WindowSize=(150,50) Изначально окно FAR содержит вертикальную полосу прокрутки. Первое нажатие Alt+F9 разворачивает окно на весь экран. Второе - возвращает окно в прежний вид. Горизонтальная полоса прокрутки не появляется. Возможный побочный эффект: при восстановлении размера окна, если до этого был вывод при развернутом окне, вывод обрезается до нового горизонтального размера окна. Если это не удобно - поведение можно сделать настраиваемым. Т.е. что-то вроде: if( Opt.WindowModePreserveScreenBuffer ) { if(WindowCoord.X>csbi.dwSize.X || WindowCoord.Y>csbi.dwSize.Y) { WindowCoord.X=Max(WindowCoord.X,csbi.dwSize.X); WindowCoord.Y=Max(WindowCoord.Y,csbi.dwSize.Y); SetConsoleScreenBufferSize(GetOutputHandle(), WindowCoord); } } else { if(WindowCoord.X != csbi.dwSize.X || WindowCoord.Y>csbi.dwSize.Y) { WindowCoord.Y=Max(WindowCoord.Y,csbi.dwSize.Y); SetConsoleScreenBufferSize(GetOutputHandle(), WindowCoord); } } |
|
Возможен и другой вариант реализации: макросом. При условии что будут реализованы соответствующие макрофункции. (http://forum.farmanager.com/viewtopic.php?p=63358#p63358) |
|
Чем именно макрос может помочь? Действие, аналогичное Alt+F9 (максимизация) можно сделать дважды нажав левой кнопкой мышки на заголовок окна. Поведение при этом ожидается аналогичное однократному нажатию Alt+F9. Как при двойном нажатии на заголовок окна вызовется макрос? |
|
После двойного нажатия на заголовок макрос можно и вручную вызвать. Это лучше чем нечаянно потерять часть буфера. P.S. Попрошу заметить, что в текущей реализации ваше пожелание абсолютно справедливо, потому что буфер и так теряется на каждый чих. Но, надеюсь, DrKnS найдёт время пофиксить это. |
|
Хочу развить идею alexmitin дальше: >Возможный побочный эффект: при восстановлении размера окна, если до этого был >вывод при развернутом окне, вывод обрезается до нового горизонтального размера >окна. >Если это не удобно - поведение можно сделать настраиваемым. Не надо никаких настроек: этого побочного эффекта можно будет избежать и так. Всего лишь перед усечением нужно выяснить размер самой длинной строки буфера. В крайнем случае, думаю можно это и плагином делать. (Взять за основу http://forum.farmanager.com/viewtopic.php?p=53289#p53289) |
|
аналогичная проблема - только с вертикальной полосой прокрутки https://bugs.farmanager.com/view.php?id=3692 только с alt+enter, alt+enter |
|
far:config System.WindowMode.StickyY = true |
|
увы не помогло System.WindowMode.StickyY = true полоса остается у меня far и так почти на весь экран, но он после выхода из полноэкрана еще выше по высоте внутри полосы прокрутки становится на 6 строк |
Date Modified | Username | Field | Change |
---|---|---|---|
2010-05-23 03:23 | alexmitin | New Issue | |
2010-05-23 03:41 | alexmitin | Note Added: 0005394 | |
2010-05-23 11:29 | JohnDoe | Note Added: 0005397 | |
2010-05-26 04:47 | alexmitin | Note Added: 0005410 | |
2010-05-26 05:20 | alexmitin | Note Added: 0005411 | |
2010-05-26 22:35 | JohnDoe | Note Added: 0005425 | |
2010-05-26 23:09 | alexmitin | Note Added: 0005426 | |
2010-05-27 09:58 | JohnDoe | Note Added: 0005427 | |
2010-05-27 09:58 | JohnDoe | Note Edited: 0005427 | |
2010-05-27 22:15 | JohnDoe | Note Added: 0005428 | |
2010-05-27 22:19 | JohnDoe | Note Edited: 0005428 | |
2017-11-02 15:59 | JohnDoe | Tag Attached: WindowMode | |
2019-01-17 09:01 | kolio | Note Added: 0016416 | |
2019-01-17 09:49 | DrKnS | Status | new => feedback |
2019-01-17 09:49 | DrKnS | Note Added: 0016419 | |
2019-02-22 08:16 | JohnDoe | Relationship added | has duplicate 0003692 |
2020-01-03 08:46 | kolio | Note Added: 0016678 |