diff --git a/7.1.158 b/7.1.158 new file mode 100644 index 0000000..8bd2e8f --- /dev/null +++ b/7.1.158 @@ -0,0 +1,157 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.158 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.158 (extra) +Problem: Win32 console: When 'encoding' is "utf-8" and typing Alt-y the + result is wrong. Win32 GUI: Alt-y results in "u" when 'encoding' + is "cp1250" (Lukas Cerman) +Solution: For utf-8 don't set the 7th bit in a byte, convert to the correct + byte sequence. For cp1250, when conversion to 'encoding' results + in the 7th bit not set, set the 7th bit after conversion. +Files: src/os_win32.c, src/gui_w48.c + + +*** ../vim-7.1.157/src/os_win32.c Mon Oct 1 20:33:45 2007 +--- src/os_win32.c Sat Oct 27 17:35:04 2007 +*************** +*** 1521,1527 **** +--- 1521,1532 ---- + #endif + ) + { ++ #ifdef FEAT_MBYTE ++ n = (*mb_char2bytes)(typeahead[typeaheadlen] | 0x80, ++ typeahead + typeaheadlen); ++ #else + typeahead[typeaheadlen] |= 0x80; ++ #endif + modifiers &= ~MOD_MASK_ALT; + } + +*** ../vim-7.1.157/src/gui_w48.c Sun Sep 30 14:00:41 2007 +--- src/gui_w48.c Mon Oct 29 20:00:25 2007 +*************** +*** 486,495 **** + + /* + * Convert Unicode character "ch" to bytes in "string[slen]". + * Return the length. + */ + static int +! char_to_string(int ch, char_u *string, int slen) + { + int len; + int i; +--- 486,496 ---- + + /* + * Convert Unicode character "ch" to bytes in "string[slen]". ++ * When "had_alt" is TRUE the ALT key was included in "ch". + * Return the length. + */ + static int +! char_to_string(int ch, char_u *string, int slen, int had_alt) + { + int len; + int i; +*************** +*** 522,529 **** +--- 523,544 ---- + * "enc_codepage" is non-zero use the standard Win32 function, + * otherwise use our own conversion function (e.g., for UTF-8). */ + if (enc_codepage > 0) ++ { + len = WideCharToMultiByte(enc_codepage, 0, wstring, len, + string, slen, 0, NULL); ++ /* If we had included the ALT key into the character but now the ++ * upper bit is no longer set, that probably means the conversion ++ * failed. Convert the original character and set the upper bit ++ * afterwards. */ ++ if (had_alt && len == 1 && ch >= 0x80 && string[0] < 0x80) ++ { ++ wstring[0] = ch & 0x7f; ++ len = WideCharToMultiByte(enc_codepage, 0, wstring, len, ++ string, slen, 0, NULL); ++ if (len == 1) /* safety check */ ++ string[0] |= 0x80; ++ } ++ } + else + { + len = 1; +*************** +*** 573,579 **** + char_u string[40]; + int len = 0; + +! len = char_to_string(ch, string, 40); + if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts) + { + trash_input_buf(); +--- 588,594 ---- + char_u string[40]; + int len = 0; + +! len = char_to_string(ch, string, 40, FALSE); + if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts) + { + trash_input_buf(); +*************** +*** 640,646 **** + { + /* Although the documentation isn't clear about it, we assume "ch" is + * a Unicode character. */ +! len += char_to_string(ch, string + len, 40 - len); + } + + add_to_input_buf(string, len); +--- 655,661 ---- + { + /* Although the documentation isn't clear about it, we assume "ch" is + * a Unicode character. */ +! len += char_to_string(ch, string + len, 40 - len, TRUE); + } + + add_to_input_buf(string, len); +*************** +*** 1775,1781 **** + int len; + + /* Handle "key" as a Unicode character. */ +! len = char_to_string(key, string, 40); + add_to_input_buf(string, len); + } + break; +--- 1790,1796 ---- + int len; + + /* Handle "key" as a Unicode character. */ +! len = char_to_string(key, string, 40, FALSE); + add_to_input_buf(string, len); + } + break; +*** ../vim-7.1.157/src/version.c Tue Nov 20 12:30:31 2007 +--- src/version.c Tue Nov 20 17:19:18 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 158, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +123. You ask the car dealer to install an extra cigarette lighter + on your new car to power your notebook. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///