diff options
Diffstat (limited to 'data/vim/patches/8.1.0940')
-rw-r--r-- | data/vim/patches/8.1.0940 | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0940 b/data/vim/patches/8.1.0940 new file mode 100644 index 000000000..c14182857 --- /dev/null +++ b/data/vim/patches/8.1.0940 @@ -0,0 +1,205 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0940 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0940 +Problem: MS-Windows console resizing not handled properly. +Solution: Handle resizing the console better. (Nobuhiro Takasaki, + closes #3968, closes #3611) +Files: src/ex_docmd.c, src/normal.c, src/os_win32.c, + src/proto/os_win32.pro + + +*** ../vim-8.1.0939/src/ex_docmd.c 2019-02-08 14:33:54.818762019 +0100 +--- src/ex_docmd.c 2019-02-17 14:53:03.973230504 +0100 +*************** +*** 9853,9858 **** +--- 9853,9861 ---- + if (need_maketitle) + maketitle(); + #endif ++ #if defined(WIN3264) && !defined(FEAT_GUI_W32) ++ resize_console_buf(); ++ #endif + RedrawingDisabled = r; + p_lz = p; + +*** ../vim-8.1.0939/src/normal.c 2019-02-16 15:09:21.209946237 +0100 +--- src/normal.c 2019-02-17 14:53:03.973230504 +0100 +*************** +*** 5401,5406 **** +--- 5401,5409 ---- + # endif + #endif + redraw_later(CLEAR); ++ #if defined(WIN3264) && !defined(FEAT_GUI_W32) ++ resize_console_buf(); ++ #endif + } + } + +*** ../vim-8.1.0939/src/os_win32.c 2019-02-17 14:10:52.105754303 +0100 +--- src/os_win32.c 2019-02-17 15:00:20.974791478 +0100 +*************** +*** 1492,1497 **** +--- 1492,1499 ---- + ui_focus_change((int)g_fJustGotFocus); + } + ++ static void ResizeConBuf(HANDLE hConsole, COORD coordScreen); ++ + /* + * Wait until console input from keyboard or mouse is available, + * or the time is up. +*************** +*** 1657,1667 **** + handle_focus_event(ir); + else if (ir.EventType == WINDOW_BUFFER_SIZE_EVENT) + { +! /* Only call shell_resized() when the size actually change to +! * avoid the screen is cleard. */ +! if (ir.Event.WindowBufferSizeEvent.dwSize.X != Columns +! || ir.Event.WindowBufferSizeEvent.dwSize.Y != Rows) + shell_resized(); + } + #ifdef FEAT_MOUSE + else if (ir.EventType == MOUSE_EVENT +--- 1659,1676 ---- + handle_focus_event(ir); + else if (ir.EventType == WINDOW_BUFFER_SIZE_EVENT) + { +! COORD dwSize = ir.Event.WindowBufferSizeEvent.dwSize; +! +! // Only call shell_resized() when the size actually change to +! // avoid the screen is cleard. +! if (dwSize.X != Columns || dwSize.Y != Rows) +! { +! CONSOLE_SCREEN_BUFFER_INFO csbi; +! GetConsoleScreenBufferInfo(g_hConOut, &csbi); +! dwSize.Y = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +! ResizeConBuf(g_hConOut, dwSize); + shell_resized(); ++ } + } + #ifdef FEAT_MOUSE + else if (ir.EventType == MOUSE_EVENT +*************** +*** 6327,6333 **** + * character was written, otherwise we get stuck. */ + if (WriteConsoleOutputCharacterW(g_hConOut, unicodebuf, length, + coord, &cchwritten) == 0 +! || cchwritten == 0) + cchwritten = 1; + } + else +--- 6336,6342 ---- + * character was written, otherwise we get stuck. */ + if (WriteConsoleOutputCharacterW(g_hConOut, unicodebuf, length, + coord, &cchwritten) == 0 +! || cchwritten == 0 || cchwritten == (DWORD)-1) + cchwritten = 1; + } + else +*************** +*** 6361,6367 **** + * character was written, otherwise we get stuck. */ + if (WriteConsoleOutputCharacter(g_hConOut, (LPCSTR)pchBuf, cbToWrite, + coord, &written) == 0 +! || written == 0) + written = 1; + } + else +--- 6370,6376 ---- + * character was written, otherwise we get stuck. */ + if (WriteConsoleOutputCharacter(g_hConOut, (LPCSTR)pchBuf, cbToWrite, + coord, &written) == 0 +! || written == 0 || written == (DWORD)-1) + written = 1; + } + else +*************** +*** 7707,7713 **** + + } + +! #ifndef FEAT_GUI_W32 + + static void + vtp_init(void) +--- 7716,7722 ---- + + } + +! #if !defined(FEAT_GUI_W32) || defined(PROTO) + + static void + vtp_init(void) +*************** +*** 7931,7933 **** +--- 7940,7967 ---- + { + return conpty_stable; + } ++ ++ #if !defined(FEAT_GUI_W32) || defined(PROTO) ++ void ++ resize_console_buf(void) ++ { ++ CONSOLE_SCREEN_BUFFER_INFO csbi; ++ COORD coord; ++ SMALL_RECT newsize; ++ ++ if (GetConsoleScreenBufferInfo(g_hConOut, &csbi)) ++ { ++ coord.X = SRWIDTH(csbi.srWindow); ++ coord.Y = SRHEIGHT(csbi.srWindow); ++ SetConsoleScreenBufferSize(g_hConOut, coord); ++ ++ newsize.Left = 0; ++ newsize.Top = 0; ++ newsize.Right = coord.X - 1; ++ newsize.Bottom = coord.Y - 1; ++ SetConsoleWindowInfo(g_hConOut, TRUE, &newsize); ++ ++ SetConsoleScreenBufferSize(g_hConOut, coord); ++ } ++ } ++ #endif +*** ../vim-8.1.0939/src/proto/os_win32.pro 2019-02-13 19:23:04.734816702 +0100 +--- src/proto/os_win32.pro 2019-02-17 14:53:03.977230484 +0100 +*************** +*** 75,78 **** +--- 75,79 ---- + int has_vtp_working(void); + int has_conpty_working(void); + int is_conpty_stable(void); ++ void resize_console_buf(void); + /* vim: set ft=c : */ +*** ../vim-8.1.0939/src/version.c 2019-02-17 14:50:22.438125825 +0100 +--- src/version.c 2019-02-17 14:56:57.147933610 +0100 +*************** +*** 781,782 **** +--- 781,784 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 940, + /**/ + +-- +The word "leader" is derived from the word "lead", as in the material that +bullets are made out of. The term "leader" was popularized at about the same +time as the invention of firearms. It grew out of the observation that the +person in charge of every organization was the person whom everyone wanted to +fill with hot lead. + I don't recomment this; it's just a point of historical interest. + (Scott Adams - The Dilbert principle) + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |