summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0806
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0806')
-rw-r--r--data/vim/patches/8.1.08067095
1 files changed, 7095 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0806 b/data/vim/patches/8.1.0806
new file mode 100644
index 000000000..c59e436d7
--- /dev/null
+++ b/data/vim/patches/8.1.0806
@@ -0,0 +1,7095 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0806
+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.0806
+Problem: Too many #ifdefs.
+Solution: Graduate FEAT_MBYTE, part 2.
+Files: src/ex_cmds2.c, src/ex_docmd.c, src/ex_getln.c, src/gui_w32.c,
+ src/gui_x11.c, src/hardcopy.c, src/if_xcmdsrv.c, src/json.c,
+ src/kword_test.c, src/main.c, src/mbyte.c, src/memline.c,
+ src/message.c, src/misc1.c, src/misc2.c, src/move.c, src/normal.c,
+ src/ops.c, src/option.c, src/charset.c
+
+
+*** ../vim-8.1.0805/src/ex_cmds2.c 2019-01-24 15:04:44.666887862 +0100
+--- src/ex_cmds2.c 2019-01-24 15:09:55.708856796 +0100
+***************
+*** 5421,5427 ****
+ #if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && defined(LC_MESSAGES))) \
+ || ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+- && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE)) \
+ && !defined(LC_MESSAGES))
+ /*
+ * Get the language used for messages from the environment.
+--- 5421,5426 ----
+***************
+*** 5485,5492 ****
+ }
+ #endif
+
+! #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ /*
+ * ":language": Set the language (locale).
+ */
+--- 5484,5490 ----
+ }
+ #endif
+
+! #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) \
+ /*
+ * ":language": Set the language (locale).
+ */
+*** ../vim-8.1.0805/src/ex_docmd.c 2019-01-24 15:04:44.666887862 +0100
+--- src/ex_docmd.c 2019-01-24 15:10:21.144699639 +0100
+***************
+*** 4300,4307 ****
+ xp->xp_pattern = arg;
+ break;
+
+! #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ case CMD_language:
+ p = skiptowhite(arg);
+ if (*p == NUL)
+--- 4300,4306 ----
+ xp->xp_pattern = arg;
+ break;
+
+! #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ case CMD_language:
+ p = skiptowhite(arg);
+ if (*p == NUL)
+***************
+*** 5963,5970 ****
+ #if defined(FEAT_CMDHIST)
+ {EXPAND_HISTORY, "history"},
+ #endif
+! #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ {EXPAND_LOCALES, "locale"},
+ #endif
+ {EXPAND_MAPCLEAR, "mapclear"},
+--- 5962,5968 ----
+ #if defined(FEAT_CMDHIST)
+ {EXPAND_HISTORY, "history"},
+ #endif
+! #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ {EXPAND_LOCALES, "locale"},
+ #endif
+ {EXPAND_MAPCLEAR, "mapclear"},
+*** ../vim-8.1.0805/src/ex_getln.c 2019-01-24 15:04:44.670887836 +0100
+--- src/ex_getln.c 2019-01-24 15:10:41.796571593 +0100
+***************
+*** 5253,5260 ****
+ #ifdef FEAT_PROFILE
+ {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
+ #endif
+! #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
+ {EXPAND_LOCALES, get_locales, TRUE, FALSE},
+ #endif
+--- 5253,5259 ----
+ #ifdef FEAT_PROFILE
+ {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
+ #endif
+! #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
+ {EXPAND_LOCALES, get_locales, TRUE, FALSE},
+ #endif
+*** ../vim-8.1.0805/src/gui_w32.c 2019-01-19 19:54:17.141981393 +0100
+--- src/gui_w32.c 2019-01-24 15:12:02.496067677 +0100
+***************
+*** 30,38 ****
+ #endif
+
+ #if defined(FEAT_DIRECTX)
+- # ifndef FEAT_MBYTE
+- # error FEAT_MBYTE is required for FEAT_DIRECTX.
+- # endif
+ static DWriteContext *s_dwc = NULL;
+ static int s_directx_enabled = 0;
+ static int s_directx_load_attempted = 0;
+--- 30,35 ----
+***************
+*** 318,326 ****
+ #ifdef MSWIN_FIND_REPLACE
+ static UINT s_findrep_msg = 0; /* set in gui_w[16/32].c */
+ static FINDREPLACE s_findrep_struct;
+- # ifdef FEAT_MBYTE
+ static FINDREPLACEW s_findrep_struct_w;
+- # endif
+ static HWND s_findrep_hwnd = NULL;
+ static int s_findrep_is_find; /* TRUE for find dialog, FALSE
+ for find/replace dialog */
+--- 315,321 ----
+***************
+*** 396,408 ****
+ }
+ #endif
+
+! #if defined(FEAT_MBYTE) || defined(GLOBAL_IME)
+! /* use of WindowProc depends on wide_WindowProc */
+! # define MyWindowProc vim_WindowProc
+! #else
+! /* use ordinary WindowProc */
+! # define MyWindowProc DefWindowProc
+! #endif
+
+ extern int current_font_height; /* this is in os_mswin.c */
+
+--- 391,398 ----
+ }
+ #endif
+
+! /* use of WindowProc depends on wide_WindowProc */
+! #define MyWindowProc vim_WindowProc
+
+ extern int current_font_height; /* this is in os_mswin.c */
+
+***************
+*** 724,730 ****
+ {
+ int len;
+ int i;
+- #ifdef FEAT_MBYTE
+ WCHAR wstring[2];
+ char_u *ws = NULL;
+
+--- 714,719 ----
+***************
+*** 785,791 ****
+ }
+
+ if (len == 0)
+- #endif
+ {
+ string[0] = ch;
+ len = 1;
+--- 774,779 ----
+***************
+*** 1118,1124 ****
+ #endif
+
+ #ifdef MSWIN_FIND_REPLACE
+- # ifdef FEAT_MBYTE
+ /*
+ * copy useful data from structure LPFINDREPLACE to structure LPFINDREPLACEW
+ */
+--- 1106,1111 ----
+***************
+*** 1155,1161 ****
+ vim_strncpy((char_u *)lpfr->lpstrReplaceWith, p, lpfr->wReplaceWithLen - 1);
+ vim_free(p);
+ }
+- # endif
+
+ /*
+ * Handle a Find/Replace window message.
+--- 1142,1147 ----
+***************
+*** 1166,1179 ****
+ int flags = 0;
+ int down;
+
+- # ifdef FEAT_MBYTE
+ /* If the OS is Windows NT, and 'encoding' differs from active codepage:
+ * convert text from wide string. */
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+ {
+ findrep_wtoa(&s_findrep_struct, &s_findrep_struct_w);
+ }
+- # endif
+
+ if (s_findrep_struct.Flags & FR_DIALOGTERM)
+ /* Give main window the focus back. */
+--- 1152,1163 ----
+***************
+*** 1318,1342 ****
+ }
+ }
+
+! #if defined(FEAT_MBYTE) \
+! || defined(GLOBAL_IME) \
+! || defined(PROTO)
+! # ifdef PROTO
+ typedef int WINAPI;
+! # endif
+
+ LRESULT WINAPI
+ vim_WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+ {
+! # ifdef GLOBAL_IME
+ return global_ime_DefWindowProc(hwnd, message, wParam, lParam);
+! # else
+ if (wide_WindowProc)
+ return DefWindowProcW(hwnd, message, wParam, lParam);
+ return DefWindowProc(hwnd, message, wParam, lParam);
+ #endif
+ }
+- #endif
+
+ /*
+ * Called when the foreground or background color has been changed.
+--- 1302,1322 ----
+ }
+ }
+
+! #ifdef PROTO
+ typedef int WINAPI;
+! #endif
+
+ LRESULT WINAPI
+ vim_WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+ {
+! #ifdef GLOBAL_IME
+ return global_ime_DefWindowProc(hwnd, message, wParam, lParam);
+! #else
+ if (wide_WindowProc)
+ return DefWindowProcW(hwnd, message, wParam, lParam);
+ return DefWindowProc(hwnd, message, wParam, lParam);
+ #endif
+ }
+
+ /*
+ * Called when the foreground or background color has been changed.
+***************
+*** 1751,1760 ****
+ rc.left = FILL_X(gui.col);
+ rc.top = FILL_Y(gui.row);
+ rc.right = rc.left + gui.char_width;
+- #ifdef FEAT_MBYTE
+ if (mb_lefthalve(gui.row, gui.col))
+ rc.right += gui.char_width;
+- #endif
+ rc.bottom = rc.top + gui.char_height;
+ hbr = CreateSolidBrush(color);
+ FrameRect(s_hdc, &rc, hbr);
+--- 1731,1738 ----
+***************
+*** 2345,2351 ****
+ return size.cx;
+ }
+
+- #ifdef FEAT_MBYTE
+ /*
+ * Return the width in pixels of the given text in the given DC, taking care
+ * of 'encoding' to active codepage conversion.
+--- 2323,2328 ----
+***************
+*** 2374,2382 ****
+
+ return GetTextWidth(hdc, str, len);
+ }
+- #else
+- # define GetTextWidthEnc(h, s, l) GetTextWidth((h), (s), (l))
+- #endif
+
+ static void get_work_area(RECT *spi_rect);
+
+--- 2351,2356 ----
+***************
+*** 2451,2465 ****
+
+ if (showit)
+ {
+! # ifdef FEAT_MBYTE
+! # ifndef TB_SETUNICODEFORMAT
+ /* For older compilers. We assume this never changes. */
+! # define TB_SETUNICODEFORMAT 0x2005
+! # endif
+ /* Enable/disable unicode support */
+ int uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
+ SendMessage(s_toolbarhwnd, TB_SETUNICODEFORMAT, (WPARAM)uu, (LPARAM)0);
+- # endif
+ ShowWindow(s_toolbarhwnd, SW_SHOW);
+ }
+ else
+--- 2425,2437 ----
+
+ if (showit)
+ {
+! # ifndef TB_SETUNICODEFORMAT
+ /* For older compilers. We assume this never changes. */
+! # define TB_SETUNICODEFORMAT 0x2005
+! # endif
+ /* Enable/disable unicode support */
+ int uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
+ SendMessage(s_toolbarhwnd, TB_SETUNICODEFORMAT, (WPARAM)uu, (LPARAM)0);
+ ShowWindow(s_toolbarhwnd, SW_SHOW);
+ }
+ else
+***************
+*** 2475,2481 ****
+ static void
+ add_tabline_popup_menu_entry(HMENU pmenu, UINT item_id, char_u *item_text)
+ {
+- #ifdef FEAT_MBYTE
+ WCHAR *wn = NULL;
+
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+--- 2447,2452 ----
+***************
+*** 2499,2505 ****
+ }
+
+ if (wn == NULL)
+- #endif
+ {
+ MENUITEMINFO info;
+
+--- 2470,2475 ----
+***************
+*** 2606,2625 ****
+ int nr = 0;
+ int curtabidx = 0;
+ int tabadded = 0;
+- #ifdef FEAT_MBYTE
+ static int use_unicode = FALSE;
+ int uu;
+ WCHAR *wstr = NULL;
+- #endif
+
+ if (s_tabhwnd == NULL)
+ return;
+
+! #ifdef FEAT_MBYTE
+! # ifndef CCM_SETUNICODEFORMAT
+ /* For older compilers. We assume this never changes. */
+! # define CCM_SETUNICODEFORMAT 0x2005
+! # endif
+ uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
+ if (uu != use_unicode)
+ {
+--- 2576,2592 ----
+ int nr = 0;
+ int curtabidx = 0;
+ int tabadded = 0;
+ static int use_unicode = FALSE;
+ int uu;
+ WCHAR *wstr = NULL;
+
+ if (s_tabhwnd == NULL)
+ return;
+
+! #ifndef CCM_SETUNICODEFORMAT
+ /* For older compilers. We assume this never changes. */
+! # define CCM_SETUNICODEFORMAT 0x2005
+! #endif
+ uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
+ if (uu != use_unicode)
+ {
+***************
+*** 2627,2633 ****
+ SendMessage(s_tabhwnd, CCM_SETUNICODEFORMAT, (WPARAM)uu, (LPARAM)0);
+ use_unicode = uu;
+ }
+- #endif
+
+ tie.mask = TCIF_TEXT;
+ tie.iImage = -1;
+--- 2594,2599 ----
+***************
+*** 2651,2657 ****
+
+ get_tabline_label(tp, FALSE);
+ tie.pszText = (LPSTR)NameBuff;
+- #ifdef FEAT_MBYTE
+ wstr = NULL;
+ if (use_unicode)
+ {
+--- 2617,2622 ----
+***************
+*** 2669,2675 ****
+ }
+ }
+ if (wstr == NULL)
+- #endif
+ {
+ TabCtrl_SetItem(s_tabhwnd, nr, &tie);
+ }
+--- 2634,2639 ----
+***************
+*** 2770,2776 ****
+ static void
+ set_window_title(HWND hwnd, char *title)
+ {
+- #ifdef FEAT_MBYTE
+ if (title != NULL && enc_codepage >= 0 && enc_codepage != (int)GetACP())
+ {
+ WCHAR *wbuf;
+--- 2734,2739 ----
+***************
+*** 2784,2790 ****
+ }
+ return;
+ }
+- #endif
+ (void)SetWindowText(hwnd, (LPCSTR)title);
+ }
+
+--- 2747,2752 ----
+***************
+*** 2800,2806 ****
+ if (!IsWindow(s_findrep_hwnd))
+ {
+ initialise_findrep(eap->arg);
+- # ifdef FEAT_MBYTE
+ /* If the OS is Windows NT, and 'encoding' differs from active
+ * codepage: convert text and use wide function. */
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+--- 2762,2767 ----
+***************
+*** 2810,2816 ****
+ (LPFINDREPLACEW) &s_findrep_struct_w);
+ }
+ else
+- # endif
+ s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct);
+ }
+
+--- 2771,2776 ----
+***************
+*** 2835,2841 ****
+ if (!IsWindow(s_findrep_hwnd))
+ {
+ initialise_findrep(eap->arg);
+- # ifdef FEAT_MBYTE
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+ {
+ findrep_atow(&s_findrep_struct_w, &s_findrep_struct);
+--- 2795,2800 ----
+***************
+*** 2843,2849 ****
+ (LPFINDREPLACEW) &s_findrep_struct_w);
+ }
+ else
+- # endif
+ s_findrep_hwnd = ReplaceText(
+ (LPFINDREPLACE) &s_findrep_struct);
+ }
+--- 2802,2807 ----
+***************
+*** 2931,2937 ****
+ out_flush(); /* make sure all output has been processed */
+ (void)BeginPaint(hwnd, &ps);
+
+- #ifdef FEAT_MBYTE
+ /* prevent multi-byte characters from misprinting on an invalid
+ * rectangle */
+ if (has_mbyte)
+--- 2889,2894 ----
+***************
+*** 2942,2948 ****
+ ps.rcPaint.left = rect.left;
+ ps.rcPaint.right = rect.right;
+ }
+- #endif
+
+ if (!IsRectEmpty(&ps.rcPaint))
+ {
+--- 2899,2904 ----
+***************
+*** 3255,3261 ****
+ char *font_name = lf.lfFaceName;
+
+ charset_name = charset_id2name((int)lf.lfCharSet);
+- #ifdef FEAT_MBYTE
+ /* Convert a font name from the current codepage to 'encoding'.
+ * TODO: Use Wide APIs (including LOGFONTW) instead of ANSI APIs. */
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+--- 3211,3216 ----
+***************
+*** 3264,3270 ****
+ acp_to_enc((char_u *)lf.lfFaceName, (int)strlen(lf.lfFaceName),
+ (char_u **)&font_name, &len);
+ }
+- #endif
+ quality_name = quality_id2name((int)lf.lfQuality);
+
+ res = (char *)alloc((unsigned)(strlen(font_name) + 20
+--- 3219,3224 ----
+***************
+*** 3301,3310 ****
+ }
+ }
+
+- #ifdef FEAT_MBYTE
+ if (font_name != lf.lfFaceName)
+ vim_free(font_name);
+- #endif
+ return (char_u *)res;
+ }
+
+--- 3255,3262 ----
+***************
+*** 3329,3335 ****
+ }
+ #endif
+
+- #ifdef FEAT_MBYTE
+ /*
+ * Handler of gui.wide_font (p_guifontwide) changed notification.
+ */
+--- 3281,3286 ----
+***************
+*** 3338,3346 ****
+ {
+ LOGFONT lf;
+
+! # ifdef FEAT_MBYTE_IME
+ update_im_font();
+! # endif
+
+ gui_mch_free_font(gui.wide_ital_font);
+ gui.wide_ital_font = NOFONT;
+--- 3289,3297 ----
+ {
+ LOGFONT lf;
+
+! #ifdef FEAT_MBYTE_IME
+ update_im_font();
+! #endif
+
+ gui_mch_free_font(gui.wide_ital_font);
+ gui.wide_ital_font = NOFONT;
+***************
+*** 3370,3376 ****
+ }
+ }
+ }
+- #endif
+
+ /*
+ * Initialise vim to use the font with the given name.
+--- 3321,3326 ----
+***************
+*** 3574,3586 ****
+
+ #if defined(FEAT_BROWSE) || defined(PROTO)
+ /*
+- * The file browser exists in two versions: with "W" uses wide characters,
+- * without "W" the current codepage. When FEAT_MBYTE is defined and on
+- * Windows NT/2000/XP the "W" functions are used.
+- */
+-
+- # ifdef FEAT_MBYTE
+- /*
+ * Wide version of convert_filter().
+ */
+ static WCHAR *
+--- 3524,3529 ----
+***************
+*** 3600,3609 ****
+ }
+
+ /*
+! * Wide version of gui_mch_browse(). Keep in sync!
+ */
+ static char_u *
+! gui_mch_browseW(
+ int saving,
+ char_u *title,
+ char_u *dflt,
+--- 3543,3559 ----
+ }
+
+ /*
+! * Pop open a file browser and return the file selected, in allocated memory,
+! * or NULL if Cancel is hit.
+! * saving - TRUE if the file will be saved to, FALSE if it will be opened.
+! * title - Title message for the file browser dialog.
+! * dflt - Default name of file.
+! * ext - Default extension to be added to files without extensions.
+! * initdir - directory in which to open the browser (NULL = current dir)
+! * filter - Filter for matched files to choose from.
+ */
+ static char_u *
+! gui_mch_browse(
+ int saving,
+ char_u *title,
+ char_u *dflt,
+***************
+*** 3718,3724 ****
+ vim_free(p);
+ return q;
+ }
+- # endif /* FEAT_MBYTE */
+
+
+ /*
+--- 3668,3673 ----
+***************
+*** 3762,3867 ****
+ return gui_mch_browse(0, title, (char_u *)_("Not Used"), NULL,
+ initdir, (char_u *)_("Directory\t*.nothing\n"));
+ }
+-
+- /*
+- * Pop open a file browser and return the file selected, in allocated memory,
+- * or NULL if Cancel is hit.
+- * saving - TRUE if the file will be saved to, FALSE if it will be opened.
+- * title - Title message for the file browser dialog.
+- * dflt - Default name of file.
+- * ext - Default extension to be added to files without extensions.
+- * initdir - directory in which to open the browser (NULL = current dir)
+- * filter - Filter for matched files to choose from.
+- *
+- * Keep in sync with gui_mch_browseW() above!
+- */
+- char_u *
+- gui_mch_browse(
+- int saving,
+- char_u *title,
+- char_u *dflt,
+- char_u *ext,
+- char_u *initdir,
+- char_u *filter)
+- {
+- # ifdef FEAT_MBYTE
+- return gui_mch_browseW(saving, title, dflt, ext, initdir, filter);
+- # else
+- OPENFILENAME fileStruct;
+- char_u fileBuf[MAXPATHL];
+- char_u *initdirp = NULL;
+- char_u *filterp;
+- char_u *p;
+-
+- if (dflt == NULL)
+- fileBuf[0] = NUL;
+- else
+- vim_strncpy(fileBuf, dflt, MAXPATHL - 1);
+-
+- /* Convert the filter to Windows format. */
+- filterp = convert_filter(filter);
+-
+- vim_memset(&fileStruct, 0, sizeof(OPENFILENAME));
+- # ifdef OPENFILENAME_SIZE_VERSION_400
+- /* be compatible with Windows NT 4.0 */
+- fileStruct.lStructSize = OPENFILENAME_SIZE_VERSION_400;
+- # else
+- fileStruct.lStructSize = sizeof(fileStruct);
+- # endif
+-
+- fileStruct.lpstrTitle = (LPSTR)title;
+- fileStruct.lpstrDefExt = (LPSTR)ext;
+-
+- fileStruct.lpstrFile = (LPSTR)fileBuf;
+- fileStruct.nMaxFile = MAXPATHL;
+- fileStruct.lpstrFilter = (LPSTR)filterp;
+- fileStruct.hwndOwner = s_hwnd; /* main Vim window is owner*/
+- /* has an initial dir been specified? */
+- if (initdir != NULL && *initdir != NUL)
+- {
+- /* Must have backslashes here, no matter what 'shellslash' says */
+- initdirp = vim_strsave(initdir);
+- if (initdirp != NULL)
+- for (p = initdirp; *p != NUL; ++p)
+- if (*p == '/')
+- *p = '\\';
+- fileStruct.lpstrInitialDir = (LPSTR)initdirp;
+- }
+-
+- /*
+- * TODO: Allow selection of multiple files. Needs another arg to this
+- * function to ask for it, and need to use OFN_ALLOWMULTISELECT below.
+- * Also, should we use OFN_FILEMUSTEXIST when opening? Vim can edit on
+- * files that don't exist yet, so I haven't put it in. What about
+- * OFN_PATHMUSTEXIST?
+- * Don't use OFN_OVERWRITEPROMPT, Vim has its own ":confirm" dialog.
+- */
+- fileStruct.Flags = (OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY);
+- # ifdef FEAT_SHORTCUT
+- if (curbuf->b_p_bin)
+- fileStruct.Flags |= OFN_NODEREFERENCELINKS;
+- # endif
+- if (saving)
+- {
+- if (!GetSaveFileName(&fileStruct))
+- return NULL;
+- }
+- else
+- {
+- if (!GetOpenFileName(&fileStruct))
+- return NULL;
+- }
+-
+- vim_free(filterp);
+- vim_free(initdirp);
+-
+- /* Give focus back to main window (when using MDI). */
+- SetFocus(s_hwnd);
+-
+- /* Shorten the file name if possible */
+- return vim_strsave(shorten_fname1((char_u *)fileBuf));
+- # endif
+- }
+ #endif /* FEAT_BROWSE */
+
+ static void
+--- 3711,3716 ----
+***************
+*** 3871,3879 ****
+ {
+ #define BUFPATHLEN _MAX_PATH
+ #define DRAGQVAL 0xFFFFFFFF
+- #ifdef FEAT_MBYTE
+ WCHAR wszFile[BUFPATHLEN];
+- #endif
+ char szFile[BUFPATHLEN];
+ UINT cFiles = DragQueryFile(hDrop, DRAGQVAL, NULL, 0);
+ UINT i;
+--- 3720,3726 ----
+***************
+*** 3894,3904 ****
+ if (fnames != NULL)
+ for (i = 0; i < cFiles; ++i)
+ {
+- #ifdef FEAT_MBYTE
+ if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0)
+ fnames[i] = utf16_to_enc(wszFile, NULL);
+ else
+- #endif
+ {
+ DragQueryFile(hDrop, i, szFile, BUFPATHLEN);
+ fnames[i] = vim_strsave((char_u *)szFile);
+--- 3741,3749 ----
+***************
+*** 4060,4072 ****
+
+ *tofree = NULL;
+
+- #ifdef FEAT_MBYTE
+ /* Try using the Unicode version first, it takes care of conversion when
+ * 'encoding' is changed. */
+ argc = get_cmd_argsW(&argv);
+ if (argc != 0)
+ goto done;
+- #endif
+
+ /* Handle the program name. Remove the ".exe" extension, and find the 1st
+ * non-space. */
+--- 3905,3915 ----
+***************
+*** 4145,4151 ****
+ {
+ if (pnew != NULL)
+ *pnew++ = *p;
+- #ifdef FEAT_MBYTE
+ /* Can't use mb_* functions, because 'encoding' is not
+ * initialized yet here. */
+ if (IsDBCSLeadByte(*p))
+--- 3988,3993 ----
+***************
+*** 4154,4160 ****
+ if (pnew != NULL)
+ *pnew++ = *p;
+ }
+- #endif
+ ++p;
+ }
+ }
+--- 3996,4001 ----
+***************
+*** 4178,4186 ****
+ }
+ }
+
+- #ifdef FEAT_MBYTE
+ done:
+- #endif
+ argv[argc] = NULL; /* NULL-terminated list */
+ *argvp = argv;
+ return argc;
+--- 4019,4025 ----
+***************
+*** 4381,4387 ****
+ LPARAM lParam;
+ } NMTTDISPINFO_NEW;
+
+- #ifdef FEAT_MBYTE
+ typedef struct tagTOOLINFOW_NEW
+ {
+ UINT cbSize;
+--- 4220,4225 ----
+***************
+*** 4405,4411 ****
+ LPARAM lParam;
+ } NMTTDISPINFOW_NEW;
+
+- #endif
+
+ typedef HRESULT (WINAPI* DLLGETVERSIONPROC)(DLLVERSIONINFO *);
+ #ifndef TTM_SETMAXTIPWIDTH
+--- 4243,4248 ----
+***************
+*** 4438,4444 ****
+ } NMTTDISPINFOA, *LPNMTTDISPINFOA;
+ # define LPNMTTDISPINFO LPNMTTDISPINFOA
+
+- # ifdef FEAT_MBYTE
+ typedef struct tagNMTTDISPINFOW {
+ NMHDR hdr;
+ LPWSTR lpszText;
+--- 4275,4280 ----
+***************
+*** 4447,4453 ****
+ UINT uFlags;
+ LPARAM lParam;
+ } NMTTDISPINFOW, *LPNMTTDISPINFOW;
+- # endif
+ # endif
+ #endif
+
+--- 4283,4288 ----
+***************
+*** 4970,4978 ****
+ case WM_NOTIFY:
+ switch (((LPNMHDR) lParam)->code)
+ {
+- # ifdef FEAT_MBYTE
+ case TTN_GETDISPINFOW:
+- # endif
+ case TTN_GETDISPINFO:
+ {
+ LPNMHDR hdr = (LPNMHDR)lParam;
+--- 4805,4811 ----
+***************
+*** 5034,5040 ****
+ # endif
+ if (str != NULL)
+ {
+- # ifdef FEAT_MBYTE
+ if (hdr->code == TTN_GETDISPINFOW)
+ {
+ LPNMTTDISPINFOW lpdi = (LPNMTTDISPINFOW)lParam;
+--- 4867,4872 ----
+***************
+*** 5049,5055 ****
+ /* can't show tooltip if failed */
+ }
+ else
+- # endif
+ {
+ LPNMTTDISPINFO lpdi = (LPNMTTDISPINFO)lParam;
+
+--- 4881,4886 ----
+***************
+*** 5353,5363 ****
+ const char szVimWndClass[] = VIM_CLASS;
+ const char szTextAreaClass[] = "VimTextArea";
+ WNDCLASS wndclass;
+- #ifdef FEAT_MBYTE
+ const WCHAR szVimWndClassW[] = VIM_CLASSW;
+ const WCHAR szTextAreaClassW[] = L"VimTextArea";
+ WNDCLASSW wndclassw;
+- #endif
+ #ifdef GLOBAL_IME
+ ATOM atom;
+ #endif
+--- 5184,5192 ----
+***************
+*** 5383,5389 ****
+
+ s_brush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
+
+- #ifdef FEAT_MBYTE
+ /* First try using the wide version, so that we can use any title.
+ * Otherwise only characters in the active codepage will work. */
+ if (GetClassInfoW(s_hinst, szVimWndClassW, &wndclassw) == 0)
+--- 5212,5217 ----
+***************
+*** 5410,5437 ****
+ }
+
+ if (!wide_WindowProc)
+! #endif
+!
+! if (GetClassInfo(s_hinst, szVimWndClass, &wndclass) == 0)
+! {
+! wndclass.style = CS_DBLCLKS;
+! wndclass.lpfnWndProc = _WndProc;
+! wndclass.cbClsExtra = 0;
+! wndclass.cbWndExtra = 0;
+! wndclass.hInstance = s_hinst;
+! wndclass.hIcon = LoadIcon(wndclass.hInstance, "IDR_VIM");
+! wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
+! wndclass.hbrBackground = s_brush;
+! wndclass.lpszMenuName = NULL;
+! wndclass.lpszClassName = szVimWndClass;
+
+! if ((
+ #ifdef GLOBAL_IME
+! atom =
+ #endif
+! RegisterClass(&wndclass)) == 0)
+! return FAIL;
+! }
+
+ if (vim_parent_hwnd != NULL)
+ {
+--- 5238,5263 ----
+ }
+
+ if (!wide_WindowProc)
+! if (GetClassInfo(s_hinst, szVimWndClass, &wndclass) == 0)
+! {
+! wndclass.style = CS_DBLCLKS;
+! wndclass.lpfnWndProc = _WndProc;
+! wndclass.cbClsExtra = 0;
+! wndclass.cbWndExtra = 0;
+! wndclass.hInstance = s_hinst;
+! wndclass.hIcon = LoadIcon(wndclass.hInstance, "IDR_VIM");
+! wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
+! wndclass.hbrBackground = s_brush;
+! wndclass.lpszMenuName = NULL;
+! wndclass.lpszClassName = szVimWndClass;
+
+! if ((
+ #ifdef GLOBAL_IME
+! atom =
+ #endif
+! RegisterClass(&wndclass)) == 0)
+! return FAIL;
+! }
+
+ if (vim_parent_hwnd != NULL)
+ {
+***************
+*** 5503,5509 ****
+ #endif
+
+ /* Create the text area window */
+- #ifdef FEAT_MBYTE
+ if (wide_WindowProc)
+ {
+ if (GetClassInfoW(s_hinst, szTextAreaClassW, &wndclassw) == 0)
+--- 5329,5334 ----
+***************
+*** 5532,5540 ****
+ s_hwnd, NULL,
+ s_hinst, NULL);
+ }
+! else
+! #endif
+! if (GetClassInfo(s_hinst, szTextAreaClass, &wndclass) == 0)
+ {
+ wndclass.style = CS_OWNDC;
+ wndclass.lpfnWndProc = _TextAreaWndProc;
+--- 5357,5363 ----
+ s_hwnd, NULL,
+ s_hinst, NULL);
+ }
+! else if (GetClassInfo(s_hinst, szTextAreaClass, &wndclass) == 0)
+ {
+ wndclass.style = CS_OWNDC;
+ wndclass.lpfnWndProc = _TextAreaWndProc;
+***************
+*** 5642,5648 ****
+ s_findrep_struct.lpstrReplaceWith[0] = NUL;
+ s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE;
+ s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE;
+- # ifdef FEAT_MBYTE
+ s_findrep_struct_w.lStructSize = sizeof(s_findrep_struct_w);
+ s_findrep_struct_w.lpstrFindWhat =
+ (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR));
+--- 5465,5470 ----
+***************
+*** 5652,5658 ****
+ s_findrep_struct_w.lpstrReplaceWith[0] = NUL;
+ s_findrep_struct_w.wFindWhatLen = MSWIN_FR_BUFSIZE;
+ s_findrep_struct_w.wReplaceWithLen = MSWIN_FR_BUFSIZE;
+- # endif
+ #endif
+
+ #ifdef FEAT_EVAL
+--- 5474,5479 ----
+***************
+*** 6149,6155 ****
+
+ #endif /* FEAT_MBYTE_IME */
+
+! #if defined(FEAT_MBYTE) && !defined(FEAT_MBYTE_IME) && defined(GLOBAL_IME)
+ /* Win32 with GLOBAL IME */
+
+ /*
+--- 5970,5976 ----
+
+ #endif /* FEAT_MBYTE_IME */
+
+! #if !defined(FEAT_MBYTE_IME) && defined(GLOBAL_IME)
+ /* Win32 with GLOBAL IME */
+
+ /*
+***************
+*** 6186,6192 ****
+ }
+ #endif
+
+- #ifdef FEAT_MBYTE
+ /*
+ * Convert latin9 text "text[len]" to ucs-2 in "unicodebuf".
+ */
+--- 6007,6012 ----
+***************
+*** 6212,6218 ****
+ *unicodebuf++ = c;
+ }
+ }
+- #endif
+
+ #ifdef FEAT_RIGHTLEFT
+ /*
+--- 6032,6037 ----
+***************
+*** 6319,6330 ****
+ int i;
+ const RECT *pcliprect = NULL;
+ UINT foptions = 0;
+- #ifdef FEAT_MBYTE
+ static WCHAR *unicodebuf = NULL;
+ static int *unicodepdy = NULL;
+ static int unibuflen = 0;
+ int n = 0;
+- #endif
+ int y;
+
+ /*
+--- 6138,6147 ----
+***************
+*** 6354,6367 ****
+ */
+ rc.left = FILL_X(col);
+ rc.top = FILL_Y(row);
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ /* Compute the length in display cells. */
+ rc.right = FILL_X(col + mb_string2cells(text, len));
+ }
+ else
+- #endif
+ rc.right = FILL_X(col + len);
+ rc.bottom = FILL_Y(row + 1);
+
+--- 6171,6182 ----
+***************
+*** 6429,6435 ****
+ * No check for DRAW_BOLD, Windows will have done it already.
+ */
+
+- #ifdef FEAT_MBYTE
+ /* Check if there are any UTF-8 characters. If not, use normal text
+ * output to speed up output. */
+ if (enc_utf8)
+--- 6244,6249 ----
+***************
+*** 6437,6449 ****
+ if (text[n] >= 0x80)
+ break;
+
+! # if defined(FEAT_DIRECTX)
+ /* Quick hack to enable DirectWrite. To use DirectWrite (antialias), it is
+ * required that unicode drawing routine, currently. So this forces it
+ * enabled. */
+ if (IS_ENABLE_DIRECTX())
+ n = 0; /* Keep n < len, to enter block for unicode. */
+! # endif
+
+ /* Check if the Unicode buffer exists and is big enough. Create it
+ * with the same length as the multi-byte string, the number of wide
+--- 6251,6263 ----
+ if (text[n] >= 0x80)
+ break;
+
+! #if defined(FEAT_DIRECTX)
+ /* Quick hack to enable DirectWrite. To use DirectWrite (antialias), it is
+ * required that unicode drawing routine, currently. So this forces it
+ * enabled. */
+ if (IS_ENABLE_DIRECTX())
+ n = 0; /* Keep n < len, to enter block for unicode. */
+! #endif
+
+ /* Check if the Unicode buffer exists and is big enough. Create it
+ * with the same length as the multi-byte string, the number of wide
+***************
+*** 6516,6522 ****
+ i += utf_ptr2len_len(text + i, len - i);
+ ++clen;
+ }
+! # if defined(FEAT_DIRECTX)
+ if (IS_ENABLE_DIRECTX())
+ {
+ /* Add one to "cells" for italics. */
+--- 6330,6336 ----
+ i += utf_ptr2len_len(text + i, len - i);
+ ++clen;
+ }
+! #if defined(FEAT_DIRECTX)
+ if (IS_ENABLE_DIRECTX())
+ {
+ /* Add one to "cells" for italics. */
+***************
+*** 6526,6532 ****
+ foptions, pcliprect, unicodepdy);
+ }
+ else
+! # endif
+ ExtTextOutW(s_hdc, TEXT_X(col), TEXT_Y(row),
+ foptions, pcliprect, unicodebuf, wlen, unicodepdy);
+ len = cells; /* used for underlining */
+--- 6340,6346 ----
+ foptions, pcliprect, unicodepdy);
+ }
+ else
+! #endif
+ ExtTextOutW(s_hdc, TEXT_X(col), TEXT_Y(row),
+ foptions, pcliprect, unicodebuf, wlen, unicodepdy);
+ len = cells; /* used for underlining */
+***************
+*** 6568,6574 ****
+ }
+ }
+ else
+- #endif
+ {
+ #ifdef FEAT_RIGHTLEFT
+ /* Windows will mess up RL text, so we have to draw it character by
+--- 6382,6387 ----
+***************
+*** 6690,6696 ****
+
+ if (menu_is_menubar(menu->name))
+ {
+- #ifdef FEAT_MBYTE
+ WCHAR *wn = NULL;
+
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+--- 6503,6508 ----
+***************
+*** 6719,6725 ****
+ }
+
+ if (wn == NULL)
+- #endif
+ {
+ MENUITEMINFO info;
+
+--- 6531,6536 ----
+***************
+*** 6847,6853 ****
+ else
+ #endif
+ {
+- #ifdef FEAT_MBYTE
+ WCHAR *wn = NULL;
+
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+--- 6658,6663 ----
+***************
+*** 6865,6871 ****
+ }
+ }
+ if (wn == NULL)
+- #endif
+ InsertMenu(parent->submenu_id, (UINT)idx,
+ (menu_is_separator(menu->name) ? MF_SEPARATOR : MF_STRING)
+ | MF_BYPOSITION,
+--- 6675,6680 ----
+***************
+*** 7059,7065 ****
+ /* If the edit box exists, copy the string. */
+ if (s_textfield != NULL)
+ {
+- # ifdef FEAT_MBYTE
+ /* If the OS is Windows NT, and 'encoding' differs from active
+ * codepage: use wide function and convert text. */
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+--- 6868,6873 ----
+***************
+*** 7074,7080 ****
+ vim_free(wp);
+ }
+ else
+- # endif
+ GetDlgItemText(hwnd, DLG_NONBUTTON_CONTROL + 2,
+ (LPSTR)s_textfield, IOSIZE);
+ }
+--- 6882,6887 ----
+***************
+*** 7306,7316 ****
+ last_white = NULL;
+ for (pend = pstart; *pend != NUL && *pend != '\n'; )
+ {
+- #ifdef FEAT_MBYTE
+ l = (*mb_ptr2len)(pend);
+- #else
+- l = 1;
+- #endif
+ if (l == 1 && VIM_ISWHITE(*pend)
+ && textWidth > maxDialogWidth * 3 / 4)
+ last_white = pend;
+--- 7113,7119 ----
+***************
+*** 7693,7699 ****
+ BOOL use_enc)
+ {
+ int nChar = 0;
+- #ifdef FEAT_MBYTE
+ int len = lstrlen(lpAnsiIn) + 1; /* include NUL character */
+ int i;
+ WCHAR *wn;
+--- 7496,7501 ----
+***************
+*** 7719,7734 ****
+ for (i = 0; i < nChar; ++i)
+ if (lpWCStr[i] == (WORD)'\t') /* replace tabs with spaces */
+ lpWCStr[i] = (WORD)' ';
+- #else
+- do
+- {
+- if (*lpAnsiIn == '\t')
+- *lpWCStr++ = (WORD)' ';
+- else
+- *lpWCStr++ = (WORD)*lpAnsiIn;
+- nChar++;
+- } while (*lpAnsiIn++);
+- #endif
+
+ return nChar;
+ }
+--- 7521,7526 ----
+***************
+*** 8775,8781 ****
+ return multiline_tip;
+ }
+
+- #ifdef FEAT_MBYTE
+ static void
+ make_tooltipw(BalloonEval *beval, char *text, POINT pt)
+ {
+--- 8567,8572 ----
+***************
+*** 8845,8851 ****
+ mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0);
+ vim_free(pti);
+ }
+- #endif
+
+ static void
+ make_tooltip(BalloonEval *beval, char *text, POINT pt)
+--- 8636,8641 ----
+***************
+*** 8853,8865 ****
+ TOOLINFO *pti;
+ int ToolInfoSize;
+
+- #ifdef FEAT_MBYTE
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+ {
+ make_tooltipw(beval, text, pt);
+ return;
+ }
+- #endif
+
+ if (multiline_balloon_available() == TRUE)
+ ToolInfoSize = sizeof(TOOLINFO_NEW);
+--- 8643,8653 ----
+***************
+*** 9072,9078 ****
+ info->uFlags |= TTF_DI_SETITEM;
+ }
+ break;
+- #ifdef FEAT_MBYTE
+ case TTN_GETDISPINFOW:
+ {
+ // if we get here then we have new common controls
+--- 8860,8865 ----
+***************
+*** 9081,9087 ****
+ info->uFlags |= TTF_DI_SETITEM;
+ }
+ break;
+- #endif
+ }
+ }
+ }
+--- 8868,8873 ----
+*** ../vim-8.1.0805/src/gui_x11.c 2019-01-17 17:13:25.920984090 +0100
+--- src/gui_x11.c 2019-01-24 15:13:43.959427047 +0100
+***************
+*** 748,754 ****
+ gui_focus_change(FALSE);
+ }
+
+! #if defined(X_HAVE_UTF8_STRING) && defined(FEAT_MBYTE)
+ # if X_HAVE_UTF8_STRING
+ # define USE_UTF8LOOKUP
+ # endif
+--- 748,754 ----
+ gui_focus_change(FALSE);
+ }
+
+! #if defined(X_HAVE_UTF8_STRING)
+ # if X_HAVE_UTF8_STRING
+ # define USE_UTF8LOOKUP
+ # endif
+***************
+*** 810,822 ****
+ if (status == XLookupNone || status == XLookupChars)
+ key_sym = XK_VoidSymbol;
+
+- # ifdef FEAT_MBYTE
+ /* Do conversion from 'termencoding' to 'encoding'. When using
+ * Xutf8LookupString() it has already been done. */
+ if (len > 0 && input_conv.vc_type != CONV_NONE
+! # ifdef USE_UTF8LOOKUP
+ && !enc_utf8
+! # endif
+ )
+ {
+ int maxlen = len * 4 + 40; /* guessed */
+--- 810,821 ----
+ if (status == XLookupNone || status == XLookupChars)
+ key_sym = XK_VoidSymbol;
+
+ /* Do conversion from 'termencoding' to 'encoding'. When using
+ * Xutf8LookupString() it has already been done. */
+ if (len > 0 && input_conv.vc_type != CONV_NONE
+! # ifdef USE_UTF8LOOKUP
+ && !enc_utf8
+! # endif
+ )
+ {
+ int maxlen = len * 4 + 40; /* guessed */
+***************
+*** 829,835 ****
+ string_alloced = True;
+ len = convert_input(p, len, maxlen);
+ }
+- # endif
+
+ /* Translate CSI to K_CSI, otherwise it could be recognized as the
+ * start of a special key. */
+--- 828,833 ----
+***************
+*** 901,910 ****
+ && (ev_press->state & Mod1Mask)
+ && !(key_sym == XK_BackSpace || key_sym == XK_Delete)
+ && (string[0] & 0x80) == 0
+! #ifdef FEAT_MBYTE
+! && !enc_dbcs
+! #endif
+! )
+ {
+ #if defined(FEAT_MENU) && defined(FEAT_GUI_MOTIF)
+ /* Ignore ALT keys when they are used for the menu only */
+--- 899,905 ----
+ && (ev_press->state & Mod1Mask)
+ && !(key_sym == XK_BackSpace || key_sym == XK_Delete)
+ && (string[0] & 0x80) == 0
+! && !enc_dbcs)
+ {
+ #if defined(FEAT_MENU) && defined(FEAT_GUI_MOTIF)
+ /* Ignore ALT keys when they are used for the menu only */
+***************
+*** 930,936 ****
+ && !(key_sym == XK_Tab && (ev_press->state & ShiftMask)))
+ {
+ string[0] |= 0x80;
+- #ifdef FEAT_MBYTE
+ if (enc_utf8) /* convert to utf-8 */
+ {
+ string[1] = string[0] & 0xbf;
+--- 925,930 ----
+***************
+*** 944,950 ****
+ else
+ len = 2;
+ }
+- #endif
+ }
+ else
+ ev_press->state |= Mod1Mask;
+--- 938,943 ----
+***************
+*** 983,992 ****
+ if (len == -3 || key_sym == XK_space || key_sym == XK_Tab
+ || key_sym == XK_Return || key_sym == XK_Linefeed
+ || key_sym == XK_Escape
+! #ifdef FEAT_MBYTE
+! || (enc_dbcs && len == 1 && (ev_press->state & Mod1Mask))
+! #endif
+! )
+ {
+ modifiers = 0;
+ if (ev_press->state & ShiftMask)
+--- 976,982 ----
+ if (len == -3 || key_sym == XK_space || key_sym == XK_Tab
+ || key_sym == XK_Return || key_sym == XK_Linefeed
+ || key_sym == XK_Escape
+! || (enc_dbcs && len == 1 && (ev_press->state & Mod1Mask)))
+ {
+ modifiers = 0;
+ if (ev_press->state & ShiftMask)
+***************
+*** 2375,2381 ****
+ int flags)
+ {
+ int cells = len;
+- #ifdef FEAT_MBYTE
+ static void *buf = NULL;
+ static int buflen = 0;
+ char_u *p;
+--- 2365,2370 ----
+***************
+*** 2399,2415 ****
+ while (p < s + len)
+ {
+ c = utf_ptr2char(p);
+! # ifdef FEAT_XFONTSET
+ if (current_fontset != NULL)
+ {
+! # ifdef SMALL_WCHAR_T
+ if (c >= 0x10000)
+ c = 0xbf; /* show chars > 0xffff as ? */
+! # endif
+ ((wchar_t *)buf)[wlen] = c;
+ }
+ else
+! # endif
+ {
+ if (c >= 0x10000)
+ c = 0xbf; /* show chars > 0xffff as ? */
+--- 2388,2404 ----
+ while (p < s + len)
+ {
+ c = utf_ptr2char(p);
+! #ifdef FEAT_XFONTSET
+ if (current_fontset != NULL)
+ {
+! # ifdef SMALL_WCHAR_T
+ if (c >= 0x10000)
+ c = 0xbf; /* show chars > 0xffff as ? */
+! # endif
+ ((wchar_t *)buf)[wlen] = c;
+ }
+ else
+! #endif
+ {
+ if (c >= 0x10000)
+ c = 0xbf; /* show chars > 0xffff as ? */
+***************
+*** 2431,2438 ****
+ }
+ }
+
+- #endif
+-
+ #ifdef FEAT_XFONTSET
+ if (current_fontset != NULL)
+ {
+--- 2420,2425 ----
+***************
+*** 2452,2463 ****
+
+ if (flags & DRAW_TRANSP)
+ {
+- #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ XDrawString16(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col),
+ TEXT_Y(row), buf, wlen);
+ else
+- #endif
+ XDrawString(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col),
+ TEXT_Y(row), (char *)s, len);
+ }
+--- 2439,2448 ----
+***************
+*** 2472,2495 ****
+ FILL_Y(row), gui.char_width * cells, gui.char_height);
+ XSetForeground(gui.dpy, gui.text_gc, prev_fg_color);
+
+- #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ XDrawString16(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col),
+ TEXT_Y(row), buf, wlen);
+ else
+- #endif
+ XDrawString(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col),
+ TEXT_Y(row), (char *)s, len);
+ }
+ else
+ {
+ /* XmbDrawImageString has bug, don't use it for fontset. */
+- #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ XDrawImageString16(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col),
+ TEXT_Y(row), buf, wlen);
+ else
+- #endif
+ XDrawImageString(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col),
+ TEXT_Y(row), (char *)s, len);
+ }
+--- 2457,2476 ----
+***************
+*** 2497,2508 ****
+ /* Bold trick: draw the text again with a one-pixel offset. */
+ if (flags & DRAW_BOLD)
+ {
+- #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ XDrawString16(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col) + 1,
+ TEXT_Y(row), buf, wlen);
+ else
+- #endif
+ XDrawString(gui.dpy, gui.wid, gui.text_gc, TEXT_X(col) + 1,
+ TEXT_Y(row), (char *)s, len);
+ }
+--- 2478,2487 ----
+***************
+*** 2628,2637 ****
+ {
+ int w = 1;
+
+- #ifdef FEAT_MBYTE
+ if (mb_lefthalve(gui.row, gui.col))
+ w = 2;
+- #endif
+ gui_mch_set_fg_color(color);
+ XDrawRectangle(gui.dpy, gui.wid, gui.text_gc, FILL_X(gui.col),
+ FILL_Y(gui.row), w * gui.char_width - 1, gui.char_height - 1);
+--- 2607,2614 ----
+*** ../vim-8.1.0805/src/hardcopy.c 2019-01-19 17:43:03.417449145 +0100
+--- src/hardcopy.c 2019-01-24 15:16:45.286266663 +0100
+***************
+*** 102,108 ****
+ static long_u curr_fg;
+ static int page_count;
+
+! #if defined(FEAT_MBYTE) && defined(FEAT_POSTSCRIPT)
+ # define OPT_MBFONT_USECOURIER 0
+ # define OPT_MBFONT_ASCII 1
+ # define OPT_MBFONT_REGULAR 2
+--- 102,108 ----
+ static long_u curr_fg;
+ static int page_count;
+
+! #if defined(FEAT_POSTSCRIPT)
+ # define OPT_MBFONT_USECOURIER 0
+ # define OPT_MBFONT_ASCII 1
+ # define OPT_MBFONT_REGULAR 2
+***************
+*** 149,155 ****
+ return parse_list_options(p_popt, printer_opts, OPT_PRINT_NUM_OPTIONS);
+ }
+
+! #if (defined(FEAT_MBYTE) && defined(FEAT_POSTSCRIPT)) || defined(PROTO)
+ /*
+ * Parse 'printmbfont' and set the flags in "mbfont_opts".
+ * Returns an error message or NULL;
+--- 149,155 ----
+ return parse_list_options(p_popt, printer_opts, OPT_PRINT_NUM_OPTIONS);
+ }
+
+! #if defined(FEAT_POSTSCRIPT) || defined(PROTO)
+ /*
+ * Parse 'printmbfont' and set the flags in "mbfont_opts".
+ * Returns an error message or NULL;
+***************
+*** 456,464 ****
+ int page_line;
+ char_u *tbuf;
+ char_u *p;
+- #ifdef FEAT_MBYTE
+ int l;
+- #endif
+
+ /* Also use the space for the line number. */
+ if (prt_use_number())
+--- 456,462 ----
+***************
+*** 513,536 ****
+ mch_print_start_line(TRUE, page_line);
+ for (p = tbuf; *p != NUL; )
+ {
+! if (mch_print_text_out(p,
+! #ifdef FEAT_MBYTE
+! (l = (*mb_ptr2len)(p))
+! #else
+! 1
+! #endif
+! ))
+ {
+ ++page_line;
+ if (page_line >= 0) /* out of room in header */
+ break;
+ mch_print_start_line(TRUE, page_line);
+ }
+- #ifdef FEAT_MBYTE
+ p += l;
+- #else
+- p++;
+- #endif
+ }
+
+ vim_free(tbuf);
+--- 511,524 ----
+ mch_print_start_line(TRUE, page_line);
+ for (p = tbuf; *p != NUL; )
+ {
+! if (mch_print_text_out(p, (l = (*mb_ptr2len)(p))))
+ {
+ ++page_line;
+ if (page_line >= 0) /* out of room in header */
+ break;
+ mch_print_start_line(TRUE, page_line);
+ }
+ p += l;
+ }
+
+ vim_free(tbuf);
+***************
+*** 867,876 ****
+ for (col = ppos->column; line[col] != NUL && !need_break; col += outputlen)
+ {
+ outputlen = 1;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && (outputlen = (*mb_ptr2len)(line + col)) < 1)
+ outputlen = 1;
+- #endif
+ #ifdef FEAT_SYN_HL
+ /*
+ * syntax highlighting stuff.
+--- 855,862 ----
+***************
+*** 932,942 ****
+ else
+ {
+ need_break = mch_print_text_out(line + col, outputlen);
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ print_pos += (*mb_ptr2cells)(line + col);
+ else
+- #endif
+ print_pos++;
+ }
+ }
+--- 918,926 ----
+***************
+*** 1046,1052 ****
+ {"Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique"}
+ };
+
+- #ifdef FEAT_MBYTE
+ /* Generic font metrics for multi-byte fonts */
+ static struct prt_ps_font_S prt_ps_mb_font =
+ {
+--- 1030,1035 ----
+***************
+*** 1055,1061 ****
+ -250, 805,
+ {NULL, NULL, NULL, NULL}
+ };
+- #endif
+
+ /* Pointer to current font set being used */
+ static struct prt_ps_font_S* prt_ps_font;
+--- 1038,1043 ----
+***************
+*** 1076,1082 ****
+ int has_charset;
+ };
+
+- #ifdef FEAT_MBYTE
+
+ #define CS_JIS_C_1978 (0x01)
+ #define CS_JIS_X_1983 (0x02)
+--- 1058,1063 ----
+***************
+*** 1261,1267 ****
+ "KS_X_1992"
+ }
+ };
+- #endif /* FEAT_MBYTE */
+
+ struct prt_ps_resource_S
+ {
+--- 1242,1247 ----
+***************
+*** 1410,1416 ****
+ static char_u prt_line_buffer[257];
+ static garray_T prt_ps_buffer;
+
+- # ifdef FEAT_MBYTE
+ static int prt_do_conv;
+ static vimconv_T prt_conv;
+
+--- 1390,1395 ----
+***************
+*** 1422,1428 ****
+ static int prt_half_width;
+ static char *prt_ascii_encoding;
+ static char_u prt_hexchar[] = "0123456789abcdef";
+- # endif
+
+ static void
+ prt_write_file_raw_len(char_u *buffer, int bytes)
+--- 1401,1406 ----
+***************
+*** 1494,1511 ****
+ vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
+ "/_%s /VIM-%s /%s ref\n", new_name, encoding, font);
+ prt_write_file(prt_line_buffer);
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ sprintf((char *)prt_line_buffer, "/%s %d %f /_%s sffs\n",
+ new_name, height, 500./prt_ps_courier_font.wx, new_name);
+ else
+- #endif
+ vim_snprintf((char *)prt_line_buffer, sizeof(prt_line_buffer),
+ "/%s %d /_%s ffs\n", new_name, height, new_name);
+ prt_write_file(prt_line_buffer);
+ }
+
+- #ifdef FEAT_MBYTE
+ /*
+ * Write a line to define the CID font.
+ */
+--- 1472,1486 ----
+***************
+*** 1530,1536 ****
+ "/%s %s d\n", new_name, original_name);
+ prt_write_file(prt_line_buffer);
+ }
+- #endif
+
+ /*
+ * Convert a real value into an integer and fractional part as integers, with
+--- 1505,1510 ----
+***************
+*** 1659,1676 ****
+ /* Draw the text
+ * Note: we write text out raw - EBCDIC conversion is handled in the
+ * PostScript world via the font encoding vector. */
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ prt_write_string("<");
+ else
+- #endif
+ prt_write_string("(");
+ prt_write_file_raw_len(prt_ps_buffer.ga_data, prt_ps_buffer.ga_len);
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ prt_write_string(">");
+ else
+- #endif
+ prt_write_string(")");
+ /* Add a moveto if need be and use the appropriate show procedure */
+ if (prt_do_moveto)
+--- 1633,1646 ----
+***************
+*** 2150,2156 ****
+ void
+ mch_print_cleanup(void)
+ {
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ int i;
+--- 2120,2125 ----
+***************
+*** 2171,2177 ****
+ convert_setup(&prt_conv, NULL, NULL);
+ prt_do_conv = FALSE;
+ }
+- #endif
+ if (prt_ps_fd != NULL)
+ {
+ fclose(prt_ps_fd);
+--- 2140,2145 ----
+***************
+*** 2250,2262 ****
+ if (prt_use_number())
+ {
+ prt_number_width = PRINT_NUMBER_WIDTH * prt_char_width;
+- #ifdef FEAT_MBYTE
+ /* If we are outputting multi-byte characters then line numbers will be
+ * printed with half width characters
+ */
+ if (prt_out_mbyte)
+ prt_number_width /= 2;
+- #endif
+ prt_left_margin += prt_number_width;
+ }
+ else
+--- 2218,2228 ----
+***************
+*** 2265,2271 ****
+ return (int)((prt_right_margin - prt_left_margin) / prt_char_width);
+ }
+
+- #ifdef FEAT_MBYTE
+ static int
+ prt_build_cid_fontname(int font, char_u *name, int name_len)
+ {
+--- 2231,2236 ----
+***************
+*** 2279,2285 ****
+
+ return TRUE;
+ }
+- #endif
+
+ /*
+ * Get number of lines of text that fit on a page (excluding the header).
+--- 2244,2249 ----
+***************
+*** 2315,2321 ****
+ return lpp - prt_header_height();
+ }
+
+- #ifdef FEAT_MBYTE
+ static int
+ prt_match_encoding(
+ char *p_encoding,
+--- 2279,2284 ----
+***************
+*** 2368,2374 ****
+ }
+ return FALSE;
+ }
+- #endif
+
+ int
+ mch_print_init(
+--- 2331,2336 ----
+***************
+*** 2385,2398 ****
+ double right;
+ double top;
+ double bottom;
+- #ifdef FEAT_MBYTE
+ int props;
+ int cmap = 0;
+ char_u *p_encoding;
+ struct prt_ps_encoding_S *p_mbenc;
+ struct prt_ps_encoding_S *p_mbenc_first;
+ struct prt_ps_charset_S *p_mbchar = NULL;
+- #endif
+
+ #if 0
+ /*
+--- 2347,2358 ----
+***************
+*** 2415,2421 ****
+ /*
+ * Set up font and encoding.
+ */
+- #ifdef FEAT_MBYTE
+ p_encoding = enc_skip(p_penc);
+ if (*p_encoding == NUL)
+ p_encoding = enc_skip(p_enc);
+--- 2375,2380 ----
+***************
+*** 2542,2552 ****
+ prt_ps_font = &prt_ps_mb_font;
+ }
+ else
+- #endif
+ {
+- #ifdef FEAT_MBYTE
+ prt_use_courier = FALSE;
+- #endif
+ prt_ps_font = &prt_ps_courier_font;
+ }
+
+--- 2501,2508 ----
+***************
+*** 2699,2708 ****
+ }
+
+ prt_bufsiz = psettings->chars_per_line;
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ prt_bufsiz *= 2;
+- #endif
+ ga_init2(&prt_ps_buffer, (int)sizeof(char), prt_bufsiz);
+
+ prt_page_num = 0;
+--- 2655,2662 ----
+***************
+*** 2781,2807 ****
+ char buffer[256];
+ char_u *p_encoding;
+ char_u *p;
+- #ifdef FEAT_MBYTE
+ struct prt_ps_resource_S *res_cidfont;
+ struct prt_ps_resource_S *res_cmap;
+- #endif
+ int retval = FALSE;
+
+ res_prolog = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+ res_encoding = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+- #ifdef FEAT_MBYTE
+ res_cidfont = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+ res_cmap = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+- #endif
+ if (res_prolog == NULL || res_encoding == NULL
+! #ifdef FEAT_MBYTE
+! || res_cidfont == NULL || res_cmap == NULL
+! #endif
+! )
+ goto theend;
+
+ /*
+--- 2735,2754 ----
+ char buffer[256];
+ char_u *p_encoding;
+ char_u *p;
+ struct prt_ps_resource_S *res_cidfont;
+ struct prt_ps_resource_S *res_cmap;
+ int retval = FALSE;
+
+ res_prolog = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+ res_encoding = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+ res_cidfont = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+ res_cmap = (struct prt_ps_resource_S *)
+ alloc(sizeof(struct prt_ps_resource_S));
+ if (res_prolog == NULL || res_encoding == NULL
+! || res_cidfont == NULL || res_cmap == NULL)
+ goto theend;
+
+ /*
+***************
+*** 2863,2873 ****
+ prt_mediasize[prt_media].height,
+ (double)0, NULL, NULL);
+ /* Define fonts needed */
+- #ifdef FEAT_MBYTE
+ if (!prt_out_mbyte || prt_use_courier)
+- #endif
+ prt_dsc_font_resource("DocumentNeededResources", &prt_ps_courier_font);
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ prt_dsc_font_resource((prt_use_courier ? NULL
+--- 2810,2817 ----
+***************
+*** 2875,2881 ****
+ if (!prt_custom_cmap)
+ prt_dsc_resources(NULL, "cmap", prt_cmap);
+ }
+- #endif
+
+ /* Search for external resources VIM supplies */
+ if (!prt_find_resource("prolog", res_prolog))
+--- 2819,2824 ----
+***************
+*** 2887,2893 ****
+ goto theend;
+ if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
+ goto theend;
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Look for required version of multi-byte printing procset */
+--- 2830,2835 ----
+***************
+*** 2901,2923 ****
+ if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
+ goto theend;
+ }
+- #endif
+
+ /* Find an encoding to use for printing.
+ * Check 'printencoding'. If not set or not found, then use 'encoding'. If
+ * that cannot be found then default to "latin1".
+ * Note: VIM specific encoding header is always skipped.
+ */
+- #ifdef FEAT_MBYTE
+ if (!prt_out_mbyte)
+ {
+- #endif
+ p_encoding = enc_skip(p_penc);
+ if (*p_encoding == NUL
+ || !prt_find_resource((char *)p_encoding, res_encoding))
+ {
+ /* 'printencoding' not set or not supported - find alternate */
+- #ifdef FEAT_MBYTE
+ int props;
+
+ p_encoding = enc_skip(p_enc);
+--- 2843,2861 ----
+***************
+*** 2925,2931 ****
+ if (!(props & ENC_8BIT)
+ || !prt_find_resource((char *)p_encoding, res_encoding))
+ /* 8-bit 'encoding' is not supported */
+- #endif
+ {
+ /* Use latin1 as default printing encoding */
+ p_encoding = (char_u *)"latin1";
+--- 2863,2868 ----
+***************
+*** 2941,2947 ****
+ goto theend;
+ /* For the moment there are no checks on encoding resource files to
+ * perform */
+- #ifdef FEAT_MBYTE
+ }
+ else
+ {
+--- 2878,2883 ----
+***************
+*** 2989,3002 ****
+ if (!prt_open_resource(res_cmap))
+ goto theend;
+ }
+- #endif
+
+ /* List resources supplied */
+ STRCPY(buffer, res_prolog->title);
+ STRCAT(buffer, " ");
+ STRCAT(buffer, res_prolog->version);
+ prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ STRCPY(buffer, res_cidfont->title);
+--- 2925,2936 ----
+***************
+*** 3013,3019 ****
+ }
+ }
+ if (!prt_out_mbyte || prt_use_courier)
+- #endif
+ {
+ STRCPY(buffer, res_encoding->title);
+ STRCAT(buffer, " ");
+--- 2947,2952 ----
+***************
+*** 3035,3045 ****
+ prt_dsc_noarg("BeginDefaults");
+
+ /* List font resources most likely common to all pages */
+- #ifdef FEAT_MBYTE
+ if (!prt_out_mbyte || prt_use_courier)
+- #endif
+ prt_dsc_font_resource("PageResources", &prt_ps_courier_font);
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ prt_dsc_font_resource((prt_use_courier ? NULL : "PageResources"),
+--- 2968,2975 ----
+***************
+*** 3047,3053 ****
+ if (!prt_custom_cmap)
+ prt_dsc_resources(NULL, "cmap", prt_cmap);
+ }
+- #endif
+
+ /* Paper will be used for all pages */
+ prt_dsc_textline("PageMedia", prt_mediasize[prt_media].name);
+--- 2977,2982 ----
+***************
+*** 3062,3068 ****
+ /* Add required procsets - NOTE: order is important! */
+ if (!prt_add_resource(res_prolog))
+ goto theend;
+- #ifdef FEAT_MBYTE
+ if (prt_out_mbyte)
+ {
+ /* Add CID font procset, and any user supplied CMap */
+--- 2991,2996 ----
+***************
+*** 3071,3081 ****
+ if (prt_custom_cmap && !prt_add_resource(res_cmap))
+ goto theend;
+ }
+- #endif
+
+- #ifdef FEAT_MBYTE
+ if (!prt_out_mbyte || prt_use_courier)
+- #endif
+ /* There will be only one Roman font encoding to be included in the PS
+ * file. */
+ if (!prt_add_resource(res_encoding))
+--- 2999,3006 ----
+***************
+*** 3102,3115 ****
+ prt_write_string("c\n");
+
+ /* Font resource inclusion and definition */
+- #ifdef FEAT_MBYTE
+ if (!prt_out_mbyte || prt_use_courier)
+ {
+ /* When using Courier for ASCII range when printing multi-byte, need to
+ * pick up ASCII encoding to use with it. */
+ if (prt_use_courier)
+ p_encoding = (char_u *)prt_ascii_encoding;
+- #endif
+ prt_dsc_resources("IncludeResource", "font",
+ prt_ps_courier_font.ps_fontname[PRT_PS_FONT_ROMAN]);
+ prt_def_font("F0", (char *)p_encoding, (int)prt_line_height,
+--- 3027,3038 ----
+***************
+*** 3126,3132 ****
+ prt_ps_courier_font.ps_fontname[PRT_PS_FONT_BOLDOBLIQUE]);
+ prt_def_font("F3", (char *)p_encoding, (int)prt_line_height,
+ prt_ps_courier_font.ps_fontname[PRT_PS_FONT_BOLDOBLIQUE]);
+- #ifdef FEAT_MBYTE
+ }
+ if (prt_out_mbyte)
+ {
+--- 3049,3054 ----
+***************
+*** 3182,3188 ****
+ /* Use BOLD for BOLDOBLIQUE */
+ prt_dup_cidfont("CF1", "CF3");
+ }
+- #endif
+
+ /* Misc constant vars used for underlining and background rects */
+ prt_def_var("UO", PRT_PS_FONT_TO_USER(prt_line_height,
+--- 3104,3109 ----
+***************
+*** 3199,3208 ****
+ theend:
+ vim_free(res_prolog);
+ vim_free(res_encoding);
+- #ifdef FEAT_MBYTE
+ vim_free(res_cidfont);
+ vim_free(res_cmap);
+- #endif
+
+ return retval;
+ }
+--- 3120,3127 ----
+***************
+*** 3269,3280 ****
+ prt_dsc_noarg("BeginPageSetup");
+
+ prt_write_string("sv\n0 g\n");
+- #ifdef FEAT_MBYTE
+ prt_in_ascii = !prt_out_mbyte;
+ if (prt_out_mbyte)
+ prt_write_string("CF0 sf\n");
+ else
+- #endif
+ prt_write_string("F0 sf\n");
+ prt_fgcol = PRCOLOR_BLACK;
+ prt_bgcol = PRCOLOR_WHITE;
+--- 3188,3197 ----
+***************
+*** 3318,3326 ****
+
+ prt_attribute_change = TRUE;
+ prt_need_moveto = TRUE;
+- #ifdef FEAT_MBYTE
+ prt_half_width = FALSE;
+- #endif
+ }
+
+ int
+--- 3235,3241 ----
+***************
+*** 3332,3346 ****
+ char_u ch_buff[8];
+ float char_width;
+ float next_pos;
+- #ifdef FEAT_MBYTE
+ int in_ascii;
+ int half_width;
+ char_u *tofree = NULL;
+- #endif
+
+ char_width = prt_char_width;
+
+- #ifdef FEAT_MBYTE
+ /* Ideally VIM would create a rearranged CID font to combine a Roman and
+ * CJKV font to do what VIM is doing here - use a Roman font for characters
+ * in the ASCII range, and the original CID font for everything else.
+--- 3247,3258 ----
+***************
+*** 3392,3398 ****
+ prt_attribute_change = TRUE;
+ }
+ }
+- #endif
+
+ /* Output any required changes to the graphics state, after flushing any
+ * text buffered so far.
+--- 3304,3309 ----
+***************
+*** 3413,3423 ****
+ }
+ if (prt_need_font)
+ {
+- #ifdef FEAT_MBYTE
+ if (!prt_in_ascii)
+ prt_write_string("CF");
+ else
+- #endif
+ prt_write_string("F");
+ prt_write_int(prt_font);
+ prt_write_string("sf\n");
+--- 3324,3332 ----
+***************
+*** 3459,3465 ****
+ prt_attribute_change = FALSE;
+ }
+
+- #ifdef FEAT_MBYTE
+ if (prt_do_conv)
+ {
+ /* Convert from multi-byte to 8-bit encoding */
+--- 3368,3373 ----
+***************
+*** 3486,3492 ****
+ }
+ }
+ else
+- #endif
+ {
+ /* Add next character to buffer of characters to output.
+ * Note: One printed character may require several PS characters to
+--- 3394,3399 ----
+***************
+*** 3528,3537 ****
+ ga_append(&prt_ps_buffer, ch);
+ }
+
+- #ifdef FEAT_MBYTE
+ /* Need to free any translated characters */
+ vim_free(tofree);
+- #endif
+
+ prt_text_run += char_width;
+ prt_pos_x += char_width;
+--- 3435,3442 ----
+*** ../vim-8.1.0805/src/if_xcmdsrv.c 2019-01-19 18:23:38.017218438 +0100
+--- src/if_xcmdsrv.c 2019-01-24 15:17:19.318047080 +0100
+***************
+*** 440,459 ****
+ * comm window in the communication window.
+ * Length must be computed exactly!
+ */
+- #ifdef FEAT_MBYTE
+ length = STRLEN(name) + STRLEN(p_enc) + STRLEN(cmd) + 14;
+- #else
+- length = STRLEN(name) + STRLEN(cmd) + 10;
+- #endif
+ property = (char_u *)alloc((unsigned)length + 30);
+
+- #ifdef FEAT_MBYTE
+ sprintf((char *)property, "%c%c%c-n %s%c-E %s%c-s %s",
+ 0, asExpr ? 'c' : 'k', 0, name, 0, p_enc, 0, cmd);
+- #else
+- sprintf((char *)property, "%c%c%c-n %s%c-s %s",
+- 0, asExpr ? 'c' : 'k', 0, name, 0, cmd);
+- #endif
+ if (name == loosename)
+ vim_free(loosename);
+ /* Add a back reference to our comm window */
+--- 440,450 ----
+***************
+*** 758,777 ****
+ if (!WindowValid(dpy, win))
+ return -1;
+
+- #ifdef FEAT_MBYTE
+ length = STRLEN(p_enc) + STRLEN(str) + 14;
+- #else
+- length = STRLEN(str) + 10;
+- #endif
+ if ((property = (char_u *)alloc((unsigned)length + 30)) != NULL)
+ {
+- #ifdef FEAT_MBYTE
+ sprintf((char *)property, "%cn%c-E %s%c-n %s%c-w %x",
+ 0, 0, p_enc, 0, str, 0, (unsigned int)commWindow);
+- #else
+- sprintf((char *)property, "%cn%c-n %s%c-w %x",
+- 0, 0, str, 0, (unsigned int)commWindow);
+- #endif
+ /* Add length of what "%x" resulted in. */
+ length += STRLEN(property + length);
+ res = AppendPropCarefully(dpy, win, commProperty, property, length + 1);
+--- 749,759 ----
+***************
+*** 1334,1350 ****
+
+ /* Initialize the result property. */
+ ga_init2(&reply, 1, 100);
+- #ifdef FEAT_MBYTE
+ (void)ga_grow(&reply, 50 + STRLEN(p_enc));
+ sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
+ 0, 0, p_enc, 0, serial, 0);
+ reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
+- #else
+- (void)ga_grow(&reply, 50);
+- sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
+- 0, 0, serial, 0);
+- reply.ga_len = 10 + STRLEN(serial);
+- #endif
+
+ /* Evaluate the expression and return the result. */
+ if (res != NULL)
+--- 1316,1325 ----
+*** ../vim-8.1.0805/src/json.c 2019-01-20 15:30:36.885328746 +0100
+--- src/json.c 2019-01-24 15:18:12.385703726 +0100
+***************
+*** 96,102 ****
+ ga_concat(gap, (char_u *)"\"\"");
+ else
+ {
+! #if defined(FEAT_MBYTE) && defined(USE_ICONV)
+ vimconv_T conv;
+ char_u *converted = NULL;
+
+--- 96,102 ----
+ ga_concat(gap, (char_u *)"\"\"");
+ else
+ {
+! #if defined(USE_ICONV)
+ vimconv_T conv;
+ char_u *converted = NULL;
+
+***************
+*** 115,126 ****
+ while (*res != NUL)
+ {
+ int c;
+- #ifdef FEAT_MBYTE
+ /* always use utf-8 encoding, ignore 'encoding' */
+ c = utf_ptr2char(res);
+- #else
+- c = *res;
+- #endif
+
+ switch (c)
+ {
+--- 115,122 ----
+***************
+*** 142,153 ****
+ default:
+ if (c >= 0x20)
+ {
+- #ifdef FEAT_MBYTE
+ numbuf[utf_char2bytes(c, numbuf)] = NUL;
+- #else
+- numbuf[0] = c;
+- numbuf[1] = NUL;
+- #endif
+ ga_concat(gap, numbuf);
+ }
+ else
+--- 138,144 ----
+***************
+*** 157,170 ****
+ ga_concat(gap, numbuf);
+ }
+ }
+- #ifdef FEAT_MBYTE
+ res += utf_ptr2len(res);
+- #else
+- ++res;
+- #endif
+ }
+ ga_append(gap, '"');
+! #if defined(FEAT_MBYTE) && defined(USE_ICONV)
+ vim_free(converted);
+ #endif
+ }
+--- 148,157 ----
+ ga_concat(gap, numbuf);
+ }
+ }
+ res += utf_ptr2len(res);
+ }
+ ga_append(gap, '"');
+! #if defined(USE_ICONV)
+ vim_free(converted);
+ #endif
+ }
+***************
+*** 421,431 ****
+ {
+ /* The JSON is always expected to be utf-8, thus use utf functions
+ * here. The string is converted below if needed. */
+! if (*p == NUL || p[1] == NUL
+! #ifdef FEAT_MBYTE
+! || utf_ptr2len(p) < utf_byte2len(*p)
+! #endif
+! )
+ {
+ /* Not enough bytes to make a character or end of the string. Get
+ * more if possible. */
+--- 408,414 ----
+ {
+ /* The JSON is always expected to be utf-8, thus use utf functions
+ * here. The string is converted below if needed. */
+! if (*p == NUL || p[1] == NUL || utf_ptr2len(p) < utf_byte2len(*p))
+ {
+ /* Not enough bytes to make a character or end of the string. Get
+ * more if possible. */
+***************
+*** 488,500 ****
+ }
+ if (res != NULL)
+ {
+- #ifdef FEAT_MBYTE
+ char_u buf[NUMBUFLEN];
+ buf[utf_char2bytes((int)nr, buf)] = NUL;
+ ga_concat(&ga, buf);
+- #else
+- ga_append(&ga, (int)nr);
+- #endif
+ }
+ break;
+ default:
+--- 471,479 ----
+***************
+*** 511,521 ****
+ }
+ else
+ {
+- #ifdef FEAT_MBYTE
+ len = utf_ptr2len(p);
+- #else
+- len = 1;
+- #endif
+ if (res != NULL)
+ {
+ if (ga_grow(&ga, len) == FAIL)
+--- 490,496 ----
+***************
+*** 538,544 ****
+ {
+ ga_append(&ga, NUL);
+ res->v_type = VAR_STRING;
+! #if defined(FEAT_MBYTE) && defined(USE_ICONV)
+ if (!enc_utf8)
+ {
+ vimconv_T conv;
+--- 513,519 ----
+ {
+ ga_append(&ga, NUL);
+ res->v_type = VAR_STRING;
+! #if defined(USE_ICONV)
+ if (!enc_utf8)
+ {
+ vimconv_T conv;
+*** ../vim-8.1.0805/src/kword_test.c 2017-01-28 16:33:18.000000000 +0100
+--- src/kword_test.c 2019-01-24 15:18:32.497573317 +0100
+***************
+*** 21,27 ****
+ /* This file has to be included because the tested functions are static */
+ #include "charset.c"
+
+- #ifdef FEAT_MBYTE
+ /*
+ * Test the results of vim_iswordc() and vim_iswordp() are matched.
+ */
+--- 21,26 ----
+***************
+*** 73,85 ****
+ }
+ }
+ }
+- #endif
+
+ int
+ main(void)
+ {
+- #ifdef FEAT_MBYTE
+ test_isword_funcs_utf8();
+- #endif
+ return 0;
+ }
+--- 72,81 ----
+*** ../vim-8.1.0805/src/main.c 2019-01-19 21:06:55.344138786 +0100
+--- src/main.c 2019-01-24 15:19:25.293230303 +0100
+***************
+*** 119,125 ****
+ */
+ mch_early_init();
+
+! #if defined(WIN32) && defined(FEAT_MBYTE)
+ /*
+ * MinGW expands command line arguments, which confuses our code to
+ * convert when 'encoding' changes. Get the unexpanded arguments.
+--- 119,125 ----
+ */
+ mch_early_init();
+
+! #if defined(WIN32)
+ /*
+ * MinGW expands command line arguments, which confuses our code to
+ * convert when 'encoding' changes. Get the unexpanded arguments.
+***************
+*** 250,256 ****
+ params.fname = alist_name(&GARGLIST[0]);
+ }
+
+! #if defined(WIN32) && defined(FEAT_MBYTE)
+ {
+ extern void set_alist_count(void);
+
+--- 250,256 ----
+ params.fname = alist_name(&GARGLIST[0]);
+ }
+
+! #if defined(WIN32)
+ {
+ extern void set_alist_count(void);
+
+***************
+*** 592,600 ****
+ {
+ char_u *enc = NULL;
+
+- # ifdef FEAT_MBYTE
+ enc = p_menc;
+- # endif
+ if (params.use_ef != NULL)
+ set_string_option_direct((char_u *)"ef", -1,
+ params.use_ef, OPT_FREE, SID_CARG);
+--- 592,598 ----
+***************
+*** 813,819 ****
+ /* Must come before the may_req_ calls. */
+ starting = 0;
+
+! #if defined(FEAT_TERMRESPONSE) && defined(FEAT_MBYTE)
+ /* Must be done before redrawing, puts a few characters on the screen. */
+ may_req_ambiguous_char_width();
+ #endif
+--- 811,817 ----
+ /* Must come before the may_req_ calls. */
+ starting = 0;
+
+! #if defined(FEAT_TERMRESPONSE)
+ /* Must be done before redrawing, puts a few characters on the screen. */
+ may_req_ambiguous_char_width();
+ #endif
+***************
+*** 926,934 ****
+ {
+ cmdline_init();
+
+- #ifdef FEAT_MBYTE
+ (void)mb_init(); /* init mb_bytelen_tab[] to ones */
+- #endif
+ #ifdef FEAT_EVAL
+ eval_init(); /* init global variables */
+ #endif
+--- 924,930 ----
+***************
+*** 1549,1555 ****
+ if (garbage_collect_at_exit)
+ garbage_collect(FALSE);
+ #endif
+! #if defined(WIN32) && defined(FEAT_MBYTE)
+ free_cmd_argsW();
+ #endif
+
+--- 1545,1551 ----
+ if (garbage_collect_at_exit)
+ garbage_collect(FALSE);
+ #endif
+! #if defined(WIN32)
+ free_cmd_argsW();
+ #endif
+
+***************
+*** 2501,2507 ****
+ #endif
+ );
+
+! #if defined(FEAT_MBYTE) && defined(WIN32)
+ {
+ /* Remember this argument has been added to the argument list.
+ * Needed when 'encoding' is changed. */
+--- 2497,2503 ----
+ #endif
+ );
+
+! #if defined(WIN32)
+ {
+ /* Remember this argument has been added to the argument list.
+ * Needed when 'encoding' is changed. */
+***************
+*** 2584,2590 ****
+ #if defined(WIN3264) && !defined(FEAT_GUI_W32)
+ if (is_cygpty_used())
+ {
+! # if defined(FEAT_MBYTE) && defined(HAVE_BIND_TEXTDOMAIN_CODESET) \
+ && defined(FEAT_GETTEXT)
+ char *s, *tofree = NULL;
+
+--- 2580,2586 ----
+ #if defined(WIN3264) && !defined(FEAT_GUI_W32)
+ if (is_cygpty_used())
+ {
+! # if defined(HAVE_BIND_TEXTDOMAIN_CODESET) \
+ && defined(FEAT_GETTEXT)
+ char *s, *tofree = NULL;
+
+***************
+*** 3660,3668 ****
+ {
+ cmdsrv_main(&parmp->argc, parmp->argv,
+ parmp->serverName_arg, &parmp->serverStr);
+- # ifdef FEAT_MBYTE
+ parmp->serverStrEnc = vim_strsave(p_enc);
+- # endif
+ }
+
+ /* If we're still running, get the name to register ourselves.
+--- 3656,3662 ----
+***************
+*** 4281,4287 ****
+ char_u *res = data;
+
+ *tofree = NULL;
+- # ifdef FEAT_MBYTE
+ if (client_enc != NULL && p_enc != NULL)
+ {
+ vimconv_T vimconv;
+--- 4275,4280 ----
+***************
+*** 4298,4304 ****
+ }
+ convert_setup(&vimconv, NULL, NULL);
+ }
+- # endif
+ return res;
+ }
+ #endif
+--- 4291,4296 ----
+*** ../vim-8.1.0805/src/mbyte.c 2019-01-20 15:30:36.885328746 +0100
+--- src/mbyte.c 2019-01-24 15:21:25.168448247 +0100
+***************
+*** 136,143 ****
+ # endif
+ #endif
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+-
+ static int dbcs_char2len(int c);
+ static int dbcs_char2bytes(int c, char_u *buf);
+ static int dbcs_ptr2len(char_u *p);
+--- 136,141 ----
+***************
+*** 211,219 ****
+ }
+ #endif
+
+- #endif
+
+- #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT) || defined(PROTO)
+ /*
+ * Canonical encoding names and their properties.
+ * "iso-8859-n" is handled by enc_canonize() directly.
+--- 209,215 ----
+***************
+*** 456,464 ****
+ return -1;
+ }
+
+- #endif
+-
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+
+ /*
+ * Find canonical encoding "name" in the list and return its properties.
+--- 452,457 ----
+***************
+*** 4294,4302 ****
+ return col - 1;
+ return col;
+ }
+- #endif
+
+- #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT) || defined(PROTO)
+ static int enc_alias_search(char_u *name);
+
+ /*
+--- 4287,4293 ----
+***************
+*** 4325,4331 ****
+ char_u *p, *s;
+ int i;
+
+- # ifdef FEAT_MBYTE
+ if (STRCMP(enc, "default") == 0)
+ {
+ /* Use the default encoding as it's found by set_init_1(). */
+--- 4316,4321 ----
+***************
+*** 4334,4340 ****
+ r = (char_u *)"latin1";
+ return vim_strsave(r);
+ }
+- # endif
+
+ /* copy "enc" to allocated memory, with room for two '-' */
+ r = alloc((unsigned)(STRLEN(enc) + 3));
+--- 4324,4329 ----
+***************
+*** 4406,4420 ****
+ return enc_alias_table[i].canon;
+ return -1;
+ }
+- #endif
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+
+! # ifdef HAVE_LANGINFO_H
+! # include <langinfo.h>
+! # endif
+
+! # ifndef FEAT_GUI_W32
+ /*
+ * Get the canonicalized encoding from the specified locale string "locale"
+ * or from the environment variables LC_ALL, LC_CTYPE and LANG.
+--- 4395,4407 ----
+ return enc_alias_table[i].canon;
+ return -1;
+ }
+
+
+! #ifdef HAVE_LANGINFO_H
+! # include <langinfo.h>
+! #endif
+
+! #ifndef FEAT_GUI_W32
+ /*
+ * Get the canonicalized encoding from the specified locale string "locale"
+ * or from the environment variables LC_ALL, LC_CTYPE and LANG.
+***************
+*** 4472,4478 ****
+
+ return enc_canonize((char_u *)buf);
+ }
+! # endif
+
+ /*
+ * Get the canonicalized encoding of the current locale.
+--- 4459,4465 ----
+
+ return enc_canonize((char_u *)buf);
+ }
+! #endif
+
+ /*
+ * Get the canonicalized encoding of the current locale.
+***************
+*** 4481,4487 ****
+ char_u *
+ enc_locale(void)
+ {
+! # ifdef WIN3264
+ char buf[50];
+ long acp = GetACP();
+
+--- 4468,4474 ----
+ char_u *
+ enc_locale(void)
+ {
+! #ifdef WIN3264
+ char buf[50];
+ long acp = GetACP();
+
+***************
+*** 4493,4511 ****
+ sprintf(buf, "cp%ld", acp);
+
+ return enc_canonize((char_u *)buf);
+! # else
+ char *s;
+
+! # ifdef HAVE_NL_LANGINFO_CODESET
+ if ((s = nl_langinfo(CODESET)) == NULL || *s == NUL)
+! # endif
+! # if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ if ((s = setlocale(LC_CTYPE, NULL)) == NULL || *s == NUL)
+! # endif
+ s = NULL;
+
+ return enc_locale_env(s);
+! # endif
+ }
+
+ # if defined(WIN3264) || defined(PROTO) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
+--- 4480,4498 ----
+ sprintf(buf, "cp%ld", acp);
+
+ return enc_canonize((char_u *)buf);
+! #else
+ char *s;
+
+! # ifdef HAVE_NL_LANGINFO_CODESET
+ if ((s = nl_langinfo(CODESET)) == NULL || *s == NUL)
+! # endif
+! # if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ if ((s = setlocale(LC_CTYPE, NULL)) == NULL || *s == NUL)
+! # endif
+ s = NULL;
+
+ return enc_locale_env(s);
+! #endif
+ }
+
+ # if defined(WIN3264) || defined(PROTO) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
+***************
+*** 4800,4806 ****
+ # endif /* DYNAMIC_ICONV */
+ # endif /* USE_ICONV */
+
+- #endif /* FEAT_MBYTE */
+
+ #ifdef FEAT_GUI
+ # define USE_IMACTIVATEFUNC (!gui.in_use && *p_imaf != NUL)
+--- 4787,4792 ----
+***************
+*** 4810,4817 ****
+ # define USE_IMSTATUSFUNC (*p_imsf != NUL)
+ #endif
+
+! #if defined(FEAT_EVAL) && defined(FEAT_MBYTE) \
+! && (defined(FEAT_XIM) || defined(IME_WITHOUT_XIM))
+ static void
+ call_imactivatefunc(int active)
+ {
+--- 4796,4802 ----
+ # define USE_IMSTATUSFUNC (*p_imsf != NUL)
+ #endif
+
+! #if defined(FEAT_EVAL) && (defined(FEAT_XIM) || defined(IME_WITHOUT_XIM))
+ static void
+ call_imactivatefunc(int active)
+ {
+***************
+*** 6482,6488 ****
+ int
+ im_get_status(void)
+ {
+! # if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
+ if (USE_IMSTATUSFUNC)
+ return call_imstatusfunc();
+ # endif
+--- 6467,6473 ----
+ int
+ im_get_status(void)
+ {
+! # if defined(FEAT_EVAL)
+ if (USE_IMSTATUSFUNC)
+ return call_imstatusfunc();
+ # endif
+***************
+*** 6492,6498 ****
+ void
+ im_set_active(int active_arg)
+ {
+! # if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
+ int active = !p_imdisable && active_arg;
+
+ if (USE_IMACTIVATEFUNC && active != im_get_status())
+--- 6477,6483 ----
+ void
+ im_set_active(int active_arg)
+ {
+! # if defined(FEAT_EVAL)
+ int active = !p_imdisable && active_arg;
+
+ if (USE_IMACTIVATEFUNC && active != im_get_status())
+***************
+*** 6513,6519 ****
+
+ #endif /* FEAT_XIM */
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+
+ /*
+ * Setup "vcp" for conversion from "from" to "to".
+--- 6498,6503 ----
+***************
+*** 6548,6557 ****
+ int to_is_utf8;
+
+ /* Reset to no conversion. */
+! # ifdef USE_ICONV
+ if (vcp->vc_type == CONV_ICONV && vcp->vc_fd != (iconv_t)-1)
+ iconv_close(vcp->vc_fd);
+! # endif
+ vcp->vc_type = CONV_NONE;
+ vcp->vc_factor = 1;
+ vcp->vc_fail = FALSE;
+--- 6532,6541 ----
+ int to_is_utf8;
+
+ /* Reset to no conversion. */
+! #ifdef USE_ICONV
+ if (vcp->vc_type == CONV_ICONV && vcp->vc_fd != (iconv_t)-1)
+ iconv_close(vcp->vc_fd);
+! #endif
+ vcp->vc_type = CONV_NONE;
+ vcp->vc_factor = 1;
+ vcp->vc_fail = FALSE;
+***************
+*** 6624,6630 ****
+ vcp->vc_type = CONV_UTF8_MAC;
+ }
+ #endif
+! # ifdef USE_ICONV
+ else
+ {
+ /* Use iconv() for conversion. */
+--- 6608,6614 ----
+ vcp->vc_type = CONV_UTF8_MAC;
+ }
+ #endif
+! #ifdef USE_ICONV
+ else
+ {
+ /* Use iconv() for conversion. */
+***************
+*** 6637,6643 ****
+ vcp->vc_factor = 4; /* could be longer too... */
+ }
+ }
+! # endif
+ if (vcp->vc_type == CONV_NONE)
+ return FAIL;
+
+--- 6621,6627 ----
+ vcp->vc_factor = 4; /* could be longer too... */
+ }
+ }
+! #endif
+ if (vcp->vc_type == CONV_NONE)
+ return FAIL;
+
+***************
+*** 6958,6961 ****
+
+ return retval;
+ }
+- #endif
+--- 6942,6944 ----
+*** ../vim-8.1.0805/src/memline.c 2019-01-19 17:43:03.417449145 +0100
+--- src/memline.c 2019-01-24 15:21:52.472269571 +0100
+***************
+*** 240,248 ****
+ static void ml_upd_block0(buf_T *buf, upd_block0_T what);
+ static void set_b0_fname(ZERO_BL *, buf_T *buf);
+ static void set_b0_dir_flag(ZERO_BL *b0p, buf_T *buf);
+- #ifdef FEAT_MBYTE
+ static void add_b0_fenc(ZERO_BL *b0p, buf_T *buf);
+- #endif
+ static time_t swapfile_info(char_u *);
+ static int recov_file_names(char_u **, char_u *, int prepend_dot);
+ static int ml_append_int(buf_T *, linenr_T, char_u *, colnr_T, int, int);
+--- 240,246 ----
+***************
+*** 1033,1042 ****
+ }
+ }
+
+- #ifdef FEAT_MBYTE
+ /* Also add the 'fileencoding' if there is room. */
+ add_b0_fenc(b0p, curbuf);
+- #endif
+ }
+
+ /*
+--- 1031,1038 ----
+***************
+*** 1054,1060 ****
+ b0p->b0_flags &= ~B0_SAME_DIR;
+ }
+
+- #ifdef FEAT_MBYTE
+ /*
+ * When there is room, add the 'fileencoding' to block zero.
+ */
+--- 1050,1055 ----
+***************
+*** 1066,1078 ****
+ int n;
+ int size = B0_FNAME_SIZE_NOCRYPT;
+
+! # ifdef FEAT_CRYPT
+ /* Without encryption use the same offset as in Vim 7.2 to be compatible.
+ * With encryption it's OK to move elsewhere, the swap file is not
+ * compatible anyway. */
+ if (*buf->b_p_key != NUL)
+ size = B0_FNAME_SIZE_CRYPT;
+! # endif
+
+ n = (int)STRLEN(buf->b_p_fenc);
+ if ((int)STRLEN(b0p->b0_fname) + n + 1 > size)
+--- 1061,1073 ----
+ int n;
+ int size = B0_FNAME_SIZE_NOCRYPT;
+
+! #ifdef FEAT_CRYPT
+ /* Without encryption use the same offset as in Vim 7.2 to be compatible.
+ * With encryption it's OK to move elsewhere, the swap file is not
+ * compatible anyway. */
+ if (*buf->b_p_key != NUL)
+ size = B0_FNAME_SIZE_CRYPT;
+! #endif
+
+ n = (int)STRLEN(buf->b_p_fenc);
+ if ((int)STRLEN(b0p->b0_fname) + n + 1 > size)
+***************
+*** 1085,1091 ****
+ b0p->b0_flags |= B0_HAS_FENC;
+ }
+ }
+- #endif
+
+
+ /*
+--- 1080,1085 ----
+***************
+*** 5103,5111 ****
+ b0p->b0_dirty = buf->b_changed ? B0_DIRTY : 0;
+ b0p->b0_flags = (b0p->b0_flags & ~B0_FF_MASK)
+ | (get_fileformat(buf) + 1);
+- #ifdef FEAT_MBYTE
+ add_b0_fenc(b0p, buf);
+- #endif
+ hp->bh_flags |= BH_DIRTY;
+ mf_sync(buf->b_ml.ml_mfp, MFS_ZERO);
+ break;
+--- 5097,5103 ----
+***************
+*** 5682,5691 ****
+ }
+ check_cursor();
+
+- # ifdef FEAT_MBYTE
+ /* Make sure the cursor is on the first byte of a multi-byte char. */
+ if (has_mbyte)
+ mb_adjust_cursor();
+- # endif
+ }
+ #endif
+--- 5674,5681 ----
+*** ../vim-8.1.0805/src/message.c 2019-01-20 15:30:36.885328746 +0100
+--- src/message.c 2019-01-24 15:25:35.298805375 +0100
+***************
+*** 219,225 ****
+ room = (int)(Rows - msg_row - 1) * Columns + sc_col - 1;
+ if (len > room && room > 0)
+ {
+- #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ /* may have up to 18 bytes per cell (6 per char, up to two
+ * composing chars) */
+--- 219,224 ----
+***************
+*** 228,234 ****
+ /* may have up to 2 bytes per cell for euc-jp */
+ len = (room + 2) * 2;
+ else
+- #endif
+ len = room + 2;
+ buf = alloc(len);
+ if (buf != NULL)
+--- 227,232 ----
+***************
+*** 274,280 ****
+ break;
+ len += n;
+ buf[e] = s[e];
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ for (n = (*mb_ptr2len)(s + e); --n > 0; )
+ {
+--- 272,277 ----
+***************
+*** 282,293 ****
+ break;
+ buf[e] = s[e];
+ }
+- #endif
+ }
+
+ /* Last part: End of the string. */
+ i = e;
+- #ifdef FEAT_MBYTE
+ if (enc_dbcs != 0)
+ {
+ /* For DBCS going backwards in a string is slow, but
+--- 279,288 ----
+***************
+*** 317,323 ****
+ }
+ }
+ else
+- #endif
+ {
+ for (i = (int)STRLEN(s); len + (n = ptr2cells(s + i - 1)) <= room; --i)
+ len += n;
+--- 312,317 ----
+***************
+*** 852,858 ****
+ if ((force || (shortmess(SHM_TRUNC) && !exmode_active))
+ && (n = (int)STRLEN(s) - room) > 0)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ int size = vim_strsize(s);
+--- 846,851 ----
+***************
+*** 868,874 ****
+ }
+ --n;
+ }
+- #endif
+ s += n;
+ *s = '<';
+ }
+--- 861,866 ----
+***************
+*** 1388,1398 ****
+ void
+ msg_putchar_attr(int c, int attr)
+ {
+- #ifdef FEAT_MBYTE
+ char_u buf[MB_MAXBYTES + 1];
+- #else
+- char_u buf[4];
+- #endif
+
+ if (IS_SPECIAL(c))
+ {
+--- 1380,1386 ----
+***************
+*** 1402,1415 ****
+ buf[3] = NUL;
+ }
+ else
+- {
+- #ifdef FEAT_MBYTE
+ buf[(*mb_char2bytes)(c, buf)] = NUL;
+- #else
+- buf[0] = c;
+- buf[1] = NUL;
+- #endif
+- }
+ msg_puts_attr((char *)buf, attr);
+ }
+
+--- 1390,1396 ----
+***************
+*** 1478,1484 ****
+ char_u *
+ msg_outtrans_one(char_u *p, int attr)
+ {
+- #ifdef FEAT_MBYTE
+ int l;
+
+ if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+--- 1459,1464 ----
+***************
+*** 1486,1492 ****
+ msg_outtrans_len_attr(p, l, attr);
+ return p + l;
+ }
+- #endif
+ msg_puts_attr((char *)transchar_byte(*p), attr);
+ return p + 1;
+ }
+--- 1466,1471 ----
+***************
+*** 1498,1507 ****
+ char_u *str = msgstr;
+ char_u *plain_start = msgstr;
+ char_u *s;
+- #ifdef FEAT_MBYTE
+ int mb_l;
+ int c;
+- #endif
+
+ /* if MSG_HIST flag set, add message to history */
+ if (attr & MSG_HIST)
+--- 1477,1484 ----
+***************
+*** 1510,1521 ****
+ attr &= ~MSG_HIST;
+ }
+
+- #ifdef FEAT_MBYTE
+ /* If the string starts with a composing character first draw a space on
+ * which the composing char can be drawn. */
+ if (enc_utf8 && utf_iscomposing(utf_ptr2char(msgstr)))
+ msg_puts_attr(" ", attr);
+- #endif
+
+ /*
+ * Go over the string. Special characters are translated and printed.
+--- 1487,1496 ----
+***************
+*** 1523,1529 ****
+ */
+ while (--len >= 0)
+ {
+- #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ /* Don't include composing chars after the end. */
+ mb_l = utfc_ptr2len_len(str, len + 1);
+--- 1498,1503 ----
+***************
+*** 1553,1559 ****
+ str += mb_l;
+ }
+ else
+- #endif
+ {
+ s = transchar_byte(*str);
+ if (s[1] != NUL)
+--- 1527,1532 ----
+***************
+*** 1639,1648 ****
+ len = vim_strsize((char_u *)text);
+ /* Highlight special keys */
+ msg_puts_attr(text, len > 1
+! #ifdef FEAT_MBYTE
+! && (*mb_ptr2len)((char_u *)text) <= 1
+! #endif
+! ? attr : 0);
+ retval += len;
+ }
+ return retval;
+--- 1612,1618 ----
+ len = vim_strsize((char_u *)text);
+ /* Highlight special keys */
+ msg_puts_attr(text, len > 1
+! && (*mb_ptr2len)((char_u *)text) <= 1 ? attr : 0);
+ retval += len;
+ }
+ return retval;
+***************
+*** 1685,1691 ****
+ int modifiers = 0;
+ int special = FALSE;
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ char_u *p;
+--- 1655,1660 ----
+***************
+*** 1696,1702 ****
+ if (p != NULL)
+ return p;
+ }
+- #endif
+
+ c = *str;
+ if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
+--- 1665,1670 ----
+***************
+*** 1716,1722 ****
+ special = TRUE;
+ }
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && !IS_SPECIAL(c))
+ {
+ int len = (*mb_ptr2len)(str);
+--- 1684,1689 ----
+***************
+*** 1734,1740 ****
+ *sp = str + len;
+ }
+ else
+- #endif
+ *sp = str + 1;
+
+ /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
+--- 1701,1706 ----
+***************
+*** 1778,1787 ****
+ int n;
+ int attr = 0;
+ char_u *trail = NULL;
+- #ifdef FEAT_MBYTE
+ int l;
+ char_u buf[MB_MAXBYTES + 1];
+- #endif
+
+ if (curwin->w_p_list)
+ list = TRUE;
+--- 1744,1751 ----
+***************
+*** 1811,1817 ****
+ else
+ c = *p_extra++;
+ }
+- #ifdef FEAT_MBYTE
+ else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
+ {
+ col += (*mb_ptr2cells)(s);
+--- 1775,1780 ----
+***************
+*** 1831,1837 ****
+ s += l;
+ continue;
+ }
+- #endif
+ else
+ {
+ attr = 0;
+--- 1794,1799 ----
+***************
+*** 1906,1912 ****
+ msg_clr_eos();
+ }
+
+- #ifdef FEAT_MBYTE
+ /*
+ * Use screen_puts() to output one multi-byte character.
+ * Return the pointer "s" advanced to the next character.
+--- 1868,1873 ----
+***************
+*** 1952,1958 ****
+ }
+ return s + l;
+ }
+- #endif
+
+ /*
+ * Output a string to the screen at position msg_row, msg_col.
+--- 1913,1918 ----
+***************
+*** 2069,2078 ****
+ char_u *s = str;
+ char_u *t_s = str; /* string from "t_s" to "s" is still todo */
+ int t_col = 0; /* screen cells todo, 0 when "t_s" not used */
+- #ifdef FEAT_MBYTE
+ int l;
+ int cw;
+- #endif
+ char_u *sb_str = str;
+ int sb_col = msg_col;
+ int wrap;
+--- 2029,2036 ----
+***************
+*** 2091,2110 ****
+ cmdmsg_rl
+ ? (
+ msg_col <= 1
+! || (*s == TAB && msg_col <= 7)
+! # ifdef FEAT_MBYTE
+! || (has_mbyte && (*mb_ptr2cells)(s) > 1 && msg_col <= 2)
+! # endif
+! )
+ :
+ #endif
+ (msg_col + t_col >= Columns - 1
+ || (*s == TAB && msg_col + t_col >= ((Columns - 1) & ~7))
+- # ifdef FEAT_MBYTE
+ || (has_mbyte && (*mb_ptr2cells)(s) > 1
+! && msg_col + t_col >= Columns - 2)
+! # endif
+! ))))
+ {
+ /*
+ * The screen is scrolled up when at the last row (some terminals
+--- 2049,2062 ----
+ cmdmsg_rl
+ ? (
+ msg_col <= 1
+! || (*s == TAB && msg_col <= 7)
+! || (has_mbyte && (*mb_ptr2cells)(s) > 1 && msg_col <= 2))
+ :
+ #endif
+ (msg_col + t_col >= Columns - 1
+ || (*s == TAB && msg_col + t_col >= ((Columns - 1) & ~7))
+ || (has_mbyte && (*mb_ptr2cells)(s) > 1
+! && msg_col + t_col >= Columns - 2)))))
+ {
+ /*
+ * The screen is scrolled up when at the last row (some terminals
+***************
+*** 2133,2139 ****
+ #endif
+ )
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ if (enc_utf8 && maxlen >= 0)
+--- 2085,2090 ----
+***************
+*** 2144,2150 ****
+ s = screen_puts_mbyte(s, l, attr);
+ }
+ else
+- #endif
+ msg_screen_putchar(*s++, attr);
+ did_last_char = TRUE;
+ }
+--- 2095,2100 ----
+***************
+*** 2188,2198 ****
+
+ wrap = *s == '\n'
+ || msg_col + t_col >= Columns
+- #ifdef FEAT_MBYTE
+ || (has_mbyte && (*mb_ptr2cells)(s) > 1
+! && msg_col + t_col >= Columns - 1)
+! #endif
+! ;
+ if (t_col > 0 && (wrap || *s == '\r' || *s == '\b'
+ || *s == '\t' || *s == BELL))
+ /* output any postponed text */
+--- 2138,2145 ----
+
+ wrap = *s == '\n'
+ || msg_col + t_col >= Columns
+ || (has_mbyte && (*mb_ptr2cells)(s) > 1
+! && msg_col + t_col >= Columns - 1);
+ if (t_col > 0 && (wrap || *s == '\r' || *s == '\b'
+ || *s == '\t' || *s == BELL))
+ /* output any postponed text */
+***************
+*** 2233,2239 ****
+ vim_beep(BO_SH);
+ else
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ cw = (*mb_ptr2cells)(s);
+--- 2180,2185 ----
+***************
+*** 2248,2289 ****
+ cw = 1;
+ l = 1;
+ }
+! #endif
+ /* When drawing from right to left or when a double-wide character
+ * doesn't fit, draw a single character here. Otherwise collect
+ * characters and draw them all at once later. */
+- #if defined(FEAT_RIGHTLEFT) || defined(FEAT_MBYTE)
+ if (
+ # ifdef FEAT_RIGHTLEFT
+! cmdmsg_rl
+! # ifdef FEAT_MBYTE
+! ||
+! # endif
+ # endif
+! # ifdef FEAT_MBYTE
+! (cw > 1 && msg_col + t_col >= Columns - 1)
+! # endif
+! )
+ {
+- # ifdef FEAT_MBYTE
+ if (l > 1)
+ s = screen_puts_mbyte(s, l, attr) - 1;
+ else
+- # endif
+ msg_screen_putchar(*s, attr);
+ }
+ else
+- #endif
+ {
+ /* postpone this character until later */
+ if (t_col == 0)
+ t_s = s;
+- #ifdef FEAT_MBYTE
+ t_col += cw;
+ s += l - 1;
+- #else
+- ++t_col;
+- #endif
+ }
+ }
+ ++s;
+--- 2194,2221 ----
+ cw = 1;
+ l = 1;
+ }
+!
+ /* When drawing from right to left or when a double-wide character
+ * doesn't fit, draw a single character here. Otherwise collect
+ * characters and draw them all at once later. */
+ if (
+ # ifdef FEAT_RIGHTLEFT
+! cmdmsg_rl ||
+ # endif
+! (cw > 1 && msg_col + t_col >= Columns - 1))
+ {
+ if (l > 1)
+ s = screen_puts_mbyte(s, l, attr) - 1;
+ else
+ msg_screen_putchar(*s, attr);
+ }
+ else
+ {
+ /* postpone this character until later */
+ if (t_col == 0)
+ t_s = s;
+ t_col += cw;
+ s += l - 1;
+ }
+ }
+ ++s;
+***************
+*** 2601,2612 ****
+ screen_puts_len(t_s, (int)(s - t_s), msg_row, msg_col, attr);
+ msg_col += *t_col;
+ *t_col = 0;
+- #ifdef FEAT_MBYTE
+ /* If the string starts with a composing character don't increment the
+ * column position for it. */
+ if (enc_utf8 && utf_iscomposing(utf_ptr2char(t_s)))
+ --msg_col;
+- #endif
+ if (msg_col >= Columns)
+ {
+ msg_col = 0;
+--- 2533,2542 ----
+***************
+*** 2643,2656 ****
+ char_u buf[4];
+ char_u *p;
+ #ifdef WIN3264
+! # if defined(FEAT_MBYTE) && !defined(FEAT_GUI_MSWIN)
+ char_u *ccp = NULL;
+
+ # endif
+ if (!(silent_mode && p_verbose == 0))
+ mch_settmode(TMODE_COOK); /* handle '\r' and '\n' correctly */
+
+! # if defined(FEAT_MBYTE) && !defined(FEAT_GUI_MSWIN)
+ if (enc_codepage >= 0 && (int)GetConsoleCP() != enc_codepage)
+ {
+ int inlen = (int)STRLEN(str);
+--- 2573,2586 ----
+ char_u buf[4];
+ char_u *p;
+ #ifdef WIN3264
+! # if !defined(FEAT_GUI_MSWIN)
+ char_u *ccp = NULL;
+
+ # endif
+ if (!(silent_mode && p_verbose == 0))
+ mch_settmode(TMODE_COOK); /* handle '\r' and '\n' correctly */
+
+! # if !defined(FEAT_GUI_MSWIN)
+ if (enc_codepage >= 0 && (int)GetConsoleCP() != enc_codepage)
+ {
+ int inlen = (int)STRLEN(str);
+***************
+*** 2708,2714 ****
+ msg_didout = TRUE; /* assume that line is not empty */
+
+ #ifdef WIN3264
+! # if defined(FEAT_MBYTE) && !defined(FEAT_GUI_MSWIN)
+ vim_free(ccp);
+ # endif
+ if (!(silent_mode && p_verbose == 0))
+--- 2638,2644 ----
+ msg_didout = TRUE; /* assume that line is not empty */
+
+ #ifdef WIN3264
+! # if !defined(FEAT_GUI_MSWIN)
+ vim_free(ccp);
+ # endif
+ if (!(silent_mode && p_verbose == 0))
+***************
+*** 3646,3652 ****
+ retval = 1;
+ for (i = 0; hotkeys[i]; ++i)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ if ((*mb_ptr2char)(hotkeys + i) == c)
+--- 3576,3581 ----
+***************
+*** 3654,3660 ****
+ i += (*mb_ptr2len)(hotkeys + i) - 1;
+ }
+ else
+- #endif
+ if (hotkeys[i] == c)
+ break;
+ ++retval;
+--- 3583,3588 ----
+***************
+*** 3690,3696 ****
+ char_u *to,
+ int lowercase) /* make character lower case */
+ {
+- #ifdef FEAT_MBYTE
+ int len;
+ int c;
+
+--- 3618,3623 ----
+***************
+*** 3709,3715 ****
+ }
+ }
+ else
+- #endif
+ {
+ if (lowercase)
+ *to = (char_u)TOLOWER_LOC(*from);
+--- 3636,3641 ----
+***************
+*** 3735,3745 ****
+ int dfltbutton)
+ {
+ int len = 0;
+! #ifdef FEAT_MBYTE
+! # define HOTK_LEN (has_mbyte ? MB_MAXBYTES : 1)
+! #else
+! # define HOTK_LEN 1
+! #endif
+ int lenhotkey = HOTK_LEN; /* count first button */
+ char_u *hotk = NULL;
+ char_u *msgp = NULL;
+--- 3661,3667 ----
+ int dfltbutton)
+ {
+ int len = 0;
+! #define HOTK_LEN (has_mbyte ? MB_MAXBYTES : 1)
+ int lenhotkey = HOTK_LEN; /* count first button */
+ char_u *hotk = NULL;
+ char_u *msgp = NULL;
+***************
+*** 3771,3781 ****
+ *msgp++ = ' '; /* '\n' -> ', ' */
+
+ /* advance to next hotkey and set default hotkey */
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ hotkp += STRLEN(hotkp);
+ else
+- #endif
+ ++hotkp;
+ hotkp[copy_char(r + 1, hotkp, TRUE)] = NUL;
+ if (dfltbutton)
+--- 3693,3701 ----
+***************
+*** 4583,4589 ****
+ str_arg_l = (q == NULL) ? precision
+ : (size_t)(q - str_arg);
+ }
+- # ifdef FEAT_MBYTE
+ if (fmt_spec == 'S')
+ {
+ if (min_field_width != 0)
+--- 4503,4508 ----
+***************
+*** 4600,4606 ****
+ str_arg_l = precision = p1 - (char_u *)str_arg;
+ }
+ }
+- # endif
+ break;
+
+ default:
+--- 4519,4524 ----
+*** ../vim-8.1.0805/src/misc1.c 2019-01-20 15:30:36.889328720 +0100
+--- src/misc1.c 2019-01-24 15:29:11.881374564 +0100
+***************
+*** 843,853 ****
+ p = saved_line + curwin->w_cursor.col;
+ while (*p != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ p += replace_push_mb(p);
+ else
+- #endif
+ replace_push(*p++);
+ }
+ saved_line[curwin->w_cursor.col] = NUL;
+--- 843,851 ----
+***************
+*** 1296,1302 ****
+ ;
+ ++p;
+
+- #ifdef FEAT_MBYTE
+ /* Compute the length of the replaced characters in
+ * screen characters, not bytes. */
+ {
+--- 1294,1299 ----
+***************
+*** 1317,1328 ****
+ (size_t)((leader + lead_len) - endp));
+ lead_len += l;
+ }
+- #else
+- if (p < leader + lead_repl_len)
+- p = leader;
+- else
+- p -= lead_repl_len;
+- #endif
+ mch_memmove(p, lead_repl, (size_t)lead_repl_len);
+ if (p + lead_repl_len > leader + lead_len)
+ p[lead_repl_len] = NUL;
+--- 1314,1319 ----
+***************
+*** 1330,1336 ****
+ /* blank-out any other chars from the old leader. */
+ while (--p >= leader)
+ {
+- #ifdef FEAT_MBYTE
+ int l = mb_head_off(leader, p);
+
+ if (l > 1)
+--- 1321,1326 ----
+***************
+*** 1346,1361 ****
+ lead_len -= l;
+ *p = ' ';
+ }
+! else
+! #endif
+! if (!VIM_ISWHITE(*p))
+ *p = ' ';
+ }
+ }
+ else /* left adjusted leader */
+ {
+ p = skipwhite(leader);
+! #ifdef FEAT_MBYTE
+ /* Compute the length of the replaced characters in
+ * screen characters, not bytes. Move the part that is
+ * not to be overwritten. */
+--- 1336,1349 ----
+ lead_len -= l;
+ *p = ' ';
+ }
+! else if (!VIM_ISWHITE(*p))
+ *p = ' ';
+ }
+ }
+ else /* left adjusted leader */
+ {
+ p = skipwhite(leader);
+!
+ /* Compute the length of the replaced characters in
+ * screen characters, not bytes. Move the part that is
+ * not to be overwritten. */
+***************
+*** 1378,1384 ****
+ lead_len += lead_repl_len - i;
+ }
+ }
+- #endif
+ mch_memmove(p, lead_repl, (size_t)lead_repl_len);
+
+ /* Replace any remaining non-white chars in the old
+--- 1366,1371 ----
+***************
+*** 1396,1402 ****
+ }
+ else
+ {
+- #ifdef FEAT_MBYTE
+ int l = (*mb_ptr2len)(p);
+
+ if (l > 1)
+--- 1383,1388 ----
+***************
+*** 1412,1418 ****
+ (leader + lead_len) - p);
+ lead_len -= l - 1;
+ }
+- #endif
+ *p = ' ';
+ }
+ }
+--- 1398,1403 ----
+***************
+*** 1537,1547 ****
+ if (curbuf->b_p_ai || (flags & OPENLINE_DELSPACES))
+ {
+ while ((*p_extra == ' ' || *p_extra == '\t')
+- #ifdef FEAT_MBYTE
+ && (!enc_utf8
+! || !utf_iscomposing(utf_ptr2char(p_extra + 1)))
+! #endif
+! )
+ {
+ if (REPLACE_NORMAL(State))
+ replace_push(*p_extra);
+--- 1522,1529 ----
+ if (curbuf->b_p_ai || (flags & OPENLINE_DELSPACES))
+ {
+ while ((*p_extra == ' ' || *p_extra == '\t')
+ && (!enc_utf8
+! || !utf_iscomposing(utf_ptr2char(p_extra + 1))))
+ {
+ if (REPLACE_NORMAL(State))
+ replace_push(*p_extra);
+***************
+*** 2320,2326 ****
+ ins_bytes_len(char_u *p, int len)
+ {
+ int i;
+- #ifdef FEAT_MBYTE
+ int n;
+
+ if (has_mbyte)
+--- 2302,2307 ----
+***************
+*** 2334,2340 ****
+ ins_char_bytes(p + i, n);
+ }
+ else
+- #endif
+ for (i = 0; i < len; ++i)
+ ins_char(p[i]);
+ }
+--- 2315,2320 ----
+***************
+*** 2350,2367 ****
+ ins_char(int c)
+ {
+ char_u buf[MB_MAXBYTES + 1];
+! int n = 1;
+!
+! #ifdef FEAT_MBYTE
+! n = (*mb_char2bytes)(c, buf);
+
+ /* When "c" is 0x100, 0x200, etc. we don't want to insert a NUL byte.
+ * Happens for CTRL-Vu9900. */
+ if (buf[0] == 0)
+ buf[0] = '\n';
+- #else
+- buf[0] = c;
+- #endif
+
+ ins_char_bytes(buf, n);
+ }
+--- 2330,2341 ----
+ ins_char(int c)
+ {
+ char_u buf[MB_MAXBYTES + 1];
+! int n = (*mb_char2bytes)(c, buf);
+
+ /* When "c" is 0x100, 0x200, etc. we don't want to insert a NUL byte.
+ * Happens for CTRL-Vu9900. */
+ if (buf[0] == 0)
+ buf[0] = '\n';
+
+ ins_char_bytes(buf, n);
+ }
+***************
+*** 2401,2409 ****
+ colnr_T new_vcol = 0; /* init for GCC */
+ colnr_T vcol;
+ int old_list;
+- #ifndef FEAT_MBYTE
+- char_u cbuf[2];
+- #endif
+
+ /*
+ * Disable 'list' temporarily, unless 'cpo' contains the 'L' flag.
+--- 2375,2380 ----
+***************
+*** 2421,2433 ****
+ * cells. May result in adding spaces to fill a gap.
+ */
+ getvcol(curwin, &curwin->w_cursor, NULL, &vcol, NULL);
+- #ifndef FEAT_MBYTE
+- cbuf[0] = c;
+- cbuf[1] = NUL;
+- new_vcol = vcol + chartabsize(cbuf, vcol);
+- #else
+ new_vcol = vcol + chartabsize(buf, vcol);
+- #endif
+ while (oldp[col + oldlen] != NUL && vcol < new_vcol)
+ {
+ vcol += chartabsize(oldp + col + oldlen, vcol);
+--- 2392,2398 ----
+***************
+*** 2435,2445 ****
+ * position. */
+ if (vcol > new_vcol && oldp[col + oldlen] == TAB)
+ break;
+- #ifdef FEAT_MBYTE
+ oldlen += (*mb_ptr2len)(oldp + col + oldlen);
+- #else
+- ++oldlen;
+- #endif
+ /* Deleted a bit too much, insert spaces. */
+ if (vcol > new_vcol)
+ newlen += vcol - new_vcol;
+--- 2400,2406 ----
+***************
+*** 2449,2459 ****
+ else if (oldp[col] != NUL)
+ {
+ /* normal replace */
+- #ifdef FEAT_MBYTE
+ oldlen = (*mb_ptr2len)(oldp + col);
+- #else
+- oldlen = 1;
+- #endif
+ }
+
+
+--- 2410,2416 ----
+***************
+*** 2464,2474 ****
+ replace_push(NUL);
+ for (i = 0; i < oldlen; ++i)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ i += replace_push_mb(oldp + col + i) - 1;
+ else
+- #endif
+ replace_push(oldp[col + i]);
+ }
+ }
+--- 2421,2429 ----
+***************
+*** 2488,2500 ****
+ (size_t)(linelen - col - oldlen));
+
+ /* Insert or overwrite the new character. */
+- #ifdef FEAT_MBYTE
+ mch_memmove(p, buf, charlen);
+ i = charlen;
+- #else
+- *p = c;
+- i = 1;
+- #endif
+
+ /* Fill with spaces when necessary. */
+ while (i < newlen)
+--- 2443,2450 ----
+***************
+*** 2517,2527 ****
+ #endif
+ )
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ showmatch(mb_ptr2char(buf));
+ else
+- #endif
+ showmatch(c);
+ }
+
+--- 2467,2475 ----
+***************
+*** 2530,2540 ****
+ #endif
+ {
+ /* Normal insert: move cursor right */
+- #ifdef FEAT_MBYTE
+ curwin->w_cursor.col += charlen;
+- #else
+- ++curwin->w_cursor.col;
+- #endif
+ }
+ /*
+ * TODO: should try to update w_row here, to avoid recomputing it later.
+--- 2478,2484 ----
+***************
+*** 2586,2592 ****
+ int
+ del_char(int fixpos)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ /* Make sure the cursor is at the start of a character. */
+--- 2530,2535 ----
+***************
+*** 2595,2605 ****
+ return FAIL;
+ return del_chars(1L, fixpos);
+ }
+- #endif
+ return del_bytes(1L, fixpos, TRUE);
+ }
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+ * Like del_bytes(), but delete characters instead of bytes.
+ */
+--- 2538,2546 ----
+***************
+*** 2620,2626 ****
+ }
+ return del_bytes(bytes, fixpos, TRUE);
+ }
+- #endif
+
+ /*
+ * Delete "count" bytes under the cursor.
+--- 2561,2566 ----
+***************
+*** 2662,2668 ****
+ return FAIL;
+ }
+
+- #ifdef FEAT_MBYTE
+ /* If 'delcombine' is set and deleting (less than) one character, only
+ * delete the last combining character. */
+ if (p_deco && use_delcombine && enc_utf8
+--- 2602,2607 ----
+***************
+*** 2685,2691 ****
+ fixpos = 0;
+ }
+ }
+- #endif
+
+ /*
+ * When count is too big, reduce it.
+--- 2624,2629 ----
+***************
+*** 2708,2718 ****
+ #ifdef FEAT_VIRTUALEDIT
+ curwin->w_cursor.coladd = 0;
+ #endif
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ curwin->w_cursor.col -=
+ (*mb_head_off)(oldp, oldp + curwin->w_cursor.col);
+- #endif
+ }
+ count = oldlen - col;
+ movelen = 1;
+--- 2646,2654 ----
+***************
+*** 2847,2866 ****
+ if (pos->col == MAXCOL)
+ return NUL;
+ ptr = ml_get_pos(pos);
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ return (*mb_ptr2char)(ptr);
+- #endif
+ return (int)*ptr;
+ }
+
+ int
+ gchar_cursor(void)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ return (*mb_ptr2char)(ml_get_cursor());
+- #endif
+ return (int)*ml_get_cursor();
+ }
+
+--- 2783,2798 ----
+***************
+*** 3681,3687 ****
+ }
+ break;
+ }
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ if (MB_BYTE2LEN(n) > len)
+--- 3613,3618 ----
+***************
+*** 3689,3695 ****
+ buf[len >= buflen ? buflen - 1 : len] = NUL;
+ n = (*mb_ptr2char)(buf);
+ }
+- #endif
+ #ifdef UNIX
+ if (n == intr_char)
+ n = ESC;
+--- 3620,3625 ----
+***************
+*** 4023,4029 ****
+ if (var != NULL && *var == NUL) /* empty is same as not set */
+ var = NULL;
+
+- # ifdef FEAT_MBYTE
+ if (enc_utf8 && var != NULL)
+ {
+ int len;
+--- 3953,3958 ----
+***************
+*** 4038,4044 ****
+ return;
+ }
+ }
+- # endif
+
+ /*
+ * Default home dir is C:/
+--- 3967,3972 ----
+***************
+*** 4437,4443 ****
+
+ if (p != NULL)
+ {
+! #if defined(FEAT_MBYTE) && defined(WIN3264)
+ if (enc_utf8)
+ {
+ int len;
+--- 4365,4371 ----
+
+ if (p != NULL)
+ {
+! #if defined(WIN3264)
+ if (enc_utf8)
+ {
+ int len;
+***************
+*** 4481,4487 ****
+ else
+ p = mch_getenv((char_u *)"VIM");
+
+! #if defined(FEAT_MBYTE) && defined(WIN3264)
+ if (enc_utf8)
+ {
+ int len;
+--- 4409,4415 ----
+ else
+ p = mch_getenv((char_u *)"VIM");
+
+! #if defined(WIN3264)
+ if (enc_utf8)
+ {
+ int len;
+***************
+*** 5332,5338 ****
+ *d++ = *s; /* copy next char */
+ if (*s != '~' && *s != '.') /* and leading "~" and "." */
+ skip = TRUE;
+- # ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ int l = mb_ptr2len(s);
+--- 5260,5265 ----
+***************
+*** 5340,5346 ****
+ while (--l > 0)
+ *d++ = *++s;
+ }
+- # endif
+ }
+ }
+ }
+--- 5267,5272 ----
+***************
+*** 10155,10164 ****
+ static int stardepth = 0; /* depth for "**" expansion */
+ WIN32_FIND_DATA fb;
+ HANDLE hFind = (HANDLE)0;
+- # ifdef FEAT_MBYTE
+ WIN32_FIND_DATAW wfb;
+ WCHAR *wn = NULL; /* UCS-2 name, NULL when not used. */
+- # endif
+ char_u *matchname;
+ int ok;
+
+--- 10081,10088 ----
+***************
+*** 10170,10177 ****
+ return 0;
+ }
+
+! /* Make room for file name. When doing encoding conversion the actual
+! * length may be quite a bit longer, thus use the maximum possible length. */
+ buf = alloc((int)MAXPATHL);
+ if (buf == NULL)
+ return 0;
+--- 10094,10101 ----
+ return 0;
+ }
+
+! // Make room for file name. When doing encoding conversion the actual
+! // length may be quite a bit longer, thus use the maximum possible length.
+ buf = alloc((int)MAXPATHL);
+ if (buf == NULL)
+ return 0;
+***************
+*** 10199,10205 ****
+ else if (path_end >= path + wildoff
+ && vim_strchr((char_u *)"*?[~", *path_end) != NULL)
+ e = p;
+- # ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ len = (*mb_ptr2len)(path_end);
+--- 10123,10128 ----
+***************
+*** 10208,10214 ****
+ path_end += len;
+ }
+ else
+- # endif
+ *p++ = *path_end++;
+ }
+ e = p;
+--- 10131,10136 ----
+***************
+*** 10269,10275 ****
+
+ /* Scan all files in the directory with "dir/ *.*" */
+ STRCPY(s, "*.*");
+- # ifdef FEAT_MBYTE
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+ {
+ /* The active codepage differs from 'encoding'. Attempt using the
+--- 10191,10196 ----
+***************
+*** 10286,10302 ****
+ }
+
+ if (wn == NULL)
+- # endif
+ hFind = FindFirstFile((LPCSTR)buf, &fb);
+ ok = (hFind != INVALID_HANDLE_VALUE);
+
+ while (ok)
+ {
+- # ifdef FEAT_MBYTE
+ if (wn != NULL)
+ p = utf16_to_enc(wfb.cFileName, NULL); /* p is allocated here */
+ else
+- # endif
+ p = (char_u *)fb.cFileName;
+ /* Ignore entries starting with a dot, unless when asked for. Accept
+ * all entries found with "matchname". */
+--- 10207,10220 ----
+***************
+*** 10341,10354 ****
+ }
+ }
+
+- # ifdef FEAT_MBYTE
+ if (wn != NULL)
+ {
+ vim_free(p);
+ ok = FindNextFileW(hFind, &wfb);
+ }
+ else
+- # endif
+ ok = FindNextFile(hFind, &fb);
+
+ /* If no more matches and no match was used, try expanding the name
+--- 10259,10270 ----
+***************
+*** 10357,10363 ****
+ {
+ STRCPY(s, matchname);
+ FindClose(hFind);
+- # ifdef FEAT_MBYTE
+ if (wn != NULL)
+ {
+ vim_free(wn);
+--- 10273,10278 ----
+***************
+*** 10366,10372 ****
+ hFind = FindFirstFileW(wn, &wfb);
+ }
+ if (wn == NULL)
+- # endif
+ hFind = FindFirstFile((LPCSTR)buf, &fb);
+ ok = (hFind != INVALID_HANDLE_VALUE);
+ VIM_CLEAR(matchname);
+--- 10281,10286 ----
+***************
+*** 10374,10382 ****
+ }
+
+ FindClose(hFind);
+- # ifdef FEAT_MBYTE
+ vim_free(wn);
+- # endif
+ vim_free(buf);
+ vim_regfree(regmatch.regprog);
+ vim_free(matchname);
+--- 10288,10294 ----
+***************
+*** 10480,10486 ****
+ || (!p_fic && (flags & EW_ICASE)
+ && isalpha(PTR2CHAR(path_end)))))
+ e = p;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ len = (*mb_ptr2len)(path_end);
+--- 10392,10397 ----
+***************
+*** 10489,10495 ****
+ path_end += len;
+ }
+ else
+- #endif
+ *p++ = *path_end++;
+ }
+ e = p;
+--- 10400,10405 ----
+*** ../vim-8.1.0805/src/misc2.c 2019-01-20 15:30:36.889328720 +0100
+--- src/misc2.c 2019-01-24 15:31:04.464628741 +0100
+***************
+*** 73,79 ****
+ * Get the screen position of character col with a coladd in the cursor line.
+ */
+ int
+! getviscol2(colnr_T col, colnr_T coladd)
+ {
+ colnr_T x;
+ pos_T pos;
+--- 73,79 ----
+ * Get the screen position of character col with a coladd in the cursor line.
+ */
+ int
+! getviscol2(colnr_T col, colnr_T coladd UNUSED)
+ {
+ colnr_T x;
+ pos_T pos;
+***************
+*** 320,330 ****
+ }
+ #endif
+
+- #ifdef FEAT_MBYTE
+ /* prevent from moving onto a trail byte */
+ if (has_mbyte)
+ mb_adjustpos(curbuf, pos);
+- #endif
+
+ if (col < wcol)
+ return FAIL;
+--- 320,328 ----
+***************
+*** 358,364 ****
+ p = ml_get_pos(lp);
+ if (*p != NUL) /* still within line, move to next char (may be NUL) */
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ int l = (*mb_ptr2len)(p);
+--- 356,361 ----
+***************
+*** 366,372 ****
+ lp->col += l;
+ return ((p[l] != NUL) ? 0 : 2);
+ }
+- #endif
+ lp->col++;
+ #ifdef FEAT_VIRTUALEDIT
+ lp->coladd = 0;
+--- 363,368 ----
+***************
+*** 424,433 ****
+ /* past end of line */
+ p = ml_get(lp->lnum);
+ lp->col = (colnr_T)STRLEN(p);
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+- #endif
+ return 0;
+ }
+
+--- 420,427 ----
+***************
+*** 435,447 ****
+ {
+ /* still within line */
+ lp->col--;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ p = ml_get(lp->lnum);
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ }
+- #endif
+ return 0;
+ }
+
+--- 429,439 ----
+***************
+*** 451,460 ****
+ lp->lnum--;
+ p = ml_get(lp->lnum);
+ lp->col = (colnr_T)STRLEN(p);
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+- #endif
+ return 1;
+ }
+
+--- 443,450 ----
+***************
+*** 608,618 ****
+ else
+ {
+ win->w_cursor.col = len - 1;
+- #ifdef FEAT_MBYTE
+ /* Move the cursor to the head byte. */
+ if (has_mbyte)
+ mb_adjustpos(win->w_buffer, &win->w_cursor);
+- #endif
+ }
+ }
+ else if (win->w_cursor.col < 0)
+--- 598,606 ----
+***************
+*** 1394,1402 ****
+ char_u *p2;
+ char_u *escaped_string;
+ unsigned length;
+- #ifdef FEAT_MBYTE
+ int l;
+- #endif
+
+ /*
+ * First count the number of backslashes required.
+--- 1382,1388 ----
+***************
+*** 1405,1418 ****
+ length = 1; /* count the trailing NUL */
+ for (p = string; *p; p++)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ {
+ length += l; /* count a multibyte char */
+ p += l - 1;
+ continue;
+ }
+- #endif
+ if (vim_strchr(esc_chars, *p) != NULL || (bsl && rem_backslash(p)))
+ ++length; /* count a backslash */
+ ++length; /* count an ordinary char */
+--- 1391,1402 ----
+***************
+*** 1423,1429 ****
+ p2 = escaped_string;
+ for (p = string; *p; p++)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ {
+ mch_memmove(p2, p, (size_t)l);
+--- 1407,1412 ----
+***************
+*** 1431,1437 ****
+ p += l - 1; /* skip multibyte char */
+ continue;
+ }
+- #endif
+ if (vim_strchr(esc_chars, *p) != NULL || (bsl && rem_backslash(p)))
+ *p2++ = cc;
+ *p2++ = *p;
+--- 1414,1419 ----
+***************
+*** 1642,1648 ****
+ if (res != NULL)
+ while (*p != NUL)
+ {
+- # ifdef FEAT_MBYTE
+ int l;
+
+ if (enc_utf8)
+--- 1624,1629 ----
+***************
+*** 1685,1691 ****
+ else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ p += l; /* skip multi-byte character */
+ else
+- # endif
+ {
+ *p = TOUPPER_LOC(*p); /* note that toupper() can be a macro */
+ p++;
+--- 1666,1671 ----
+***************
+*** 1711,1717 ****
+ if (res != NULL)
+ while (*p != NUL)
+ {
+- # ifdef FEAT_MBYTE
+ int l;
+
+ if (enc_utf8)
+--- 1691,1696 ----
+***************
+*** 1754,1760 ****
+ else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ p += l; /* skip multi-byte character */
+ else
+- # endif
+ {
+ *p = TOLOWER_LOC(*p); /* note that tolower() can be a macro */
+ p++;
+--- 1733,1738 ----
+***************
+*** 1943,1949 ****
+ int b;
+
+ p = string;
+- #ifdef FEAT_MBYTE
+ if (enc_utf8 && c >= 0x80)
+ {
+ while (*p != NUL)
+--- 1921,1926 ----
+***************
+*** 1980,1986 ****
+ }
+ return NULL;
+ }
+- #endif
+ while ((b = *p) != NUL)
+ {
+ if (b == c)
+--- 1957,1962 ----
+***************
+*** 2713,2723 ****
+ * When not a known special key, and not a printable character, try to
+ * extract modifiers.
+ */
+! if (c > 0
+! #ifdef FEAT_MBYTE
+! && (*mb_char2len)(c) == 1
+! #endif
+! )
+ {
+ if (table_idx < 0
+ && (!vim_isprintc(c) || (c & 0x7f) == ' ')
+--- 2689,2695 ----
+ * When not a known special key, and not a printable character, try to
+ * extract modifiers.
+ */
+! if (c > 0 && (*mb_char2len)(c) == 1)
+ {
+ if (table_idx < 0
+ && (!vim_isprintc(c) || (c & 0x7f) == ' ')
+***************
+*** 2760,2771 ****
+ /* Not a special key, only modifiers, output directly */
+ else
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && (*mb_char2len)(c) > 1)
+ idx += (*mb_char2bytes)(c, string + idx);
+! else
+! #endif
+! if (vim_isprintc(c))
+ string[idx++] = c;
+ else
+ {
+--- 2732,2740 ----
+ /* Not a special key, only modifiers, output directly */
+ else
+ {
+ if (has_mbyte && (*mb_char2len)(c) > 1)
+ idx += (*mb_char2bytes)(c, string + idx);
+! else if (vim_isprintc(c))
+ string[idx++] = c;
+ else
+ {
+***************
+*** 2825,2834 ****
+ dst[dlen++] = KEY2TERMCAP0(key);
+ dst[dlen++] = KEY2TERMCAP1(key);
+ }
+- #ifdef FEAT_MBYTE
+ else if (has_mbyte && !keycode)
+ dlen += (*mb_char2bytes)(key, dst + dlen);
+- #endif
+ else if (keycode)
+ dlen = (int)(add_char2buf(key, dst + dlen) - dst);
+ else
+--- 2794,2801 ----
+***************
+*** 2873,2883 ****
+ last_dash = bp;
+ if (bp[1] != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ l = mb_ptr2len(bp + 1);
+ else
+- #endif
+ l = 1;
+ /* Anything accepted, like <C-?>.
+ * <C-"> or <M-"> are not special in strings as " is
+--- 2840,2848 ----
+***************
+*** 2935,2945 ****
+ /* Modifier with single letter, or special key name. */
+ if (in_string && last_dash[1] == '\\' && last_dash[2] == '"')
+ off = 2;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ l = mb_ptr2len(last_dash + off);
+ else
+- #endif
+ l = 1;
+ if (modifiers != 0 && last_dash[l + off] == '>')
+ key = PTR2CHAR(last_dash + off);
+--- 2900,2908 ----
+***************
+*** 3028,3037 ****
+ if (!(modifiers & MOD_MASK_CMD))
+ #endif
+ if ((modifiers & MOD_MASK_ALT) && key < 0x80
+! #ifdef FEAT_MBYTE
+! && !enc_dbcs /* avoid creating a lead byte */
+! #endif
+! )
+ {
+ key |= 0x80;
+ modifiers &= ~MOD_MASK_ALT; /* remove the META modifier */
+--- 2991,2997 ----
+ if (!(modifiers & MOD_MASK_CMD))
+ #endif
+ if ((modifiers & MOD_MASK_ALT) && key < 0x80
+! && !enc_dbcs) // avoid creating a lead byte
+ {
+ key |= 0x80;
+ modifiers &= ~MOD_MASK_ALT; /* remove the META modifier */
+***************
+*** 3377,3383 ****
+ return State;
+ }
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+ * Return TRUE if "p" points to just after a path separator.
+ * Takes care of multi-byte characters.
+--- 3337,3342 ----
+***************
+*** 3389,3395 ****
+ return p > b && vim_ispathsep(p[-1])
+ && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
+ }
+- #endif
+
+ /*
+ * Return TRUE if file names "f1" and "f2" are in the same directory.
+--- 3348,3353 ----
+***************
+*** 6376,6383 ****
+
+ #endif
+
+! #if (defined(FEAT_MBYTE) && defined(FEAT_QUICKFIX)) \
+! || defined(FEAT_SPELL) || defined(PROTO)
+ /*
+ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
+ * When "s" is NULL FALSE is returned.
+--- 6334,6340 ----
+
+ #endif
+
+! #if defined(FEAT_QUICKFIX) || defined(FEAT_SPELL) || defined(PROTO)
+ /*
+ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
+ * When "s" is NULL FALSE is returned.
+*** ../vim-8.1.0805/src/move.c 2019-01-11 11:55:12.930066044 +0100
+--- src/move.c 2019-01-24 15:31:26.516482525 +0100
+***************
+*** 934,940 ****
+ }
+
+ /*
+! * compute curwin->w_wcol and curwin->w_virtcol.
+ * Also updates curwin->w_wrow and curwin->w_cline_row.
+ * Also updates curwin->w_leftcol.
+ */
+--- 934,940 ----
+ }
+
+ /*
+! * Compute curwin->w_wcol and curwin->w_virtcol.
+ * Also updates curwin->w_wrow and curwin->w_cline_row.
+ * Also updates curwin->w_leftcol.
+ */
+***************
+*** 2845,2855 ****
+ validate_cursor();
+ # endif
+ restart_edit = restart_edit_save;
+- # ifdef FEAT_MBYTE
+ /* Correct cursor for multi-byte character. */
+ if (has_mbyte)
+ mb_adjust_cursor();
+- # endif
+ redraw_later(VALID);
+
+ /* Only scroll when 'scrollbind' hasn't done this. */
+--- 2845,2853 ----
+*** ../vim-8.1.0805/src/normal.c 2019-01-19 17:43:03.421449119 +0100
+--- src/normal.c 2019-01-24 15:41:20.432534170 +0100
+***************
+*** 477,487 ****
+ int top, bot;
+ int c;
+
+- #ifdef FEAT_MBYTE
+ /* A multi-byte character is never a command. */
+ if (cmdchar >= 0x100)
+ return -1;
+- #endif
+
+ /* We use the absolute value of the character. Special keys have a
+ * negative value, but are sorted on their absolute value. */
+--- 477,485 ----
+***************
+*** 1036,1042 ****
+ }
+ }
+
+- #ifdef FEAT_MBYTE
+ /* When getting a text character and the next character is a
+ * multi-byte character, it could be a composing character.
+ * However, don't wait for it to arrive. Also, do enable mapping,
+--- 1034,1039 ----
+***************
+*** 1058,1064 ****
+ ca.ncharC2 = c;
+ }
+ ++no_mapping;
+- #endif
+ }
+ --no_mapping;
+ --allow_keys;
+--- 1055,1060 ----
+***************
+*** 1255,1264 ****
+ checkpcmark(); /* check if we moved since setting pcmark */
+ vim_free(ca.searchbuf);
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ mb_adjust_cursor();
+- #endif
+
+ if (curwin->w_p_scb && toplevel)
+ {
+--- 1251,1258 ----
+***************
+*** 1745,1751 ****
+ }
+ }
+
+- #ifdef FEAT_MBYTE
+ /* Include the trailing byte of a multi-byte char. */
+ if (has_mbyte && oap->inclusive)
+ {
+--- 1739,1744 ----
+***************
+*** 1755,1761 ****
+ if (l > 1)
+ oap->end.col += l - 1;
+ }
+- #endif
+ curwin->w_set_curswant = TRUE;
+
+ /*
+--- 1748,1753 ----
+***************
+*** 3133,3144 ****
+ {
+ find_start_of_word(&VIsual);
+ if (*p_sel == 'e' && *ml_get_cursor() != NUL)
+- #ifdef FEAT_MBYTE
+ curwin->w_cursor.col +=
+ (*mb_ptr2len)(ml_get_cursor());
+- #else
+- ++curwin->w_cursor.col;
+- #endif
+ find_end_of_word(&curwin->w_cursor);
+ }
+ }
+--- 3125,3132 ----
+***************
+*** 3180,3188 ****
+ while (pos->col > 0)
+ {
+ col = pos->col - 1;
+- #ifdef FEAT_MBYTE
+ col -= (*mb_head_off)(line, line + col);
+- #endif
+ if (get_mouse_class(line + col) != cclass)
+ break;
+ pos->col = col;
+--- 3168,3174 ----
+***************
+*** 3204,3221 ****
+ if (*p_sel == 'e' && pos->col > 0)
+ {
+ --pos->col;
+- #ifdef FEAT_MBYTE
+ pos->col -= (*mb_head_off)(line, line + pos->col);
+- #endif
+ }
+ cclass = get_mouse_class(line + pos->col);
+ while (line[pos->col] != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ col = pos->col + (*mb_ptr2len)(line + pos->col);
+- #else
+- col = pos->col + 1;
+- #endif
+ if (get_mouse_class(line + col) != cclass)
+ {
+ if (*p_sel == 'e')
+--- 3190,3201 ----
+***************
+*** 3238,3247 ****
+ {
+ int c;
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && MB_BYTE2LEN(p[0]) > 1)
+ return mb_get_class(p);
+- #endif
+
+ c = *p;
+ if (c == ' ' || c == '\t')
+--- 3218,3225 ----
+***************
+*** 3431,3441 ****
+ char_u *ptr;
+ int col = 0; /* init to shut up GCC */
+ int i;
+- #ifdef FEAT_MBYTE
+ int this_class = 0;
+ int prev_class;
+ int prevcol;
+- #endif
+ int bn = 0; /* bracket nesting */
+
+ /*
+--- 3409,3417 ----
+***************
+*** 3449,3455 ****
+ * 1. skip to start of identifier/string
+ */
+ col = startcol;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ while (ptr[col] != NUL)
+--- 3425,3430 ----
+***************
+*** 3464,3470 ****
+ }
+ }
+ else
+- #endif
+ while (ptr[col] != NUL
+ && (i == 0 ? !vim_iswordc(ptr[col]) : VIM_ISWHITE(ptr[col]))
+ && (!(find_type & FIND_EVAL) || ptr[col] != ']')
+--- 3439,3444 ----
+***************
+*** 3477,3483 ****
+ /*
+ * 2. Back up to start of identifier/string.
+ */
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ /* Remember class of character under cursor. */
+--- 3451,3456 ----
+***************
+*** 3510,3516 ****
+ break;
+ }
+ else
+- #endif
+ {
+ while (col > 0
+ && ((i == 0
+--- 3483,3488 ----
+***************
+*** 3532,3542 ****
+ }
+ }
+
+! if (ptr[col] == NUL || (i == 0 && (
+! #ifdef FEAT_MBYTE
+! has_mbyte ? this_class != 2 :
+! #endif
+! !vim_iswordc(ptr[col]))))
+ {
+ /*
+ * didn't find an identifier or string
+--- 3504,3511 ----
+ }
+ }
+
+! if (ptr[col] == NUL || (i == 0
+! && (has_mbyte ? this_class != 2 : !vim_iswordc(ptr[col]))))
+ {
+ /*
+ * didn't find an identifier or string
+***************
+*** 3556,3562 ****
+ bn = 0;
+ startcol -= col;
+ col = 0;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ /* Search for point of changing multibyte character class. */
+--- 3525,3530 ----
+***************
+*** 3571,3577 ****
+ col += (*mb_ptr2len)(ptr + col);
+ }
+ else
+- #endif
+ while ((i == 0 ? vim_iswordc(ptr[col])
+ : (ptr[col] != NUL && !VIM_ISWHITE(ptr[col])))
+ || ((find_type & FIND_EVAL)
+--- 3539,3544 ----
+***************
+*** 3787,3797 ****
+ }
+ while ((*p_sel != 'e') ? s <= e : s < e)
+ {
+- # ifdef FEAT_MBYTE
+ l = (*mb_ptr2len)(s);
+- # else
+- l = (*s == NUL) ? 0 : 1;
+- # endif
+ if (l == 0)
+ {
+ ++bytes;
+--- 3754,3760 ----
+***************
+*** 4558,4564 ****
+ else
+ coladvance(curwin->w_curswant);
+
+- #if defined(FEAT_LINEBREAK) || defined(FEAT_MBYTE)
+ if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
+ {
+ colnr_T virtcol;
+--- 4521,4526 ----
+***************
+*** 4570,4579 ****
+ */
+ validate_virtcol();
+ virtcol = curwin->w_virtcol;
+! # if defined(FEAT_LINEBREAK)
+ if (virtcol > (colnr_T)width1 && *p_sbr != NUL)
+ virtcol -= vim_strsize(p_sbr);
+! # endif
+
+ if (virtcol > curwin->w_curswant
+ && (curwin->w_curswant < (colnr_T)width1
+--- 4532,4541 ----
+ */
+ validate_virtcol();
+ virtcol = curwin->w_virtcol;
+! #if defined(FEAT_LINEBREAK)
+ if (virtcol > (colnr_T)width1 && *p_sbr != NUL)
+ virtcol -= vim_strsize(p_sbr);
+! #endif
+
+ if (virtcol > curwin->w_curswant
+ && (curwin->w_curswant < (colnr_T)width1
+***************
+*** 4582,4588 ****
+ > (colnr_T)width2 / 2)))
+ --curwin->w_cursor.col;
+ }
+- #endif
+
+ if (atend)
+ curwin->w_curswant = MAXCOL; /* stick in the last column */
+--- 4544,4549 ----
+***************
+*** 5768,5774 ****
+ /* put a backslash before \ and some others */
+ if (vim_strchr(aux_ptr, *ptr) != NULL)
+ *p++ = '\\';
+- #ifdef FEAT_MBYTE
+ /* When current byte is a part of multibyte character, copy all
+ * bytes of that character. */
+ if (has_mbyte)
+--- 5729,5734 ----
+***************
+*** 5779,5785 ****
+ for (i = 0; i < len && n >= 1; ++i, --n)
+ *p++ = *ptr++;
+ }
+- #endif
+ *p++ = *ptr++;
+ }
+ *p = NUL;
+--- 5739,5744 ----
+***************
+*** 5790,5800 ****
+ */
+ if (cmdchar == '*' || cmdchar == '#')
+ {
+! if (!g_cmd && (
+! #ifdef FEAT_MBYTE
+! has_mbyte ? vim_iswordp(mb_prevptr(ml_get_curline(), ptr)) :
+! #endif
+! vim_iswordc(ptr[-1])))
+ STRCAT(buf, "\\>");
+ #ifdef FEAT_CMDHIST
+ /* put pattern in search history */
+--- 5749,5757 ----
+ */
+ if (cmdchar == '*' || cmdchar == '#')
+ {
+! if (!g_cmd && (has_mbyte
+! ? vim_iswordp(mb_prevptr(ml_get_curline(), ptr))
+! : vim_iswordc(ptr[-1])))
+ STRCAT(buf, "\\>");
+ #ifdef FEAT_CMDHIST
+ /* put pattern in search history */
+***************
+*** 5844,5854 ****
+ *pp = ml_get_pos(&VIsual);
+ *lenp = curwin->w_cursor.col - VIsual.col + 1;
+ }
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ /* Correct the length to include the whole last character. */
+ *lenp += (*mb_ptr2len)(*pp + (*lenp - 1)) - 1;
+- #endif
+ }
+ reset_VIsual_and_resel();
+ return OK;
+--- 5801,5809 ----
+***************
+*** 6058,6069 ****
+ else
+ #endif
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ curwin->w_cursor.col +=
+ (*mb_ptr2len)(ml_get_cursor());
+ else
+- #endif
+ ++curwin->w_cursor.col;
+ }
+ }
+--- 6013,6022 ----
+***************
+*** 6129,6139 ****
+
+ if (*cp != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ curwin->w_cursor.col += (*mb_ptr2len)(cp);
+ else
+- #endif
+ ++curwin->w_cursor.col;
+ }
+ cap->retval |= CA_NO_ADJ_OP_END;
+--- 6082,6090 ----
+***************
+*** 7060,7069 ****
+ /* Abort if not enough characters to replace. */
+ ptr = ml_get_cursor();
+ if (STRLEN(ptr) < (unsigned)cap->count1
+! #ifdef FEAT_MBYTE
+! || (has_mbyte && mb_charlen(ptr) < cap->count1)
+! #endif
+! )
+ {
+ clearopbeep(cap->oap);
+ return;
+--- 7011,7017 ----
+ /* Abort if not enough characters to replace. */
+ ptr = ml_get_cursor();
+ if (STRLEN(ptr) < (unsigned)cap->count1
+! || (has_mbyte && mb_charlen(ptr) < cap->count1))
+ {
+ clearopbeep(cap->oap);
+ return;
+***************
+*** 7098,7108 ****
+ * autoindent. The insert command depends on being on the last
+ * character of a line or not.
+ */
+- #ifdef FEAT_MBYTE
+ (void)del_chars(cap->count1, FALSE); /* delete the characters */
+- #else
+- (void)del_bytes(cap->count1, FALSE, FALSE); /* delete the characters */
+- #endif
+ stuffcharReadbuff('\r');
+ stuffcharReadbuff(ESC);
+
+--- 7046,7052 ----
+***************
+*** 7115,7121 ****
+ NUL, 'r', NUL, had_ctrl_v, cap->nchar);
+
+ curbuf->b_op_start = curwin->w_cursor;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ int old_State = State;
+--- 7059,7064 ----
+***************
+*** 7151,7157 ****
+ }
+ }
+ else
+- #endif
+ {
+ /*
+ * Replace the characters within one line.
+--- 7094,7099 ----
+***************
+*** 7194,7205 ****
+ (colnr_T)(curwin->w_cursor.col - cap->count1));
+ }
+ --curwin->w_cursor.col; /* cursor on the last replaced char */
+- #ifdef FEAT_MBYTE
+ /* if the character on the left of the current cursor is a multi-byte
+ * character, move two characters left */
+ if (has_mbyte)
+ mb_adjust_cursor();
+- #endif
+ curbuf->b_op_end = curwin->w_cursor;
+ curwin->w_set_curswant = TRUE;
+ set_last_insert(cap->nchar);
+--- 7136,7145 ----
+***************
+*** 8202,8208 ****
+ validate_virtcol();
+ curwin->w_curswant = curwin->w_virtcol;
+ curwin->w_set_curswant = FALSE;
+- #if defined(FEAT_LINEBREAK) || defined(FEAT_MBYTE)
+ if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
+ {
+ /*
+--- 8142,8147 ----
+***************
+*** 8213,8219 ****
+ if (curwin->w_virtcol > (colnr_T)i)
+ --curwin->w_cursor.col;
+ }
+- #endif
+ }
+ else if (nv_screengo(oap, FORWARD, cap->count1 - 1) == FAIL)
+ clearopbeep(oap);
+--- 8152,8157 ----
+***************
+*** 8328,8334 ****
+ do_ascii(NULL);
+ break;
+
+- #ifdef FEAT_MBYTE
+ /*
+ * "g8": Display the bytes used for the UTF-8 character under the
+ * cursor. It is displayed in hex.
+--- 8266,8271 ----
+***************
+*** 8340,8346 ****
+ else
+ show_utf8();
+ break;
+- #endif
+
+ /* "g<": show scrollback text */
+ case '<':
+--- 8277,8282 ----
+***************
+*** 8843,8853 ****
+ )
+ {
+ --curwin->w_cursor.col;
+- #ifdef FEAT_MBYTE
+ /* prevent cursor from moving on the trail byte */
+ if (has_mbyte)
+ mb_adjust_cursor();
+- #endif
+ oap->inclusive = TRUE;
+ }
+ }
+--- 8779,8787 ----
+***************
+*** 8879,8889 ****
+ if (VIsual_active && cap->oap->inclusive && *p_sel == 'e'
+ && gchar_cursor() != NUL && LT_POS(VIsual, curwin->w_cursor))
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ inc_cursor();
+ else
+- #endif
+ ++curwin->w_cursor.col;
+ cap->oap->inclusive = FALSE;
+ }
+--- 8813,8821 ----
+***************
+*** 8913,8921 ****
+ if (pp->col > 0)
+ {
+ --pp->col;
+- #ifdef FEAT_MBYTE
+ mb_adjustpos(curbuf, pp);
+- #endif
+ }
+ else if (pp->lnum > 1)
+ {
+--- 8845,8851 ----
+***************
+*** 9646,9656 ****
+
+ oap->block_mode = TRUE;
+
+- #ifdef FEAT_MBYTE
+ /* prevent from moving onto a trail byte */
+ if (has_mbyte)
+ mb_adjustpos(curwin->w_buffer, &oap->end);
+- #endif
+
+ getvvcol(curwin, &(oap->start), &oap->start_vcol, NULL, &oap->end_vcol);
+
+--- 9576,9584 ----
+*** ../vim-8.1.0805/src/ops.c 2019-01-20 15:30:36.889328720 +0100
+--- src/ops.c 2019-01-24 15:44:26.003148115 +0100
+***************
+*** 97,105 ****
+ static int put_in_typebuf(char_u *s, int esc, int colon,
+ int silent);
+ static void stuffescaped(char_u *arg, int literally);
+- #ifdef FEAT_MBYTE
+ static void mb_adjust_opend(oparg_T *oap);
+- #endif
+ static void free_yank_all(void);
+ static int yank_copy_line(struct block_def *bd, long y_idx);
+ #ifdef FEAT_CLIPBOARD
+--- 97,103 ----
+***************
+*** 421,427 ****
+ ws_vcol = bd.start_vcol - bd.pre_whitesp;
+ if (bd.startspaces)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ if ((*mb_ptr2len)(bd.textstart) == 1)
+--- 419,424 ----
+***************
+*** 433,439 ****
+ }
+ }
+ else
+- #endif
+ ++bd.textstart;
+ }
+ for ( ; VIM_ISWHITE(*bd.textstart); )
+--- 430,435 ----
+***************
+*** 632,638 ****
+ }
+ }
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && spaces > 0)
+ {
+ int off;
+--- 628,633 ----
+***************
+*** 650,656 ****
+ spaces -= off;
+ count -= off;
+ }
+- #endif
+
+ newp = alloc_check((unsigned)(STRLEN(oldp)) + s_len + count + 1);
+ if (newp == NULL)
+--- 645,650 ----
+***************
+*** 1491,1501 ****
+ /* stuff a single special character */
+ if (*arg != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ c = mb_cptr2char_adv(&arg);
+ else
+- #endif
+ c = *arg++;
+ if (literally && ((c < ' ' && c != TAB) || c == DEL))
+ stuffcharReadbuff(Ctrl_V);
+--- 1485,1493 ----
+***************
+*** 1774,1783 ****
+ adjust_clip_reg(&oap->regname);
+ #endif
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ mb_adjust_opend(oap);
+- #endif
+
+ /*
+ * Imitate the strange Vi behaviour: If the delete spans more than one
+--- 1766,1773 ----
+***************
+*** 2109,2115 ****
+ return OK;
+ }
+
+- #ifdef FEAT_MBYTE
+ /*
+ * Adjust end of operating area for ending on a multi-byte character.
+ * Used for deletion.
+--- 2099,2104 ----
+***************
+*** 2125,2134 ****
+ oap->end.col += mb_tail_off(p, p + oap->end.col);
+ }
+ }
+- #endif
+
+-
+- #ifdef FEAT_MBYTE
+ /*
+ * Replace the character under the cursor with "c".
+ * This takes care of multi-byte characters.
+--- 2114,2120 ----
+***************
+*** 2144,2150 ****
+ /* Backup to the replaced character. */
+ dec_cursor();
+ }
+- #endif
+
+ /*
+ * Replace a whole area with one character.
+--- 2130,2135 ----
+***************
+*** 2153,2161 ****
+ op_replace(oparg_T *oap, int c)
+ {
+ int n, numc;
+- #ifdef FEAT_MBYTE
+ int num_chars;
+- #endif
+ char_u *newp, *oldp;
+ size_t oldlen;
+ struct block_def bd;
+--- 2138,2144 ----
+***************
+*** 2176,2185 ****
+ c = NL;
+ }
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ mb_adjust_opend(oap);
+- #endif
+
+ if (u_save((linenr_T)(oap->start.lnum - 1),
+ (linenr_T)(oap->end.lnum + 1)) == FAIL)
+--- 2159,2166 ----
+***************
+*** 2230,2236 ****
+ if (bd.is_short && (!virtual_op || bd.is_MAX))
+ numc -= (oap->end_vcol - bd.end_vcol) + 1;
+
+- #ifdef FEAT_MBYTE
+ /* A double-wide character can be replaced only up to half the
+ * times. */
+ if ((*mb_char2cells)(c) > 1)
+--- 2211,2216 ----
+***************
+*** 2246,2252 ****
+ /* Compute bytes needed, move character count to num_chars. */
+ num_chars = numc;
+ numc *= (*mb_char2len)(c);
+- #endif
+ /* oldlen includes textlen, so don't double count */
+ n += numc - bd.textlen;
+
+--- 2226,2231 ----
+***************
+*** 2266,2272 ****
+ * literally. */
+ if (had_ctrl_v_cr || (c != '\r' && c != '\n'))
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ n = (int)STRLEN(newp);
+--- 2245,2250 ----
+***************
+*** 2274,2280 ****
+ n += (*mb_char2bytes)(c, newp + n);
+ }
+ else
+- #endif
+ vim_memset(newp + STRLEN(newp), c, (size_t)numc);
+ if (!bd.is_short)
+ {
+--- 2252,2257 ----
+***************
+*** 2324,2330 ****
+ n = gchar_cursor();
+ if (n != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ if ((*mb_char2len)(c) > 1 || (*mb_char2len)(n) > 1)
+ {
+ /* This is slow, but it handles replacing a single-byte
+--- 2301,2306 ----
+***************
+*** 2334,2340 ****
+ replace_character(c);
+ }
+ else
+- #endif
+ {
+ #ifdef FEAT_VIRTUALEDIT
+ if (n == TAB)
+--- 2310,2315 ----
+***************
+*** 2372,2382 ****
+ curwin->w_cursor.col -= (virtcols + 1);
+ for (; virtcols >= 0; virtcols--)
+ {
+- # ifdef FEAT_MBYTE
+ if ((*mb_char2len)(c) > 1)
+ replace_character(c);
+ else
+- # endif
+ PBYTE(curwin->w_cursor, c);
+ if (inc(&curwin->w_cursor) == -1)
+ break;
+--- 2347,2355 ----
+***************
+*** 2530,2536 ****
+
+ for (todo = length; todo > 0; --todo)
+ {
+- # ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ int len = (*mb_ptr2len)(ml_get_pos(pos));
+--- 2503,2508 ----
+***************
+*** 2539,2545 ****
+ if (len > 0)
+ todo -= len - 1;
+ }
+- # endif
+ did_change |= swapchar(op_type, pos);
+ if (inc(pos) == -1) /* at end of file */
+ break;
+--- 2511,2516 ----
+***************
+*** 2566,2572 ****
+ if (c >= 0x80 && op_type == OP_ROT13)
+ return FALSE;
+
+- #ifdef FEAT_MBYTE
+ if (op_type == OP_UPPER && c == 0xdf
+ && (enc_latin1like || STRCMP(p_enc, "iso-8859-2") == 0))
+ {
+--- 2537,2542 ----
+***************
+*** 2583,2589 ****
+
+ if (enc_dbcs != 0 && c >= 0x100) /* No lower/uppercase letter */
+ return FALSE;
+- #endif
+ nc = c;
+ if (MB_ISLOWER(c))
+ {
+--- 2553,2558 ----
+***************
+*** 2601,2607 ****
+ }
+ if (nc != c)
+ {
+- #ifdef FEAT_MBYTE
+ if (enc_utf8 && (c >= 0x80 || nc >= 0x80))
+ {
+ pos_T sp = curwin->w_cursor;
+--- 2570,2575 ----
+***************
+*** 2613,2619 ****
+ curwin->w_cursor = sp;
+ }
+ else
+- #endif
+ PBYTE(*pos, nc);
+ return TRUE;
+ }
+--- 2581,2586 ----
+***************
+*** 3216,3228 ****
+ {
+ getvcol(curwin, &oap->end, &cs, NULL, &ce);
+ if (p[endcol] == NUL || (cs + oap->end.coladd < ce
+- # ifdef FEAT_MBYTE
+ /* Don't add space for double-wide
+ * char; endcol will be on last byte
+ * of multi-byte char. */
+! && (*mb_head_off)(p, p + endcol) == 0
+! # endif
+! ))
+ {
+ if (oap->start.lnum == oap->end.lnum
+ && oap->start.col == oap->end.col)
+--- 3183,3192 ----
+ {
+ getvcol(curwin, &oap->end, &cs, NULL, &ce);
+ if (p[endcol] == NUL || (cs + oap->end.coladd < ce
+ /* Don't add space for double-wide
+ * char; endcol will be on last byte
+ * of multi-byte char. */
+! && (*mb_head_off)(p, p + endcol) == 0))
+ {
+ if (oap->start.lnum == oap->end.lnum
+ && oap->start.col == oap->end.col)
+***************
+*** 3745,3756 ****
+ #endif
+ getvcol(curwin, &curwin->w_cursor, NULL, NULL, &col);
+
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ /* move to start of next multi-byte character */
+ curwin->w_cursor.col += (*mb_ptr2len)(ml_get_cursor());
+ else
+- #endif
+ #ifdef FEAT_VIRTUALEDIT
+ if (c != TAB || ve_flags != VE_ALL)
+ #endif
+--- 3709,3718 ----
+***************
+*** 3820,3829 ****
+ bd.startspaces = incr - bd.endspaces;
+ --bd.textcol;
+ delcount = 1;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ bd.textcol -= (*mb_head_off)(oldp, oldp + bd.textcol);
+- #endif
+ if (oldp[bd.textcol] != TAB)
+ {
+ /* Only a Tab can be split into spaces. Other
+--- 3782,3789 ----
+***************
+*** 3919,3925 ****
+ * char */
+ if (dir == FORWARD && gchar_cursor() != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ int bytelen = (*mb_ptr2len)(ml_get_cursor());
+--- 3879,3884 ----
+***************
+*** 3933,3939 ****
+ }
+ }
+ else
+- #endif
+ {
+ ++col;
+ if (yanklen)
+--- 3892,3897 ----
+***************
+*** 4279,4289 ****
+ int name;
+ int attr;
+ char_u *arg = eap->arg;
+- #ifdef FEAT_MBYTE
+ int clen;
+- #else
+- # define clen 1
+- #endif
+
+ if (arg != NULL && *arg == NUL)
+ arg = NULL;
+--- 4237,4243 ----
+***************
+*** 4344,4356 ****
+ }
+ for (p = yb->y_array[j]; *p && (n -= ptr2cells(p)) >= 0; ++p)
+ {
+- #ifdef FEAT_MBYTE
+ clen = (*mb_ptr2len)(p);
+- #endif
+ msg_outtrans_len(p, clen);
+- #ifdef FEAT_MBYTE
+ p += clen - 1;
+- #endif
+ }
+ }
+ if (n > 1 && yb->y_type == MLINE)
+--- 4298,4306 ----
+***************
+*** 4438,4460 ****
+ int skip_esc) /* if TRUE, ignore trailing ESC */
+ {
+ int n;
+- #ifdef FEAT_MBYTE
+ int l;
+- #endif
+
+ n = (int)Columns - 6;
+ while (*p != NUL
+ && !(*p == ESC && skip_esc && *(p + 1) == NUL)
+ && (n -= ptr2cells(p)) >= 0)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ {
+ msg_outtrans_len(p, l);
+ p += l;
+ }
+ else
+- #endif
+ msg_outtrans_len(p++, 1);
+ }
+ ui_breakcheck();
+--- 4388,4406 ----
+***************
+*** 4631,4642 ****
+ {
+ curr = skipwhite(curr);
+ if (*curr != ')' && currsize != 0 && endcurr1 != TAB
+- #ifdef FEAT_MBYTE
+ && (!has_format_option(FO_MBYTE_JOIN)
+ || (mb_ptr2char(curr) < 0x100 && endcurr1 < 0x100))
+ && (!has_format_option(FO_MBYTE_JOIN2)
+ || mb_ptr2char(curr) < 0x100 || endcurr1 < 0x100)
+- #endif
+ )
+ {
+ /* don't add a space if the line is ending in a space */
+--- 4577,4586 ----
+***************
+*** 4657,4663 ****
+ endcurr1 = endcurr2 = NUL;
+ if (insert_space && currsize > 0)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ cend = curr + currsize;
+--- 4601,4606 ----
+***************
+*** 4670,4676 ****
+ }
+ }
+ else
+- #endif
+ {
+ endcurr1 = *(curr + currsize - 1);
+ if (currsize > 1)
+--- 4613,4618 ----
+***************
+*** 5715,5734 ****
+ while (col > 0 && vim_isbdigit(ptr[col]))
+ {
+ --col;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ col -= (*mb_head_off)(ptr, ptr + col);
+- #endif
+ }
+
+ if (dohex)
+ while (col > 0 && vim_isxdigit(ptr[col]))
+ {
+ --col;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ col -= (*mb_head_off)(ptr, ptr + col);
+- #endif
+ }
+
+ if ( dobin
+--- 5657,5672 ----
+***************
+*** 5737,5746 ****
+ && (ptr[col] == 'X'
+ || ptr[col] == 'x')
+ && ptr[col - 1] == '0'
+- #ifdef FEAT_MBYTE
+ && (!has_mbyte ||
+ !(*mb_head_off)(ptr, ptr + col - 1))
+- #endif
+ && vim_isxdigit(ptr[col + 1]))))
+ {
+
+--- 5675,5682 ----
+***************
+*** 5751,5760 ****
+ while (col > 0 && vim_isdigit(ptr[col]))
+ {
+ col--;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ col -= (*mb_head_off)(ptr, ptr + col);
+- #endif
+ }
+ }
+
+--- 5687,5694 ----
+***************
+*** 5763,5790 ****
+ && (ptr[col] == 'X'
+ || ptr[col] == 'x')
+ && ptr[col - 1] == '0'
+- #ifdef FEAT_MBYTE
+ && (!has_mbyte ||
+ !(*mb_head_off)(ptr, ptr + col - 1))
+- #endif
+ && vim_isxdigit(ptr[col + 1])) ||
+ ( dobin
+ && col > 0
+ && (ptr[col] == 'B'
+ || ptr[col] == 'b')
+ && ptr[col - 1] == '0'
+- #ifdef FEAT_MBYTE
+ && (!has_mbyte ||
+ !(*mb_head_off)(ptr, ptr + col - 1))
+- #endif
+ && vim_isbdigit(ptr[col + 1])))
+ {
+ /* Found hexadecimal or binary number, move to its start. */
+ --col;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ col -= (*mb_head_off)(ptr, ptr + col);
+- #endif
+ }
+ else
+ {
+--- 5697,5718 ----
+***************
+*** 5803,5812 ****
+ && !(doalp && ASCII_ISALPHA(ptr[col])))
+ {
+ --col;
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ col -= (*mb_head_off)(ptr, ptr + col);
+- #endif
+ }
+ }
+ }
+--- 5731,5738 ----
+***************
+*** 5827,5837 ****
+ goto theend;
+
+ if (col > pos->col && ptr[col - 1] == '-'
+! #ifdef FEAT_MBYTE
+! && (!has_mbyte ||
+! !(*mb_head_off)(ptr, ptr + col - 1))
+! #endif
+! )
+ {
+ negative = TRUE;
+ was_positive = FALSE;
+--- 5753,5759 ----
+ goto theend;
+
+ if (col > pos->col && ptr[col - 1] == '-'
+! && (!has_mbyte || !(*mb_head_off)(ptr, ptr + col - 1)))
+ {
+ negative = TRUE;
+ was_positive = FALSE;
+***************
+*** 5895,5904 ****
+ else
+ {
+ if (col > 0 && ptr[col - 1] == '-'
+- #ifdef FEAT_MBYTE
+ && (!has_mbyte ||
+ !(*mb_head_off)(ptr, ptr + col - 1))
+- #endif
+ && !visual)
+ {
+ /* negative number */
+--- 5817,5824 ----
+***************
+*** 6539,6545 ****
+ if (dpy != NULL && str != NULL && motion_type >= 0
+ && len < 1024*1024 && len > 0)
+ {
+- #ifdef FEAT_MBYTE
+ int ok = TRUE;
+
+ /* The CUT_BUFFER0 is supposed to always contain latin1. Convert from
+--- 6459,6464 ----
+***************
+*** 6579,6585 ****
+ /* Do not store the string if conversion failed. Better to use any
+ * other selection than garbled text. */
+ if (ok)
+- #endif
+ {
+ XStoreBuffer(dpy, (char *)str, (int)len, 0);
+ XFlush(dpy);
+--- 6498,6503 ----
+***************
+*** 7349,7359 ****
+ else if (!vim_isspace(line[i]))
+ is_word = 1;
+ ++chars;
+- #ifdef FEAT_MBYTE
+ i += (*mb_ptr2len)(line + i);
+- #else
+- ++i;
+- #endif
+ }
+
+ if (is_word)
+--- 7267,7273 ----
+***************
+*** 7384,7392 ****
+ char_u buf2[40];
+ linenr_T lnum;
+ varnumber_T byte_count = 0;
+- #ifdef FEAT_MBYTE
+ varnumber_T bom_count = 0;
+- #endif
+ varnumber_T byte_count_cursor = 0;
+ varnumber_T char_count = 0;
+ varnumber_T char_count_cursor = 0;
+--- 7298,7304 ----
+***************
+*** 7609,7620 ****
+ }
+ }
+
+- #ifdef FEAT_MBYTE
+ bom_count = bomb_size();
+ if (bom_count > 0)
+ vim_snprintf((char *)IObuff + STRLEN(IObuff), IOSIZE,
+! _("(+%lld for BOM)"), (long_long_T)bom_count);
+! #endif
+ if (dict == NULL)
+ {
+ /* Don't shorten this message, the user asked for it. */
+--- 7521,7530 ----
+ }
+ }
+
+ bom_count = bomb_size();
+ if (bom_count > 0)
+ vim_snprintf((char *)IObuff + STRLEN(IObuff), IOSIZE,
+! _("(+%lld for BOM)"), (long_long_T)bom_count);
+ if (dict == NULL)
+ {
+ /* Don't shorten this message, the user asked for it. */
+***************
+*** 7629,7639 ****
+ {
+ dict_add_number(dict, "words", word_count);
+ dict_add_number(dict, "chars", char_count);
+! dict_add_number(dict, "bytes", byte_count
+! # ifdef FEAT_MBYTE
+! + bom_count
+! # endif
+! );
+ dict_add_number(dict, VIsual_active ? "visual_bytes" : "cursor_bytes",
+ byte_count_cursor);
+ dict_add_number(dict, VIsual_active ? "visual_chars" : "cursor_chars",
+--- 7539,7545 ----
+ {
+ dict_add_number(dict, "words", word_count);
+ dict_add_number(dict, "chars", char_count);
+! dict_add_number(dict, "bytes", byte_count + bom_count);
+ dict_add_number(dict, VIsual_active ? "visual_bytes" : "cursor_bytes",
+ byte_count_cursor);
+ dict_add_number(dict, VIsual_active ? "visual_chars" : "cursor_chars",
+*** ../vim-8.1.0805/src/option.c 2019-01-20 15:30:36.889328720 +0100
+--- src/option.c 2019-01-24 15:50:26.424493073 +0100
+***************
+*** 66,74 ****
+ #endif
+ #define PV_BIN OPT_BUF(BV_BIN)
+ #define PV_BL OPT_BUF(BV_BL)
+! #ifdef FEAT_MBYTE
+! # define PV_BOMB OPT_BUF(BV_BOMB)
+! #endif
+ #define PV_CI OPT_BUF(BV_CI)
+ #ifdef FEAT_CINDENT
+ # define PV_CIN OPT_BUF(BV_CIN)
+--- 66,72 ----
+ #endif
+ #define PV_BIN OPT_BUF(BV_BIN)
+ #define PV_BL OPT_BUF(BV_BL)
+! #define PV_BOMB OPT_BUF(BV_BOMB)
+ #define PV_CI OPT_BUF(BV_CI)
+ #ifdef FEAT_CINDENT
+ # define PV_CIN OPT_BUF(BV_CIN)
+***************
+*** 101,109 ****
+ #define PV_FIXEOL OPT_BUF(BV_FIXEOL)
+ #define PV_EP OPT_BOTH(OPT_BUF(BV_EP))
+ #define PV_ET OPT_BUF(BV_ET)
+! #ifdef FEAT_MBYTE
+! # define PV_FENC OPT_BUF(BV_FENC)
+! #endif
+ #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+ # define PV_BEXPR OPT_BOTH(OPT_BUF(BV_BEXPR))
+ #endif
+--- 99,105 ----
+ #define PV_FIXEOL OPT_BUF(BV_FIXEOL)
+ #define PV_EP OPT_BOTH(OPT_BUF(BV_EP))
+ #define PV_ET OPT_BUF(BV_ET)
+! #define PV_FENC OPT_BUF(BV_FENC)
+ #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+ # define PV_BEXPR OPT_BOTH(OPT_BUF(BV_BEXPR))
+ #endif
+***************
+*** 137,145 ****
+ # define PV_LISP OPT_BUF(BV_LISP)
+ # define PV_LW OPT_BOTH(OPT_BUF(BV_LW))
+ #endif
+! #ifdef FEAT_MBYTE
+! # define PV_MENC OPT_BOTH(OPT_BUF(BV_MENC))
+! #endif
+ #define PV_MA OPT_BUF(BV_MA)
+ #define PV_ML OPT_BUF(BV_ML)
+ #define PV_MOD OPT_BUF(BV_MOD)
+--- 133,139 ----
+ # define PV_LISP OPT_BUF(BV_LISP)
+ # define PV_LW OPT_BOTH(OPT_BUF(BV_LW))
+ #endif
+! #define PV_MENC OPT_BOTH(OPT_BUF(BV_MENC))
+ #define PV_MA OPT_BUF(BV_MA)
+ #define PV_ML OPT_BUF(BV_ML)
+ #define PV_MOD OPT_BUF(BV_MOD)
+***************
+*** 281,289 ****
+ */
+ static int p_ai;
+ static int p_bin;
+- #ifdef FEAT_MBYTE
+ static int p_bomb;
+- #endif
+ static char_u *p_bh;
+ static char_u *p_bt;
+ static int p_bl;
+--- 275,281 ----
+***************
+*** 312,320 ****
+ static int p_eol;
+ static int p_fixeol;
+ static int p_et;
+- #ifdef FEAT_MBYTE
+ static char_u *p_fenc;
+- #endif
+ static char_u *p_ff;
+ static char_u *p_fo;
+ static char_u *p_flp;
+--- 304,310 ----
+***************
+*** 554,566 ****
+ #endif
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"ambiwidth", "ambw", P_STRING|P_VI_DEF|P_RCLR,
+- #if defined(FEAT_MBYTE)
+ (char_u *)&p_ambw, PV_NONE,
+ {(char_u *)"single", (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"autochdir", "acd", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_AUTOCHDIR
+--- 544,551 ----
+***************
+*** 680,690 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"bomb", NULL, P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_bomb, PV_BOMB,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"breakat", "brk", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST,
+ #ifdef FEAT_LINEBREAK
+--- 665,671 ----
+***************
+*** 736,748 ****
+ {(char_u *)"", (char_u *)0L}
+ SCTX_INIT},
+ {"casemap", "cmp", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_cmp, PV_NONE,
+ {(char_u *)"internal,keepascii", (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"cdpath", "cd", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
+ #ifdef FEAT_SEARCHPATH
+--- 717,724 ----
+***************
+*** 763,769 ****
+ #endif
+ SCTX_INIT},
+ {"charconvert", "ccv", P_STRING|P_VI_DEF|P_SECURE,
+! #if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
+ (char_u *)&p_ccv, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+--- 739,745 ----
+ #endif
+ SCTX_INIT},
+ {"charconvert", "ccv", P_STRING|P_VI_DEF|P_SECURE,
+! #if defined(FEAT_EVAL)
+ (char_u *)&p_ccv, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+***************
+*** 1016,1026 ****
+ #endif
+ SCTX_INIT},
+ {"delcombine", "deco", P_BOOL|P_VI_DEF|P_VIM,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_deco, PV_NONE,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP|P_NDNAME,
+ #ifdef FEAT_INS_EXPAND
+--- 992,998 ----
+***************
+*** 1077,1098 ****
+ (char_u *)&p_ed, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"emoji", "emo", P_BOOL|P_VI_DEF|P_RCLR,
+- #if defined(FEAT_MBYTE)
+ (char_u *)&p_emoji, PV_NONE,
+ {(char_u *)TRUE, (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"encoding", "enc", P_STRING|P_VI_DEF|P_RCLR|P_NO_ML,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_enc, PV_NONE,
+ {(char_u *)ENC_DFLT, (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"endofline", "eol", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_eol, PV_EOL,
+--- 1049,1060 ----
+***************
+*** 1138,1159 ****
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"fileencoding","fenc", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_RBUF
+ |P_NO_MKRC,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_fenc, PV_FENC,
+ {(char_u *)"", (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"fileencodings","fencs", P_STRING|P_VI_DEF|P_ONECOMMA,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_fencs, PV_NONE,
+ {(char_u *)"ucs-bom", (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC
+ |P_CURSWANT,
+--- 1100,1111 ----
+***************
+*** 1416,1422 ****
+ #endif
+ SCTX_INIT},
+ {"guifontwide", "gfw", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+! #if defined(FEAT_GUI) && defined(FEAT_MBYTE)
+ (char_u *)&p_guifontwide, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+--- 1368,1374 ----
+ #endif
+ SCTX_INIT},
+ {"guifontwide", "gfw", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+! #if defined(FEAT_GUI)
+ (char_u *)&p_guifontwide, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+***************
+*** 1533,1539 ****
+ (char_u *)&p_ic, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"imactivatefunc","imaf",P_STRING|P_VI_DEF|P_SECURE,
+! #if defined(FEAT_EVAL) && defined(FEAT_MBYTE)
+ (char_u *)&p_imaf, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ # else
+--- 1485,1491 ----
+ (char_u *)&p_ic, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"imactivatefunc","imaf",P_STRING|P_VI_DEF|P_SECURE,
+! #if defined(FEAT_EVAL)
+ (char_u *)&p_imaf, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ # else
+***************
+*** 1549,1566 ****
+ #endif
+ {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"imcmdline", "imc", P_BOOL|P_VI_DEF,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_imcmdline, PV_NONE,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"imdisable", "imd", P_BOOL|P_VI_DEF,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_imdisable, PV_NONE,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ #ifdef __sgi
+ {(char_u *)TRUE, (char_u *)0L}
+ #else
+--- 1501,1510 ----
+***************
+*** 1576,1582 ****
+ {(char_u *)B_IMODE_USE_INSERT, (char_u *)0L}
+ SCTX_INIT},
+ {"imstatusfunc","imsf",P_STRING|P_VI_DEF|P_SECURE,
+! #if defined(FEAT_EVAL) && defined(FEAT_MBYTE)
+ (char_u *)&p_imsf, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #else
+--- 1520,1526 ----
+ {(char_u *)B_IMODE_USE_INSERT, (char_u *)0L}
+ SCTX_INIT},
+ {"imstatusfunc","imsf",P_STRING|P_VI_DEF|P_SECURE,
+! #if defined(FEAT_EVAL)
+ (char_u *)&p_imsf, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #else
+***************
+*** 1872,1884 ****
+ #endif
+ SCTX_INIT},
+ {"makeencoding","menc", P_STRING|P_VI_DEF,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_menc, PV_MENC,
+ {(char_u *)"", (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"makeprg", "mp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+--- 1816,1823 ----
+***************
+*** 1901,1911 ****
+ (char_u *)&p_mat, PV_NONE,
+ {(char_u *)5L, (char_u *)0L} SCTX_INIT},
+ {"maxcombine", "mco", P_NUM|P_VI_DEF|P_CURSWANT,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_mco, PV_NONE,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ {(char_u *)2, (char_u *)0L} SCTX_INIT},
+ {"maxfuncdepth", "mfd", P_NUM|P_VI_DEF,
+ #ifdef FEAT_EVAL
+--- 1840,1846 ----
+***************
+*** 2197,2203 ****
+ #endif
+ SCTX_INIT},
+ {"printmbcharset", "pmbcs", P_STRING|P_VI_DEF,
+! #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
+ (char_u *)&p_pmcs, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+--- 2132,2138 ----
+ #endif
+ SCTX_INIT},
+ {"printmbcharset", "pmbcs", P_STRING|P_VI_DEF,
+! #if defined(FEAT_POSTSCRIPT)
+ (char_u *)&p_pmcs, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+***************
+*** 2206,2212 ****
+ #endif
+ SCTX_INIT},
+ {"printmbfont", "pmbfn", P_STRING|P_VI_DEF,
+! #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
+ (char_u *)&p_pmfn, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+--- 2141,2147 ----
+ #endif
+ SCTX_INIT},
+ {"printmbfont", "pmbfn", P_STRING|P_VI_DEF,
+! #if defined(FEAT_POSTSCRIPT)
+ (char_u *)&p_pmfn, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #else
+***************
+*** 2748,2760 ****
+ #endif
+ {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"termencoding", "tenc", P_STRING|P_VI_DEF|P_RCLR,
+- #ifdef FEAT_MBYTE
+ (char_u *)&p_tenc, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+- #else
+- (char_u *)NULL, PV_NONE,
+- {(char_u *)0L, (char_u *)0L}
+- #endif
+ SCTX_INIT},
+ {"termguicolors", "tgc", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
+ #ifdef FEAT_TERMGUICOLORS
+--- 2683,2690 ----
+***************
+*** 3238,3246 ****
+
+ #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
+
+- #ifdef FEAT_MBYTE
+ static char *(p_ambw_values[]) = {"single", "double", NULL};
+- #endif
+ static char *(p_bg_values[]) = {"light", "dark", NULL};
+ static char *(p_nf_values[]) = {"bin", "octal", "hex", "alpha", NULL};
+ static char *(p_ff_values[]) = {FF_UNIX, FF_DOS, FF_MAC, NULL};
+--- 3168,3174 ----
+***************
+*** 3643,3649 ****
+
+ didset_options2();
+
+- #ifdef FEAT_MBYTE
+ # if defined(WIN3264) && defined(FEAT_GETTEXT)
+ /*
+ * If $LANG isn't set, try to get a good value for it. This makes the
+--- 3571,3576 ----
+***************
+*** 3727,3733 ****
+ }
+ #endif
+
+! # if defined(WIN3264) && !defined(FEAT_GUI)
+ /* Win32 console: When GetACP() returns a different value from
+ * GetConsoleCP() set 'termencoding'. */
+ if (GetACP() != GetConsoleCP())
+--- 3654,3660 ----
+ }
+ #endif
+
+! #if defined(WIN3264) && !defined(FEAT_GUI)
+ /* Win32 console: When GetACP() returns a different value from
+ * GetConsoleCP() set 'termencoding'. */
+ if (GetACP() != GetConsoleCP())
+***************
+*** 3750,3760 ****
+ else
+ p_tenc = empty_option;
+ }
+! # endif
+! # if defined(WIN3264) && defined(FEAT_MBYTE)
+ /* $HOME may have characters in active code page. */
+ init_homedir();
+! # endif
+ }
+ else
+ {
+--- 3677,3687 ----
+ else
+ p_tenc = empty_option;
+ }
+! #endif
+! #if defined(WIN3264)
+ /* $HOME may have characters in active code page. */
+ init_homedir();
+! #endif
+ }
+ else
+ {
+***************
+*** 3762,3768 ****
+ p_enc = save_enc;
+ }
+ }
+- #endif
+
+ #ifdef FEAT_MULTI_LANG
+ /* Set the default for 'helplang'. */
+--- 3689,3694 ----
+***************
+*** 3859,3877 ****
+
+ for (i = 0; !istermoption(&options[i]); i++)
+ if (!(options[i].flags & P_NODEFAULT)
+- #if defined(FEAT_MBYTE) || defined(FEAT_CRYPT)
+ && (opt_flags == 0
+! || (TRUE
+! # if defined(FEAT_MBYTE)
+! && options[i].var != (char_u *)&p_enc
+! # endif
+ # if defined(FEAT_CRYPT)
+ && options[i].var != (char_u *)&p_cm
+ && options[i].var != (char_u *)&p_key
+ # endif
+! ))
+! #endif
+! )
+ set_option_default(i, opt_flags, p_cp);
+
+ /* The 'scroll' option must be computed for all windows. */
+--- 3785,3797 ----
+
+ for (i = 0; !istermoption(&options[i]); i++)
+ if (!(options[i].flags & P_NODEFAULT)
+ && (opt_flags == 0
+! || (options[i].var != (char_u *)&p_enc
+ # if defined(FEAT_CRYPT)
+ && options[i].var != (char_u *)&p_cm
+ && options[i].var != (char_u *)&p_key
+ # endif
+! )))
+ set_option_default(i, opt_flags, p_cp);
+
+ /* The 'scroll' option must be computed for all windows. */
+***************
+*** 5018,5024 ****
+ #endif
+ )
+ ++arg; /* remove backslash */
+- #ifdef FEAT_MBYTE
+ if (has_mbyte
+ && (i = (*mb_ptr2len)(arg)) > 1)
+ {
+--- 4938,4943 ----
+***************
+*** 5028,5034 ****
+ s += i;
+ }
+ else
+- #endif
+ *s++ = *arg++;
+ }
+ *s = NUL;
+--- 4947,4952 ----
+***************
+*** 5596,5604 ****
+ /* initialize the table for 'iskeyword' et.al. */
+ (void)init_chartab();
+
+- #ifdef FEAT_MBYTE
+ (void)opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, TRUE);
+- #endif
+ (void)opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, TRUE);
+ (void)opt_strings_flags(p_bo, p_bo_values, &bo_flags, TRUE);
+ #ifdef FEAT_SESSION
+--- 5514,5520 ----
+***************
+*** 5689,5697 ****
+ {
+ check_string_option(&buf->b_p_bh);
+ check_string_option(&buf->b_p_bt);
+- #ifdef FEAT_MBYTE
+ check_string_option(&buf->b_p_fenc);
+- #endif
+ check_string_option(&buf->b_p_ff);
+ #ifdef FEAT_FIND_ID
+ check_string_option(&buf->b_p_def);
+--- 5605,5611 ----
+***************
+*** 5780,5788 ****
+ check_string_option(&buf->b_p_lw);
+ #endif
+ check_string_option(&buf->b_p_bkc);
+- #ifdef FEAT_MBYTE
+ check_string_option(&buf->b_p_menc);
+- #endif
+ #ifdef FEAT_VARTABS
+ check_string_option(&buf->b_p_vsts);
+ check_string_option(&buf->b_p_vts);
+--- 5694,5700 ----
+***************
+*** 6318,6324 ****
+ }
+
+ /* 'ambiwidth' */
+- #ifdef FEAT_MBYTE
+ else if (varp == &p_ambw || varp == &p_emoji)
+ {
+ if (check_opt_strings(p_ambw, p_ambw_values, FALSE) != OK)
+--- 6230,6235 ----
+***************
+*** 6328,6334 ****
+ else if (set_chars_option(&p_fcs) != NULL)
+ errmsg = _("E835: Conflicts with value of 'fillchars'");
+ }
+- #endif
+
+ /* 'background' */
+ else if (varp == &p_bg)
+--- 6239,6244 ----
+***************
+*** 6404,6410 ****
+ errmsg = e_invarg;
+ }
+
+- #ifdef FEAT_MBYTE
+ /* 'encoding', 'fileencoding', 'termencoding' and 'makeencoding' */
+ else if (varp == &p_enc || gvarp == &p_fenc || varp == &p_tenc
+ || gvarp == &p_menc)
+--- 6314,6319 ----
+***************
+*** 6419,6428 ****
+ errmsg = e_invarg;
+ else
+ {
+! # ifdef FEAT_TITLE
+ /* May show a "+" in the title now. */
+ redraw_titles();
+! # endif
+ /* Add 'fileencoding' to the swap file. */
+ ml_setflags(curbuf);
+ }
+--- 6328,6337 ----
+ errmsg = e_invarg;
+ else
+ {
+! #ifdef FEAT_TITLE
+ /* May show a "+" in the title now. */
+ redraw_titles();
+! #endif
+ /* Add 'fileencoding' to the swap file. */
+ ml_setflags(curbuf);
+ }
+***************
+*** 6439,6467 ****
+ if (varp == &p_enc)
+ {
+ errmsg = mb_init();
+! # ifdef FEAT_TITLE
+ redraw_titles();
+! # endif
+ }
+ }
+
+! # if defined(FEAT_GUI_GTK)
+ if (errmsg == NULL && varp == &p_tenc && gui.in_use)
+ {
+ /* GTK+ 2 uses only a single encoding, and that is UTF-8. */
+ if (STRCMP(p_tenc, "utf-8") != 0)
+ errmsg = N_("E617: Cannot be changed in the GTK+ 2 GUI");
+ }
+! # endif
+
+ if (errmsg == NULL)
+ {
+! # ifdef FEAT_KEYMAP
+ /* When 'keymap' is used and 'encoding' changes, reload the keymap
+ * (with another encoding). */
+ if (varp == &p_enc && *curbuf->b_p_keymap != NUL)
+ (void)keymap_init();
+! # endif
+
+ /* When 'termencoding' is not empty and 'encoding' changes or when
+ * 'termencoding' changes, need to setup for keyboard input and
+--- 6348,6376 ----
+ if (varp == &p_enc)
+ {
+ errmsg = mb_init();
+! #ifdef FEAT_TITLE
+ redraw_titles();
+! #endif
+ }
+ }
+
+! #if defined(FEAT_GUI_GTK)
+ if (errmsg == NULL && varp == &p_tenc && gui.in_use)
+ {
+ /* GTK+ 2 uses only a single encoding, and that is UTF-8. */
+ if (STRCMP(p_tenc, "utf-8") != 0)
+ errmsg = N_("E617: Cannot be changed in the GTK+ 2 GUI");
+ }
+! #endif
+
+ if (errmsg == NULL)
+ {
+! #ifdef FEAT_KEYMAP
+ /* When 'keymap' is used and 'encoding' changes, reload the keymap
+ * (with another encoding). */
+ if (varp == &p_enc && *curbuf->b_p_keymap != NUL)
+ (void)keymap_init();
+! #endif
+
+ /* When 'termencoding' is not empty and 'encoding' changes or when
+ * 'termencoding' changes, need to setup for keyboard input and
+***************
+*** 6477,6490 ****
+ }
+ }
+
+! # if defined(WIN3264) && defined(FEAT_MBYTE)
+ /* $HOME may have characters in active code page. */
+ if (varp == &p_enc)
+ init_homedir();
+! # endif
+ }
+ }
+- #endif
+
+ #if defined(FEAT_POSTSCRIPT)
+ else if (varp == &p_penc)
+--- 6386,6398 ----
+ }
+ }
+
+! #if defined(WIN3264)
+ /* $HOME may have characters in active code page. */
+ if (varp == &p_enc)
+ init_homedir();
+! #endif
+ }
+ }
+
+ #if defined(FEAT_POSTSCRIPT)
+ else if (varp == &p_penc)
+***************
+*** 6684,6690 ****
+ /* 'matchpairs' */
+ else if (gvarp == &p_mps)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ for (p = *varp; *p != NUL; ++p)
+--- 6592,6597 ----
+***************
+*** 6711,6717 ****
+ }
+ }
+ else
+- #endif
+ {
+ /* Check for "x:y,x:y" */
+ for (p = *varp; *p != NUL; p += 4)
+--- 6618,6623 ----
+***************
+*** 6971,6977 ****
+ redraw_gui_only = TRUE;
+ }
+ # endif
+- # ifdef FEAT_MBYTE
+ else if (varp == &p_guifontwide)
+ {
+ if (STRCMP(p_guifontwide, "*") == 0)
+--- 6877,6882 ----
+***************
+*** 6980,6986 ****
+ errmsg = N_("E534: Invalid wide font");
+ redraw_gui_only = TRUE;
+ }
+- # endif
+ #endif
+
+ #ifdef CURSOR_SHAPE
+--- 6885,6890 ----
+***************
+*** 7001,7007 ****
+ #ifdef FEAT_PRINTER
+ else if (varp == &p_popt)
+ errmsg = parse_printoptions();
+! # if defined(FEAT_MBYTE) && defined(FEAT_POSTSCRIPT)
+ else if (varp == &p_pmfn)
+ errmsg = parse_printmbfont();
+ # endif
+--- 6905,6911 ----
+ #ifdef FEAT_PRINTER
+ else if (varp == &p_popt)
+ errmsg = parse_printoptions();
+! # if defined(FEAT_POSTSCRIPT)
+ else if (varp == &p_pmfn)
+ errmsg = parse_printmbfont();
+ # endif
+***************
+*** 7395,7408 ****
+ errmsg = e_invarg;
+ }
+
+- #ifdef FEAT_MBYTE
+ /* 'casemap' */
+ else if (varp == &p_cmp)
+ {
+ if (opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, TRUE) != OK)
+ errmsg = e_invarg;
+ }
+- #endif
+
+ #ifdef FEAT_DIFF
+ /* 'diffopt' */
+--- 7299,7310 ----
+***************
+*** 8022,8054 ****
+ {
+ c1 = c2 = c3 = 0;
+ s = p + len + 1;
+- #ifdef FEAT_MBYTE
+ c1 = mb_ptr2char_adv(&s);
+ if (mb_char2cells(c1) > 1)
+ continue;
+- #else
+- c1 = *s++;
+- #endif
+ if (tab[i].cp == &lcs_tab2)
+ {
+ if (*s == NUL)
+ continue;
+- #ifdef FEAT_MBYTE
+ c2 = mb_ptr2char_adv(&s);
+ if (mb_char2cells(c2) > 1)
+ continue;
+- #else
+- c2 = *s++;
+- #endif
+ if (!(*s == ',' || *s == NUL))
+ {
+- #ifdef FEAT_MBYTE
+ c3 = mb_ptr2char_adv(&s);
+ if (mb_char2cells(c3) > 1)
+ continue;
+- #else
+- c3 = *s++;
+- #endif
+ }
+ }
+
+--- 7924,7944 ----
+***************
+*** 8506,8518 ****
+ {
+ redraw_titles();
+ }
+- # ifdef FEAT_MBYTE
+ /* when 'bomb' is changed, redraw the window title and tab page text */
+ else if ((int *)varp == &curbuf->b_p_bomb)
+ {
+ redraw_titles();
+ }
+- # endif
+ #endif
+
+ /* when 'bin' is set also set some other options */
+--- 8396,8406 ----
+***************
+*** 8891,8900 ****
+ #endif
+ }
+
+- # ifdef FEAT_MBYTE
+ /* set 'delcombine' */
+ p_deco = TRUE;
+- # endif
+
+ # ifdef FEAT_KEYMAP
+ /* Force-set the necessary keymap for arabic */
+--- 8779,8786 ----
+***************
+*** 9210,9216 ****
+ }
+ #endif
+
+- #ifdef FEAT_MBYTE
+ /* 'maxcombine' */
+ else if (pp == &p_mco)
+ {
+--- 9096,9101 ----
+***************
+*** 9220,9226 ****
+ p_mco = 0;
+ screenclear(); /* will re-allocate the screen */
+ }
+- #endif
+
+ else if (pp == &curbuf->b_p_iminsert)
+ {
+--- 9105,9110 ----
+***************
+*** 10078,10084 ****
+ return (char_u *)NULL;
+ }
+
+- #if defined(FEAT_MBYTE) || defined(PROTO)
+ char_u *
+ get_encoding_default(void)
+ {
+--- 9962,9967 ----
+***************
+*** 10089,10095 ****
+ return options[i].def_val[VI_DEFAULT];
+ return (char_u *)NULL;
+ }
+- #endif
+
+ /*
+ * Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number.
+--- 9972,9977 ----
+***************
+*** 10794,10804 ****
+ clear_string_option(&buf->b_p_lw);
+ break;
+ #endif
+- #ifdef FEAT_MBYTE
+ case PV_MENC:
+ clear_string_option(&buf->b_p_menc);
+ break;
+- #endif
+ }
+ }
+ #endif
+--- 10676,10684 ----
+***************
+*** 10853,10861 ****
+ case PV_LW: return (char_u *)&(curbuf->b_p_lw);
+ #endif
+ case PV_BKC: return (char_u *)&(curbuf->b_p_bkc);
+- #ifdef FEAT_MBYTE
+ case PV_MENC: return (char_u *)&(curbuf->b_p_menc);
+- #endif
+ }
+ return NULL; /* "cannot happen" */
+ }
+--- 10733,10739 ----
+***************
+*** 10931,10940 ****
+ case PV_LW: return *curbuf->b_p_lw != NUL
+ ? (char_u *)&(curbuf->b_p_lw) : p->var;
+ #endif
+- #ifdef FEAT_MBYTE
+ case PV_MENC: return *curbuf->b_p_menc != NUL
+ ? (char_u *)&(curbuf->b_p_menc) : p->var;
+- #endif
+
+ #ifdef FEAT_ARABIC
+ case PV_ARAB: return (char_u *)&(curwin->w_p_arab);
+--- 10809,10816 ----
+***************
+*** 11000,11008 ****
+
+ case PV_AI: return (char_u *)&(curbuf->b_p_ai);
+ case PV_BIN: return (char_u *)&(curbuf->b_p_bin);
+- #ifdef FEAT_MBYTE
+ case PV_BOMB: return (char_u *)&(curbuf->b_p_bomb);
+- #endif
+ case PV_BH: return (char_u *)&(curbuf->b_p_bh);
+ case PV_BT: return (char_u *)&(curbuf->b_p_bt);
+ case PV_BL: return (char_u *)&(curbuf->b_p_bl);
+--- 10876,10882 ----
+***************
+*** 11031,11039 ****
+ case PV_EOL: return (char_u *)&(curbuf->b_p_eol);
+ case PV_FIXEOL: return (char_u *)&(curbuf->b_p_fixeol);
+ case PV_ET: return (char_u *)&(curbuf->b_p_et);
+- #ifdef FEAT_MBYTE
+ case PV_FENC: return (char_u *)&(curbuf->b_p_fenc);
+- #endif
+ case PV_FF: return (char_u *)&(curbuf->b_p_ff);
+ case PV_FT: return (char_u *)&(curbuf->b_p_ft);
+ case PV_FO: return (char_u *)&(curbuf->b_p_fo);
+--- 10905,10911 ----
+***************
+*** 11378,11386 ****
+ free_buf_options(buf, TRUE);
+ buf->b_p_ro = FALSE; /* don't copy readonly */
+ buf->b_p_tx = p_tx;
+- #ifdef FEAT_MBYTE
+ buf->b_p_fenc = vim_strsave(p_fenc);
+- #endif
+ switch (*p_ffs)
+ {
+ case 'm':
+--- 11250,11256 ----
+***************
+*** 11410,11418 ****
+ buf->b_p_wm_nopaste = p_wm_nopaste;
+ buf->b_p_wm_nobin = p_wm_nobin;
+ buf->b_p_bin = p_bin;
+- #ifdef FEAT_MBYTE
+ buf->b_p_bomb = p_bomb;
+- #endif
+ buf->b_p_fixeol = p_fixeol;
+ buf->b_p_et = p_et;
+ buf->b_p_et_nobin = p_et_nobin;
+--- 11280,11286 ----
+***************
+*** 11549,11557 ****
+ #ifdef FEAT_LISP
+ buf->b_p_lw = empty_option;
+ #endif
+- #ifdef FEAT_MBYTE
+ buf->b_p_menc = empty_option;
+- #endif
+
+ /*
+ * Don't copy the options set by ex_help(), use the saved values,
+--- 11417,11423 ----
+***************
+*** 12137,12149 ****
+ *
+ * langmap_mapchar[] maps any of 256 chars to an ASCII char used for Vim
+ * commands.
+! * When FEAT_MBYTE is defined langmap_mapga.ga_data is a sorted table of
+! * langmap_entry_T. This does the same as langmap_mapchar[] for characters >=
+! * 256.
+! */
+! # if defined(FEAT_MBYTE) || defined(PROTO)
+! /*
+! * With multi-byte support use growarray for 'langmap' chars >= 256
+ */
+ typedef struct
+ {
+--- 12003,12012 ----
+ *
+ * langmap_mapchar[] maps any of 256 chars to an ASCII char used for Vim
+ * commands.
+! * langmap_mapga.ga_data is a sorted table of langmap_entry_T. This does the
+! * same as langmap_mapchar[] for characters >= 256.
+! *
+! * Use growarray for 'langmap' chars >= 256
+ */
+ typedef struct
+ {
+***************
+*** 12217,12223 ****
+ }
+ return c; /* no entry found, return "c" unmodified */
+ }
+- # endif
+
+ static void
+ langmap_init(void)
+--- 12080,12085 ----
+***************
+*** 12226,12234 ****
+
+ for (i = 0; i < 256; i++)
+ langmap_mapchar[i] = i; /* we init with a one-to-one map */
+- # ifdef FEAT_MBYTE
+ ga_init2(&langmap_mapga, sizeof(langmap_entry_T), 8);
+- # endif
+ }
+
+ /*
+--- 12088,12094 ----
+***************
+*** 12242,12250 ****
+ char_u *p2;
+ int from, to;
+
+- #ifdef FEAT_MBYTE
+ ga_clear(&langmap_mapga); /* clear the previous map first */
+- #endif
+ langmap_init(); /* back to one-to-one map */
+
+ for (p = p_langmap; p[0] != NUL; )
+--- 12102,12108 ----
+***************
+*** 12268,12278 ****
+ }
+ if (p[0] == '\\' && p[1] != NUL)
+ ++p;
+- #ifdef FEAT_MBYTE
+ from = (*mb_ptr2char)(p);
+- #else
+- from = p[0];
+- #endif
+ to = NUL;
+ if (p2 == NULL)
+ {
+--- 12126,12132 ----
+***************
+*** 12281,12291 ****
+ {
+ if (p[0] == '\\')
+ ++p;
+- #ifdef FEAT_MBYTE
+ to = (*mb_ptr2char)(p);
+- #else
+- to = p[0];
+- #endif
+ }
+ }
+ else
+--- 12135,12141 ----
+***************
+*** 12294,12304 ****
+ {
+ if (p2[0] == '\\')
+ ++p2;
+- #ifdef FEAT_MBYTE
+ to = (*mb_ptr2char)(p2);
+- #else
+- to = p2[0];
+- #endif
+ }
+ }
+ if (to == NUL)
+--- 12144,12150 ----
+***************
+*** 12308,12318 ****
+ return;
+ }
+
+- #ifdef FEAT_MBYTE
+ if (from >= 256)
+ langmap_set_entry(from, to);
+ else
+- #endif
+ langmap_mapchar[from & 255] = to;
+
+ /* Advance to next pair */
+--- 12154,12162 ----
+***************
+*** 12813,12819 ****
+ {
+ buf->b_start_ffc = *buf->b_p_ff;
+ buf->b_start_eol = buf->b_p_eol;
+- #ifdef FEAT_MBYTE
+ buf->b_start_bomb = buf->b_p_bomb;
+
+ /* Only use free/alloc when necessary, they take time. */
+--- 12657,12662 ----
+***************
+*** 12823,12829 ****
+ vim_free(buf->b_start_fenc);
+ buf->b_start_fenc = vim_strsave(buf->b_p_fenc);
+ }
+- #endif
+ }
+
+ /*
+--- 12666,12671 ----
+***************
+*** 12850,12864 ****
+ return TRUE;
+ if ((buf->b_p_bin || !buf->b_p_fixeol) && buf->b_start_eol != buf->b_p_eol)
+ return TRUE;
+- #ifdef FEAT_MBYTE
+ if (!buf->b_p_bin && buf->b_start_bomb != buf->b_p_bomb)
+ return TRUE;
+ if (buf->b_start_fenc == NULL)
+ return (*buf->b_p_fenc != NUL);
+ return (STRCMP(buf->b_start_fenc, buf->b_p_fenc) != 0);
+- #else
+- return FALSE;
+- #endif
+ }
+
+ /*
+--- 12692,12702 ----
+***************
+*** 13244,13250 ****
+ ptr = curbuf->b_p_mps;
+ while (*ptr != NUL)
+ {
+- #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ char_u *prev;
+--- 13082,13087 ----
+***************
+*** 13284,13290 ****
+ ptr += mb_ptr2len(ptr);
+ }
+ else
+- #endif
+ {
+ if (*ptr == *initc)
+ {
+--- 13121,13126 ----
+*** ../vim-8.1.0805/src/charset.c 2019-01-24 15:04:44.662887892 +0100
+--- src/charset.c 2019-01-24 15:52:54.887433134 +0100
+***************
+*** 1266,1272 ****
+ #endif
+ )
+ {
+- head = 0;
+ for (;;)
+ {
+ head = 0;
+--- 1266,1271 ----
+*** ../vim-8.1.0805/src/version.c 2019-01-24 15:04:44.674887811 +0100
+--- src/version.c 2019-01-24 15:50:45.136358654 +0100
+***************
+*** 793,794 ****
+--- 793,796 ----
+ { /* Add new patch number below this line */
++ /**/
++ 806,
+ /**/
+
+--
+"Never be afraid to tell the world who you are."
+ -- Anonymous
+
+ /// 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 ///