To: vim_dev@googlegroups.com Subject: Patch 7.4.142 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.142 (after 7.4.137) Problem: On MS-Windows 8 IME input doen't work correctly. Solution: Work around the problem. (Nobuhiro Takasaki) Files: src/os_win32.c *** ../vim-7.4.141/src/os_win32.c 2014-01-10 18:16:00.000000000 +0100 --- src/os_win32.c 2014-01-12 13:23:24.000000000 +0100 *************** *** 234,289 **** /* * Version of ReadConsoleInput() that works with IME. */ static BOOL read_console_input( ! HANDLE hConsoleInput, ! PINPUT_RECORD lpBuffer, ! DWORD nLength, ! LPDWORD lpNumberOfEventsRead) { enum { ! IRSIZE = 10, /* rough value */ }; ! static INPUT_RECORD irCache[IRSIZE]; static DWORD s_dwIndex = 0; static DWORD s_dwMax = 0; ! ! if (hConsoleInput == NULL || lpBuffer == NULL) ! return ReadConsoleInput(hConsoleInput, lpBuffer, nLength, ! lpNumberOfEventsRead); ! ! if (nLength == -1) ! { ! if (s_dwMax == 0) ! { ! PeekConsoleInput(hConsoleInput, lpBuffer, 1, lpNumberOfEventsRead); ! if (*lpNumberOfEventsRead == 0) ! return FALSE; ! ReadConsoleInput(hConsoleInput, irCache, IRSIZE, &s_dwMax); ! s_dwIndex = 0; ! } ! ((PINPUT_RECORD)lpBuffer)[0] = irCache[s_dwIndex]; ! *lpNumberOfEventsRead = 1; ! return TRUE; ! } if (s_dwMax == 0) { ! ReadConsoleInput(hConsoleInput, irCache, IRSIZE, &s_dwMax); s_dwIndex = 0; ! if (s_dwMax == 0) { ! *lpNumberOfEventsRead = 0; ! return FALSE; } } ! ! ((PINPUT_RECORD)lpBuffer)[0] = irCache[s_dwIndex]; ! if (++s_dwIndex == s_dwMax) s_dwMax = 0; ! *lpNumberOfEventsRead = 1; return TRUE; } --- 234,275 ---- /* * Version of ReadConsoleInput() that works with IME. + * Works around problems on Windows 8. */ static BOOL read_console_input( ! HANDLE hInput, ! INPUT_RECORD *lpBuffer, ! DWORD nLength, ! LPDWORD lpEvents) { enum { ! IRSIZE = 10 }; ! static INPUT_RECORD s_irCache[IRSIZE]; static DWORD s_dwIndex = 0; static DWORD s_dwMax = 0; ! DWORD dwEvents; if (s_dwMax == 0) { ! if (nLength == -1) ! return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents); ! if (!ReadConsoleInput(hInput, s_irCache, IRSIZE, &dwEvents)) ! return FALSE; s_dwIndex = 0; ! s_dwMax = dwEvents; ! if (dwEvents == 0) { ! *lpEvents = 0; ! return TRUE; } } ! *lpBuffer = s_irCache[s_dwIndex]; ! if (nLength != -1 && ++s_dwIndex >= s_dwMax) s_dwMax = 0; ! *lpEvents = 1; return TRUE; } *************** *** 292,304 **** */ static BOOL peek_console_input( ! HANDLE hConsoleInput, ! PINPUT_RECORD lpBuffer, ! DWORD nLength, ! LPDWORD lpNumberOfEventsRead) { ! return read_console_input(hConsoleInput, lpBuffer, -1, ! lpNumberOfEventsRead); } static void --- 278,289 ---- */ static BOOL peek_console_input( ! HANDLE hInput, ! INPUT_RECORD *lpBuffer, ! DWORD nLength, ! LPDWORD lpEvents) { ! return read_console_input(hInput, lpBuffer, -1, lpEvents); } static void *************** *** 585,594 **** static BOOL win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable) { ! BOOL bResult; ! LUID luid; ! HANDLE hToken; ! TOKEN_PRIVILEGES tokenPrivileges; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) --- 570,579 ---- static BOOL win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable) { ! BOOL bResult; ! LUID luid; ! HANDLE hToken; ! TOKEN_PRIVILEGES tokenPrivileges; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) *** ../vim-7.4.141/src/version.c 2014-01-10 18:16:00.000000000 +0100 --- src/version.c 2014-01-12 13:17:47.000000000 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 142, /**/ -- Drink wet cement and get really stoned. /// 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 ///