summaryrefslogtreecommitdiffstats
path: root/patches/source/vim/patches/7.4.212
diff options
context:
space:
mode:
Diffstat (limited to 'patches/source/vim/patches/7.4.212')
-rw-r--r--patches/source/vim/patches/7.4.2125720
1 files changed, 5720 insertions, 0 deletions
diff --git a/patches/source/vim/patches/7.4.212 b/patches/source/vim/patches/7.4.212
new file mode 100644
index 00000000..6bc98eb3
--- /dev/null
+++ b/patches/source/vim/patches/7.4.212
@@ -0,0 +1,5720 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.212
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.212 (after 7.4.200)
+Problem: Now that the +visual feature is always enabled the #ifdefs for it
+ are not useful.
+Solution: Remove the checks for FEAT_VISUAL.
+Files: src/buffer.c, src/charset.c, src/edit.c, src/eval.c,
+ src/ex_cmds.c, src/ex_docmd.c, src/fold.c, src/getchar.c,
+ src/gui.c, src/gui_mac.c, src/gui_w48.c, src/main.c, src/mark.c,
+ src/menu.c, src/misc2.c, src/move.c, src/netbeans.c, src/normal.c,
+ src/ops.c, src/option.c, src/os_msdos.c, src/os_qnx.c,
+ src/quickfix.c, src/regexp.c, src/regexp_nfa.c, src/screen.c,
+ src/search.c, src/spell.c, src/syntax.c, src/term.c, src/ui.c,
+ src/undo.c, src/version.c, src/window.c, src/feature.h,
+ src/globals.h, src/option.h, src/os_win32.h, src/structs.h
+
+
+*** ../vim-7.4.211/src/buffer.c 2014-03-12 18:55:52.100906804 +0100
+--- src/buffer.c 2014-03-23 13:01:39.843144050 +0100
+***************
+*** 1432,1441 ****
+ curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
+ buflist_altfpos(curwin); /* remember curpos */
+
+- #ifdef FEAT_VISUAL
+ /* Don't restart Select mode after switching to another buffer. */
+ VIsual_reselect = FALSE;
+- #endif
+
+ /* close_windows() or apply_autocmds() may change curbuf */
+ prevbuf = curbuf;
+--- 1432,1439 ----
+*** ../vim-7.4.211/src/charset.c 2013-02-06 16:20:01.000000000 +0100
+--- src/charset.c 2014-03-23 13:02:19.467144657 +0100
+***************
+*** 1380,1389 ****
+ && (State & NORMAL)
+ && !wp->w_p_list
+ && !virtual_active()
+! #ifdef FEAT_VISUAL
+! && !(VIsual_active
+! && (*p_sel == 'e' || ltoreq(*pos, VIsual)))
+! #endif
+ )
+ *cursor = vcol + incr - 1; /* cursor at end */
+ else
+--- 1380,1386 ----
+ && (State & NORMAL)
+ && !wp->w_p_list
+ && !virtual_active()
+! && !(VIsual_active && (*p_sel == 'e' || ltoreq(*pos, VIsual)))
+ )
+ *cursor = vcol + incr - 1; /* cursor at end */
+ else
+***************
+*** 1463,1469 ****
+ }
+ #endif
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+ /*
+ * Get the leftmost and rightmost virtual column of pos1 and pos2.
+ * Used for Visual block mode.
+--- 1460,1465 ----
+***************
+*** 1500,1506 ****
+ else
+ *right = to1;
+ }
+- #endif
+
+ /*
+ * skipwhite: skip over ' ' and '\t'.
+--- 1496,1501 ----
+*** ../vim-7.4.211/src/edit.c 2014-02-22 23:03:48.712901208 +0100
+--- src/edit.c 2014-03-23 13:03:11.951145462 +0100
+***************
+*** 220,228 ****
+ #ifdef FEAT_RIGHTLEFT
+ static void ins_ctrl_ __ARGS((void));
+ #endif
+- #ifdef FEAT_VISUAL
+ static int ins_start_select __ARGS((int c));
+- #endif
+ static void ins_insert __ARGS((int replaceState));
+ static void ins_ctrl_o __ARGS((void));
+ static void ins_shift __ARGS((int c, int lastc));
+--- 220,226 ----
+***************
+*** 932,938 ****
+ }
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /*
+ * If 'keymodel' contains "startsel", may start selection. If it
+ * does, a CTRL-O and c will be stuffed, we need to get these
+--- 930,935 ----
+***************
+*** 940,946 ****
+ */
+ if (ins_start_select(c))
+ continue;
+- #endif
+
+ /*
+ * The big switch to handle a character in insert mode.
+--- 937,942 ----
+***************
+*** 6900,6906 ****
+ else if (cc != NUL)
+ ++curwin->w_cursor.col; /* put cursor back on the NUL */
+
+- #ifdef FEAT_VISUAL
+ /* <C-S-Right> may have started Visual mode, adjust the position for
+ * deleted characters. */
+ if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum)
+--- 6896,6901 ----
+***************
+*** 6910,6921 ****
+ if (VIsual.col > len)
+ {
+ VIsual.col = len;
+! # ifdef FEAT_VIRTUALEDIT
+ VIsual.coladd = 0;
+! # endif
+ }
+ }
+- #endif
+ }
+ }
+ did_ai = FALSE;
+--- 6905,6915 ----
+ if (VIsual.col > len)
+ {
+ VIsual.col = len;
+! #ifdef FEAT_VIRTUALEDIT
+ VIsual.coladd = 0;
+! #endif
+ }
+ }
+ }
+ }
+ did_ai = FALSE;
+***************
+*** 8112,8120 ****
+ int need_redraw = FALSE;
+ int regname;
+ int literally = 0;
+- #ifdef FEAT_VISUAL
+ int vis_active = VIsual_active;
+- #endif
+
+ /*
+ * If we are going to wait for a character, show a '"'.
+--- 8106,8112 ----
+***************
+*** 8218,8228 ****
+ if (need_redraw || stuff_empty())
+ edit_unputchar();
+
+- #ifdef FEAT_VISUAL
+ /* Disallow starting Visual mode here, would get a weird mode. */
+ if (!vis_active && VIsual_active)
+ end_visual_mode();
+- #endif
+ }
+
+ /*
+--- 8210,8218 ----
+***************
+*** 8419,8429 ****
+ #endif
+ )
+ && (restart_edit == NUL
+! || (gchar_cursor() == NUL
+! #ifdef FEAT_VISUAL
+! && !VIsual_active
+! #endif
+! ))
+ #ifdef FEAT_RIGHTLEFT
+ && !revins_on
+ #endif
+--- 8409,8415 ----
+ #endif
+ )
+ && (restart_edit == NUL
+! || (gchar_cursor() == NUL && !VIsual_active))
+ #ifdef FEAT_RIGHTLEFT
+ && !revins_on
+ #endif
+***************
+*** 8525,8531 ****
+ }
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /*
+ * If 'keymodel' contains "startsel", may start selection.
+ * Returns TRUE when a CTRL-O and other keys stuffed.
+--- 8511,8516 ----
+***************
+*** 8581,8587 ****
+ }
+ return FALSE;
+ }
+- #endif
+
+ /*
+ * <Insert> key in Insert mode: toggle insert/replace mode.
+--- 8566,8571 ----
+*** ../vim-7.4.211/src/eval.c 2014-02-24 03:31:55.816738026 +0100
+--- src/eval.c 2014-03-23 13:03:56.419146143 +0100
+***************
+*** 11833,11844 ****
+ {
+ case MLINE: buf[0] = 'V'; break;
+ case MCHAR: buf[0] = 'v'; break;
+- #ifdef FEAT_VISUAL
+ case MBLOCK:
+ buf[0] = Ctrl_V;
+ sprintf((char *)buf + 1, "%ld", reglen + 1);
+ break;
+- #endif
+ }
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = vim_strsave(buf);
+--- 11833,11842 ----
+***************
+*** 12552,12560 ****
+ #ifdef FEAT_VIRTUALEDIT
+ "virtualedit",
+ #endif
+- #ifdef FEAT_VISUAL
+ "visual",
+- #endif
+ #ifdef FEAT_VISUALEXTRA
+ "visualextra",
+ #endif
+--- 12550,12556 ----
+***************
+*** 14397,14403 ****
+ buf[1] = NUL;
+ buf[2] = NUL;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (VIsual_select)
+--- 14393,14398 ----
+***************
+*** 14405,14413 ****
+ else
+ buf[0] = VIsual_mode;
+ }
+! else
+! #endif
+! if (State == HITRETURN || State == ASKMORE || State == SETWSIZE
+ || State == CONFIRM)
+ {
+ buf[0] = 'r';
+--- 14400,14406 ----
+ else
+ buf[0] = VIsual_mode;
+ }
+! else if (State == HITRETURN || State == ASKMORE || State == SETWSIZE
+ || State == CONFIRM)
+ {
+ buf[0] = 'r';
+***************
+*** 16756,16762 ****
+ case 'V': case 'l': /* line-wise selection */
+ yank_type = MLINE;
+ break;
+- #ifdef FEAT_VISUAL
+ case 'b': case Ctrl_V: /* block-wise selection */
+ yank_type = MBLOCK;
+ if (VIM_ISDIGIT(stropt[1]))
+--- 16749,16754 ----
+***************
+*** 16766,16772 ****
+ --stropt;
+ }
+ break;
+- #endif
+ }
+ }
+
+--- 16758,16763 ----
+***************
+*** 18769,18775 ****
+ typval_T *argvars UNUSED;
+ typval_T *rettv UNUSED;
+ {
+- #ifdef FEAT_VISUAL
+ char_u str[2];
+
+ rettv->v_type = VAR_STRING;
+--- 18760,18765 ----
+***************
+*** 18780,18786 ****
+ /* A non-zero number or non-empty string argument: reset mode. */
+ if (non_zero_arg(&argvars[0]))
+ curbuf->b_visual_mode_eval = NUL;
+- #endif
+ }
+
+ /*
+--- 18770,18775 ----
+***************
+*** 19154,19167 ****
+ return NULL;
+ if (name[0] == '.') /* cursor */
+ return &curwin->w_cursor;
+- #ifdef FEAT_VISUAL
+ if (name[0] == 'v' && name[1] == NUL) /* Visual start */
+ {
+ if (VIsual_active)
+ return &VIsual;
+ return &curwin->w_cursor;
+ }
+- #endif
+ if (name[0] == '\'') /* mark */
+ {
+ pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
+--- 19143,19154 ----
+*** ../vim-7.4.211/src/ex_cmds.c 2014-03-19 17:41:20.390105580 +0100
+--- src/ex_cmds.c 2014-03-23 13:04:09.359146341 +0100
+***************
+*** 3274,3286 ****
+ goto theend;
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * End Visual mode before switching to another buffer, so the text can be
+ * copied into the GUI selection buffer.
+ */
+ reset_VIsual();
+- #endif
+
+ #ifdef FEAT_AUTOCMD
+ if ((command != NULL || newlnum > (linenr_T)0)
+--- 3274,3284 ----
+*** ../vim-7.4.211/src/ex_docmd.c 2014-03-12 21:28:09.481046816 +0100
+--- src/ex_docmd.c 2014-03-23 13:04:47.975146933 +0100
+***************
+*** 8577,8586 ****
+ beginline(BL_SOL | BL_FIX);
+ }
+
+- #if defined(FEAT_VISUAL)
+ if (VIsual_active)
+ end_visual_mode();
+- #endif
+
+ switch (eap->cmdidx)
+ {
+--- 8577,8584 ----
+***************
+*** 8991,9001 ****
+ RedrawingDisabled = 0;
+ p_lz = FALSE;
+ update_topline();
+! update_screen(eap->forceit ? CLEAR :
+! #ifdef FEAT_VISUAL
+! VIsual_active ? INVERTED :
+! #endif
+! 0);
+ #ifdef FEAT_TITLE
+ if (need_maketitle)
+ maketitle();
+--- 8989,8995 ----
+ RedrawingDisabled = 0;
+ p_lz = FALSE;
+ update_topline();
+! update_screen(eap->forceit ? CLEAR : VIsual_active ? INVERTED : 0);
+ #ifdef FEAT_TITLE
+ if (need_maketitle)
+ maketitle();
+***************
+*** 9030,9040 ****
+ status_redraw_all();
+ else
+ status_redraw_curbuf();
+! update_screen(
+! # ifdef FEAT_VISUAL
+! VIsual_active ? INVERTED :
+! # endif
+! 0);
+ RedrawingDisabled = r;
+ p_lz = p;
+ out_flush();
+--- 9024,9030 ----
+ status_redraw_all();
+ else
+ status_redraw_curbuf();
+! update_screen(VIsual_active ? INVERTED : 0);
+ RedrawingDisabled = r;
+ p_lz = p;
+ out_flush();
+*** ../vim-7.4.211/src/fold.c 2013-11-05 07:12:59.000000000 +0100
+--- src/fold.c 2014-03-23 13:05:14.775147344 +0100
+***************
+*** 430,440 ****
+ }
+ if (done == DONE_NOTHING)
+ EMSG(_(e_nofold));
+- #ifdef FEAT_VISUAL
+ /* Force a redraw to remove the Visual highlighting. */
+ if (had_visual)
+ redraw_curbuf_later(INVERTED);
+- #endif
+ }
+
+ /* openFold() {{{2 */
+--- 430,438 ----
+***************
+*** 807,817 ****
+ if (!did_one)
+ {
+ EMSG(_(e_nofold));
+- #ifdef FEAT_VISUAL
+ /* Force a redraw to remove the Visual highlighting. */
+ if (had_visual)
+ redraw_curbuf_later(INVERTED);
+- #endif
+ }
+ else
+ /* Deleting markers may make cursor column invalid. */
+--- 805,813 ----
+***************
+*** 1065,1071 ****
+ }
+
+ /* foldAdjustVisual() {{{2 */
+- #ifdef FEAT_VISUAL
+ /*
+ * Adjust the Visual area to include any fold at the start or end completely.
+ */
+--- 1061,1066 ----
+***************
+*** 1103,1109 ****
+ #endif
+ }
+ }
+- #endif
+
+ /* cursor_foldstart() {{{2 */
+ /*
+--- 1098,1103 ----
+*** ../vim-7.4.211/src/getchar.c 2014-03-12 20:17:47.748982126 +0100
+--- src/getchar.c 2014-03-23 13:05:45.383147813 +0100
+***************
+*** 870,876 ****
+ c = read_redo(FALSE, old_redo);
+ }
+
+- #ifdef FEAT_VISUAL
+ if (c == 'v') /* redo Visual */
+ {
+ VIsual = curwin->w_cursor;
+--- 870,875 ----
+***************
+*** 880,886 ****
+ redo_VIsual_busy = TRUE;
+ c = read_redo(FALSE, old_redo);
+ }
+- #endif
+
+ /* try to enter the count (in place of a previous count) */
+ if (count)
+--- 879,884 ----
+***************
+*** 1162,1168 ****
+ return typebuf.tb_maplen == 0;
+ }
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+ /*
+ * Return the number of characters that are mapped (or not typed).
+ */
+--- 1160,1165 ----
+***************
+*** 1171,1177 ****
+ {
+ return typebuf.tb_maplen;
+ }
+- #endif
+
+ /*
+ * remove "len" characters from typebuf.tb_buf[typebuf.tb_off + offset]
+--- 1168,1173 ----
+***************
+*** 2443,2449 ****
+ idx = get_menu_index(current_menu, local_State);
+ if (idx != MENU_INDEX_INVALID)
+ {
+- # ifdef FEAT_VISUAL
+ /*
+ * In Select mode and a Visual mode menu
+ * is used: Switch to Visual mode
+--- 2439,2444 ----
+***************
+*** 2457,2463 ****
+ (void)ins_typebuf(K_SELECT_STRING,
+ REMAP_NONE, 0, TRUE, FALSE);
+ }
+- # endif
+ ins_typebuf(current_menu->strings[idx],
+ current_menu->noremap[idx],
+ 0, TRUE,
+--- 2452,2457 ----
+***************
+*** 2516,2522 ****
+ break;
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * In Select mode and a Visual mode mapping is used:
+ * Switch to Visual mode temporarily. Append K_SELECT
+--- 2510,2515 ----
+***************
+*** 2529,2535 ****
+ (void)ins_typebuf(K_SELECT_STRING, REMAP_NONE,
+ 0, TRUE, FALSE);
+ }
+- #endif
+
+ #ifdef FEAT_EVAL
+ /* Copy the values from *mp that are used, because
+--- 2522,2527 ----
+*** ../vim-7.4.211/src/gui.c 2013-06-30 17:41:48.000000000 +0200
+--- src/gui.c 2014-03-23 13:05:57.623148000 +0100
+***************
+*** 3132,3142 ****
+ */
+ if (!mouse_has(checkfor) || checkfor == MOUSE_COMMAND)
+ {
+- #ifdef FEAT_VISUAL
+ /* Don't do modeless selection in Visual mode. */
+ if (checkfor != MOUSE_NONEF && VIsual_active && (State & NORMAL))
+ return;
+- #endif
+
+ /*
+ * When 'mousemodel' is "popup", shift-left is translated to right.
+--- 3132,3140 ----
+*** ../vim-7.4.211/src/gui_mac.c 2013-05-06 04:06:04.000000000 +0200
+--- src/gui_mac.c 2014-03-23 13:06:30.143148498 +0100
+***************
+*** 1068,1078 ****
+ }
+ */
+
+-
+- #ifdef FEAT_VISUAL
+ reset_VIsual();
+- #endif
+-
+ fnames = new_fnames_from_AEDesc(&theList, &numFiles, &error);
+
+ if (error)
+--- 1068,1074 ----
+***************
+*** 1142,1148 ****
+
+ /* Update the screen display */
+ update_screen(NOT_VALID);
+! #ifdef FEAT_VISUAL
+ /* Select the text if possible */
+ if (gotPosition)
+ {
+--- 1138,1144 ----
+
+ /* Update the screen display */
+ update_screen(NOT_VALID);
+!
+ /* Select the text if possible */
+ if (gotPosition)
+ {
+***************
+*** 1160,1166 ****
+ VIsual.col = 0;
+ }
+ }
+! #endif
+ setcursor();
+ out_flush();
+
+--- 1156,1162 ----
+ VIsual.col = 0;
+ }
+ }
+!
+ setcursor();
+ out_flush();
+
+*** ../vim-7.4.211/src/gui_w48.c 2014-03-19 12:37:18.537826062 +0100
+--- src/gui_w48.c 2014-03-23 13:06:44.959148725 +0100
+***************
+*** 3708,3716 ****
+ DragQueryPoint(hDrop, &pt);
+ MapWindowPoints(s_hwnd, s_textArea, &pt, 1);
+
+- # ifdef FEAT_VISUAL
+ reset_VIsual();
+- # endif
+
+ fnames = (char_u **)alloc(cFiles * sizeof(char_u *));
+
+--- 3708,3714 ----
+*** ../vim-7.4.211/src/main.c 2014-01-14 12:57:00.000000000 +0100
+--- src/main.c 2014-03-23 13:07:21.771149289 +0100
+***************
+*** 1057,1065 ****
+ if (!cmdwin && !noexmode && SETJMP(x_jump_env))
+ {
+ State = NORMAL;
+- # ifdef FEAT_VISUAL
+ VIsual_active = FALSE;
+- # endif
+ got_int = TRUE;
+ need_wait_return = FALSE;
+ global_busy = FALSE;
+--- 1057,1063 ----
+***************
+*** 1096,1106 ****
+ check_timestamps(FALSE);
+ if (need_wait_return) /* if wait_return still needed ... */
+ wait_return(FALSE); /* ... call it now */
+! if (need_start_insertmode && goto_im()
+! #ifdef FEAT_VISUAL
+! && !VIsual_active
+! #endif
+! )
+ {
+ need_start_insertmode = FALSE;
+ stuffReadbuff((char_u *)"i"); /* start insert mode next */
+--- 1094,1100 ----
+ check_timestamps(FALSE);
+ if (need_wait_return) /* if wait_return still needed ... */
+ wait_return(FALSE); /* ... call it now */
+! if (need_start_insertmode && goto_im() && !VIsual_active)
+ {
+ need_start_insertmode = FALSE;
+ stuffReadbuff((char_u *)"i"); /* start insert mode next */
+***************
+*** 1202,1208 ****
+ diff_need_scrollbind = FALSE;
+ }
+ #endif
+! #if defined(FEAT_FOLDING) && defined(FEAT_VISUAL)
+ /* Include a closed fold completely in the Visual area. */
+ foldAdjustVisual();
+ #endif
+--- 1196,1202 ----
+ diff_need_scrollbind = FALSE;
+ }
+ #endif
+! #if defined(FEAT_FOLDING)
+ /* Include a closed fold completely in the Visual area. */
+ foldAdjustVisual();
+ #endif
+***************
+*** 1228,1239 ****
+ update_topline();
+ validate_cursor();
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ update_curbuf(INVERTED);/* update inverted part */
+! else
+! #endif
+! if (must_redraw)
+ update_screen(0);
+ else if (redraw_cmdline || clear_cmdline)
+ showmode();
+--- 1222,1230 ----
+ update_topline();
+ validate_cursor();
+
+ if (VIsual_active)
+ update_curbuf(INVERTED);/* update inverted part */
+! else if (must_redraw)
+ update_screen(0);
+ else if (redraw_cmdline || clear_cmdline)
+ showmode();
+*** ../vim-7.4.211/src/mark.c 2013-11-03 00:20:46.000000000 +0100
+--- src/mark.c 2014-03-23 13:08:03.011149921 +0100
+***************
+*** 98,104 ****
+ return OK;
+ }
+
+- #ifdef FEAT_VISUAL
+ if (c == '<' || c == '>')
+ {
+ if (c == '<')
+--- 98,103 ----
+***************
+*** 110,116 ****
+ curbuf->b_visual.vi_mode = 'v';
+ return OK;
+ }
+- #endif
+
+ #ifndef EBCDIC
+ if (c > 'z') /* some islower() and isupper() cannot handle
+--- 109,114 ----
+***************
+*** 340,348 ****
+ int *fnum;
+ {
+ pos_T *posp;
+- #ifdef FEAT_VISUAL
+ pos_T *startp, *endp;
+- #endif
+ static pos_T pos_copy;
+
+ posp = NULL;
+--- 338,344 ----
+***************
+*** 403,409 ****
+ curwin->w_cursor = pos;
+ listcmd_busy = slcb;
+ }
+- #ifdef FEAT_VISUAL
+ else if (c == '<' || c == '>') /* start/end of visual area */
+ {
+ startp = &buf->b_visual.vi_start;
+--- 399,404 ----
+***************
+*** 428,434 ****
+ #endif
+ }
+ }
+- #endif
+ else if (ASCII_ISLOWER(c)) /* normal named mark */
+ {
+ posp = &(buf->b_namedm[c - 'a']);
+--- 423,428 ----
+***************
+*** 757,766 ****
+ show_one_mark(']', arg, &curbuf->b_op_end, NULL, TRUE);
+ show_one_mark('^', arg, &curbuf->b_last_insert, NULL, TRUE);
+ show_one_mark('.', arg, &curbuf->b_last_change, NULL, TRUE);
+- #ifdef FEAT_VISUAL
+ show_one_mark('<', arg, &curbuf->b_visual.vi_start, NULL, TRUE);
+ show_one_mark('>', arg, &curbuf->b_visual.vi_end, NULL, TRUE);
+- #endif
+ show_one_mark(-1, arg, NULL, NULL, FALSE);
+ }
+
+--- 751,758 ----
+***************
+*** 892,901 ****
+ case '.': curbuf->b_last_change.lnum = 0; break;
+ case '[': curbuf->b_op_start.lnum = 0; break;
+ case ']': curbuf->b_op_end.lnum = 0; break;
+- #ifdef FEAT_VISUAL
+ case '<': curbuf->b_visual.vi_start.lnum = 0; break;
+ case '>': curbuf->b_visual.vi_end.lnum = 0; break;
+- #endif
+ case ' ': break;
+ default: EMSG2(_(e_invarg2), p);
+ return;
+--- 884,891 ----
+***************
+*** 1085,1095 ****
+ one_adjust_nodel(&(curbuf->b_changelist[i].lnum));
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /* Visual area */
+ one_adjust_nodel(&(curbuf->b_visual.vi_start.lnum));
+ one_adjust_nodel(&(curbuf->b_visual.vi_end.lnum));
+- #endif
+
+ #ifdef FEAT_QUICKFIX
+ /* quickfix marks */
+--- 1075,1083 ----
+***************
+*** 1136,1149 ****
+ if (win->w_tagstack[i].fmark.fnum == fnum)
+ one_adjust_nodel(&(win->w_tagstack[i].fmark.mark.lnum));
+
+- #ifdef FEAT_VISUAL
+ /* the displayed Visual area */
+ if (win->w_old_cursor_lnum != 0)
+ {
+ one_adjust_nodel(&(win->w_old_cursor_lnum));
+ one_adjust_nodel(&(win->w_old_visual_lnum));
+ }
+- #endif
+
+ /* topline and cursor position for windows with the same buffer
+ * other than the current window */
+--- 1124,1135 ----
+***************
+*** 1260,1270 ****
+ col_adjust(&(curbuf->b_changelist[i]));
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /* Visual area */
+ col_adjust(&(curbuf->b_visual.vi_start));
+ col_adjust(&(curbuf->b_visual.vi_end));
+- #endif
+
+ /* previous context mark */
+ col_adjust(&(curwin->w_pcmark));
+--- 1246,1254 ----
+*** ../vim-7.4.211/src/menu.c 2011-04-11 15:17:21.000000000 +0200
+--- src/menu.c 2014-03-23 13:08:19.091150168 +0100
+***************
+*** 1640,1646 ****
+ idx = MENU_INDEX_INSERT;
+ else if (state & CMDLINE)
+ idx = MENU_INDEX_CMDLINE;
+- #ifdef FEAT_VISUAL
+ else if (VIsual_active)
+ {
+ if (VIsual_select)
+--- 1640,1645 ----
+***************
+*** 1648,1654 ****
+ else
+ idx = MENU_INDEX_VISUAL;
+ }
+- #endif
+ else if (state == HITRETURN || state == ASKMORE)
+ idx = MENU_INDEX_CMDLINE;
+ else if (finish_op)
+--- 1647,1652 ----
+***************
+*** 1811,1824 ****
+ static int
+ get_menu_mode()
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (VIsual_select)
+ return MENU_INDEX_SELECT;
+ return MENU_INDEX_VISUAL;
+ }
+- #endif
+ if (State & INSERT)
+ return MENU_INDEX_INSERT;
+ if ((State & CMDLINE) || State == ASKMORE || State == HITRETURN)
+--- 1809,1820 ----
+*** ../vim-7.4.211/src/misc2.c 2014-02-23 23:38:58.824760280 +0100
+--- src/misc2.c 2014-03-23 13:08:56.927150748 +0100
+***************
+*** 31,39 ****
+ if (virtual_op != MAYBE)
+ return virtual_op;
+ return (ve_flags == VE_ALL
+- # ifdef FEAT_VISUAL
+ || ((ve_flags & VE_BLOCK) && VIsual_active && VIsual_mode == Ctrl_V)
+- # endif
+ || ((ve_flags & VE_INSERT) && (State & INSERT)));
+ }
+
+--- 31,37 ----
+***************
+*** 149,157 ****
+
+ one_more = (State & INSERT)
+ || restart_edit != NUL
+- #ifdef FEAT_VISUAL
+ || (VIsual_active && *p_sel != 'o')
+- #endif
+ #ifdef FEAT_VIRTUALEDIT
+ || ((ve_flags & VE_ONEMORE) && wcol < MAXCOL)
+ #endif
+--- 147,153 ----
+***************
+*** 570,578 ****
+ * - in Visual mode and 'selection' isn't "old"
+ * - 'virtualedit' is set */
+ if ((State & INSERT) || restart_edit
+- #ifdef FEAT_VISUAL
+ || (VIsual_active && *p_sel != 'o')
+- #endif
+ #ifdef FEAT_VIRTUALEDIT
+ || (ve_flags & VE_ONEMORE)
+ #endif
+--- 566,572 ----
+***************
+*** 627,635 ****
+ adjust_cursor_col()
+ {
+ if (curwin->w_cursor.col > 0
+- # ifdef FEAT_VISUAL
+ && (!VIsual_active || *p_sel == 'o')
+- # endif
+ && gchar_cursor() == NUL)
+ --curwin->w_cursor.col;
+ }
+--- 621,627 ----
+***************
+*** 3290,3306 ****
+ {
+ if (State & NORMAL)
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (VIsual_select)
+ return SELECTMODE;
+ return VISUAL;
+ }
+! else
+! #endif
+! if (finish_op)
+! return OP_PENDING;
+ }
+ return State;
+ }
+--- 3282,3295 ----
+ {
+ if (State & NORMAL)
+ {
+ if (VIsual_active)
+ {
+ if (VIsual_select)
+ return SELECTMODE;
+ return VISUAL;
+ }
+! else if (finish_op)
+! return OP_PENDING;
+ }
+ return State;
+ }
+***************
+*** 3738,3744 ****
+ }
+ if (finish_op)
+ return SHAPE_IDX_O;
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (*p_sel == 'e')
+--- 3727,3732 ----
+***************
+*** 3746,3752 ****
+ else
+ return SHAPE_IDX_V;
+ }
+- #endif
+ return SHAPE_IDX_N;
+ }
+ #endif
+--- 3734,3739 ----
+*** ../vim-7.4.211/src/move.c 2014-02-11 18:58:05.102320947 +0100
+--- src/move.c 2014-03-23 13:09:16.535151048 +0100
+***************
+*** 2857,2873 ****
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+ int restart_edit_save;
+- # ifdef FEAT_VISUAL
+ int old_VIsual_select = VIsual_select;
+ int old_VIsual_active = VIsual_active;
+- # endif
+
+ /*
+ * loop through the cursorbound windows
+ */
+- # ifdef FEAT_VISUAL
+ VIsual_select = VIsual_active = 0;
+- # endif
+ for (curwin = firstwin; curwin; curwin = curwin->w_next)
+ {
+ curbuf = curwin->w_buffer;
+--- 2857,2869 ----
+***************
+*** 2916,2925 ****
+ /*
+ * reset current-window
+ */
+- # ifdef FEAT_VISUAL
+ VIsual_select = old_VIsual_select;
+ VIsual_active = old_VIsual_active;
+- # endif
+ curwin = old_curwin;
+ curbuf = old_curbuf;
+ }
+--- 2912,2919 ----
+*** ../vim-7.4.211/src/netbeans.c 2012-06-20 19:56:18.000000000 +0200
+--- src/netbeans.c 2014-03-23 13:09:29.163151241 +0100
+***************
+*** 2232,2242 ****
+
+ nb_set_curbuf(buf->bufp);
+
+- #ifdef FEAT_VISUAL
+ /* Don't want Visual mode now. */
+ if (VIsual_active)
+ end_visual_mode();
+- #endif
+ #ifdef NBDEBUG
+ s = args;
+ #endif
+--- 2232,2240 ----
+*** ../vim-7.4.211/src/normal.c 2014-03-12 17:41:59.128838878 +0100
+--- src/normal.c 2014-03-23 15:07:40.435259900 +0100
+***************
+*** 14,20 ****
+
+ #include "vim.h"
+
+- #ifdef FEAT_VISUAL
+ /*
+ * The Visual area is remembered for reselection.
+ */
+--- 14,19 ----
+***************
+*** 24,30 ****
+ static int VIsual_mode_orig = NUL; /* saved Visual mode */
+
+ static int restart_VIsual_select = 0;
+- #endif
+
+ #ifdef FEAT_EVAL
+ static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+--- 23,28 ----
+***************
+*** 37,43 ****
+ static int find_command __ARGS((int cmdchar));
+ static void op_colon __ARGS((oparg_T *oap));
+ static void op_function __ARGS((oparg_T *oap));
+! #if defined(FEAT_MOUSE) && defined(FEAT_VISUAL)
+ static void find_start_of_word __ARGS((pos_T *));
+ static void find_end_of_word __ARGS((pos_T *));
+ static int get_mouse_class __ARGS((char_u *p));
+--- 35,41 ----
+ static int find_command __ARGS((int cmdchar));
+ static void op_colon __ARGS((oparg_T *oap));
+ static void op_function __ARGS((oparg_T *oap));
+! #if defined(FEAT_MOUSE)
+ static void find_start_of_word __ARGS((pos_T *));
+ static void find_end_of_word __ARGS((pos_T *));
+ static int get_mouse_class __ARGS((char_u *p));
+***************
+*** 48,56 ****
+ static int checkclearopq __ARGS((oparg_T *oap));
+ static void clearop __ARGS((oparg_T *oap));
+ static void clearopbeep __ARGS((oparg_T *oap));
+- #ifdef FEAT_VISUAL
+ static void unshift_special __ARGS((cmdarg_T *cap));
+- #endif
+ #ifdef FEAT_CMDL_INFO
+ static void del_from_showcmd __ARGS((int));
+ #endif
+--- 46,52 ----
+***************
+*** 117,141 ****
+ #ifdef FEAT_VREPLACE
+ static void nv_vreplace __ARGS((cmdarg_T *cap));
+ #endif
+- #ifdef FEAT_VISUAL
+ static void v_swap_corners __ARGS((int cmdchar));
+- #endif
+ static void nv_replace __ARGS((cmdarg_T *cap));
+ static void n_swapchar __ARGS((cmdarg_T *cap));
+ static void nv_cursormark __ARGS((cmdarg_T *cap, int flag, pos_T *pos));
+- #ifdef FEAT_VISUAL
+ static void v_visop __ARGS((cmdarg_T *cap));
+- #endif
+ static void nv_subst __ARGS((cmdarg_T *cap));
+ static void nv_abbrev __ARGS((cmdarg_T *cap));
+ static void nv_optrans __ARGS((cmdarg_T *cap));
+ static void nv_gomark __ARGS((cmdarg_T *cap));
+ static void nv_pcmark __ARGS((cmdarg_T *cap));
+ static void nv_regname __ARGS((cmdarg_T *cap));
+- #ifdef FEAT_VISUAL
+ static void nv_visual __ARGS((cmdarg_T *cap));
+ static void n_start_visual_mode __ARGS((int c));
+- #endif
+ static void nv_window __ARGS((cmdarg_T *cap));
+ static void nv_suspend __ARGS((cmdarg_T *cap));
+ static void nv_g_cmd __ARGS((cmdarg_T *cap));
+--- 113,131 ----
+***************
+*** 155,165 ****
+ static void nv_wordcmd __ARGS((cmdarg_T *cap));
+ static void nv_beginline __ARGS((cmdarg_T *cap));
+ static void adjust_cursor __ARGS((oparg_T *oap));
+- #ifdef FEAT_VISUAL
+ static void adjust_for_sel __ARGS((cmdarg_T *cap));
+ static int unadjust_for_sel __ARGS((void));
+ static void nv_select __ARGS((cmdarg_T *cap));
+- #endif
+ static void nv_goto __ARGS((cmdarg_T *cap));
+ static void nv_normal __ARGS((cmdarg_T *cap));
+ static void nv_esc __ARGS((cmdarg_T *oap));
+--- 145,153 ----
+***************
+*** 248,271 ****
+ {Ctrl_N, nv_down, NV_STS, FALSE},
+ {Ctrl_O, nv_ctrlo, 0, 0},
+ {Ctrl_P, nv_up, NV_STS, FALSE},
+- #ifdef FEAT_VISUAL
+ {Ctrl_Q, nv_visual, 0, FALSE},
+- #else
+- {Ctrl_Q, nv_ignore, 0, 0},
+- #endif
+ {Ctrl_R, nv_redo, 0, 0},
+ {Ctrl_S, nv_ignore, 0, 0},
+ {Ctrl_T, nv_tagpop, NV_NCW, 0},
+ {Ctrl_U, nv_halfpage, 0, 0},
+- #ifdef FEAT_VISUAL
+ {Ctrl_V, nv_visual, 0, FALSE},
+ {'V', nv_visual, 0, FALSE},
+ {'v', nv_visual, 0, FALSE},
+- #else
+- {Ctrl_V, nv_error, 0, 0},
+- {'V', nv_error, 0, 0},
+- {'v', nv_error, 0, 0},
+- #endif
+ {Ctrl_W, nv_window, 0, 0},
+ {Ctrl_X, nv_addsub, 0, 0},
+ {Ctrl_Y, nv_scroll_line, 0, FALSE},
+--- 236,249 ----
+***************
+*** 427,435 ****
+ {K_HELP, nv_help, NV_NCW, 0},
+ {K_F1, nv_help, NV_NCW, 0},
+ {K_XF1, nv_help, NV_NCW, 0},
+- #ifdef FEAT_VISUAL
+ {K_SELECT, nv_select, 0, 0},
+- #endif
+ #ifdef FEAT_GUI
+ {K_VER_SCROLLBAR, nv_ver_scrollbar, 0, 0},
+ {K_HOR_SCROLLBAR, nv_hor_scrollbar, 0, 0},
+--- 405,411 ----
+***************
+*** 579,589 ****
+ #ifdef FEAT_CMDL_INFO
+ int need_flushbuf; /* need to call out_flush() */
+ #endif
+- #ifdef FEAT_VISUAL
+ pos_T old_pos; /* cursor position before command */
+ int mapped_len;
+ static int old_mapped_len = 0;
+- #endif
+ int idx;
+ #ifdef FEAT_EVAL
+ int set_prevcount = FALSE;
+--- 555,563 ----
+***************
+*** 643,651 ****
+ }
+ #endif
+
+- #ifdef FEAT_VISUAL
+ mapped_len = typebuf_maplen();
+- #endif
+
+ State = NORMAL_BUSY;
+ #ifdef USE_ON_FLY_SCROLL
+--- 617,623 ----
+***************
+*** 666,672 ****
+ c = safe_vgetc();
+ LANGMAP_ADJUST(c, TRUE);
+
+- #ifdef FEAT_VISUAL
+ /*
+ * If a mapping was started in Visual or Select mode, remember the length
+ * of the mapping. This is used below to not return to Insert mode for as
+--- 638,643 ----
+***************
+*** 677,688 ****
+ else if (old_mapped_len
+ || (VIsual_active && mapped_len == 0 && typebuf_maplen() > 0))
+ old_mapped_len = typebuf_maplen();
+- #endif
+
+ if (c == NUL)
+ c = K_ZERO;
+
+- #ifdef FEAT_VISUAL
+ /*
+ * In Select mode, typed text replaces the selection.
+ */
+--- 648,657 ----
+***************
+*** 703,718 ****
+ msg_nowait = TRUE; /* don't delay going to insert mode */
+ old_mapped_len = 0; /* do go to Insert mode */
+ }
+- #endif
+
+ #ifdef FEAT_CMDL_INFO
+ need_flushbuf = add_to_showcmd(c);
+ #endif
+
+ getcount:
+- #ifdef FEAT_VISUAL
+ if (!(VIsual_active && VIsual_select))
+- #endif
+ {
+ /*
+ * Handle a count before a command and compute ca.count0.
+--- 672,684 ----
+***************
+*** 856,862 ****
+ goto normal_end;
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /*
+ * In Visual/Select mode, a few keys are handled in a special way.
+ */
+--- 822,827 ----
+***************
+*** 892,898 ****
+ }
+ }
+ }
+- #endif
+
+ #ifdef FEAT_RIGHTLEFT
+ if (curwin->w_p_rl && KeyTyped && !KeyStuffed
+--- 857,862 ----
+***************
+*** 930,940 ****
+ && !Recording
+ && !Exec_reg)
+ || ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
+! && (oap->op_type != OP_NOP
+! #ifdef FEAT_VISUAL
+! || VIsual_active
+! #endif
+! ))))
+ {
+ int *cp;
+ int repl = FALSE; /* get character for replace mode */
+--- 894,900 ----
+ && !Recording
+ && !Exec_reg)
+ || ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
+! && (oap->op_type != OP_NOP || VIsual_active))))
+ {
+ int *cp;
+ int repl = FALSE; /* get character for replace mode */
+***************
+*** 1168,1174 ****
+ msg_col = 0;
+ }
+
+- #ifdef FEAT_VISUAL
+ old_pos = curwin->w_cursor; /* remember where cursor was */
+
+ /* When 'keymodel' contains "startsel" some keys start Select/Visual
+--- 1128,1133 ----
+***************
+*** 1188,1194 ****
+ mod_mask &= ~MOD_MASK_SHIFT;
+ }
+ }
+- #endif
+
+ /*
+ * Execute the command!
+--- 1147,1152 ----
+***************
+*** 1220,1231 ****
+ #endif
+ }
+
+- #ifdef FEAT_VISUAL
+ /* Get the length of mapped chars again after typing a count, second
+ * character or "z333<cr>". */
+ if (old_mapped_len > 0)
+ old_mapped_len = typebuf_maplen();
+- #endif
+
+ /*
+ * If an operation is pending, handle it...
+--- 1178,1187 ----
+***************
+*** 1247,1257 ****
+ if ( ((p_smd
+ && msg_silent == 0
+ && (restart_edit != 0
+- #ifdef FEAT_VISUAL
+ || (VIsual_active
+ && old_pos.lnum == curwin->w_cursor.lnum
+ && old_pos.col == curwin->w_cursor.col)
+- #endif
+ )
+ && (clear_cmdline
+ || redraw_cmdline)
+--- 1203,1211 ----
+***************
+*** 1259,1267 ****
+ && !msg_nowait
+ && KeyTyped)
+ || (restart_edit != 0
+- #ifdef FEAT_VISUAL
+ && !VIsual_active
+- #endif
+ && (msg_scroll
+ || emsg_on_display)))
+ && oap->regname == 0
+--- 1213,1219 ----
+***************
+*** 1368,1403 ****
+ * May switch from Visual to Select mode after CTRL-O command.
+ */
+ if ( oap->op_type == OP_NOP
+- #ifdef FEAT_VISUAL
+ && ((restart_edit != 0 && !VIsual_active && old_mapped_len == 0)
+ || restart_VIsual_select == 1)
+- #else
+- && restart_edit != 0
+- #endif
+ && !(ca.retval & CA_COMMAND_BUSY)
+ && stuff_empty()
+ && oap->regname == 0)
+ {
+- #ifdef FEAT_VISUAL
+ if (restart_VIsual_select == 1)
+ {
+ VIsual_select = TRUE;
+ showmode();
+ restart_VIsual_select = 0;
+ }
+! #endif
+! if (restart_edit != 0
+! #ifdef FEAT_VISUAL
+! && !VIsual_active && old_mapped_len == 0
+! #endif
+! )
+ (void)edit(restart_edit, FALSE, 1L);
+ }
+
+- #ifdef FEAT_VISUAL
+ if (restart_VIsual_select == 2)
+ restart_VIsual_select = 1;
+- #endif
+
+ /* Save count before an operator for next time. */
+ opcount = ca.opcount;
+--- 1320,1343 ----
+ * May switch from Visual to Select mode after CTRL-O command.
+ */
+ if ( oap->op_type == OP_NOP
+ && ((restart_edit != 0 && !VIsual_active && old_mapped_len == 0)
+ || restart_VIsual_select == 1)
+ && !(ca.retval & CA_COMMAND_BUSY)
+ && stuff_empty()
+ && oap->regname == 0)
+ {
+ if (restart_VIsual_select == 1)
+ {
+ VIsual_select = TRUE;
+ showmode();
+ restart_VIsual_select = 0;
+ }
+! if (restart_edit != 0 && !VIsual_active && old_mapped_len == 0)
+ (void)edit(restart_edit, FALSE, 1L);
+ }
+
+ if (restart_VIsual_select == 2)
+ restart_VIsual_select = 1;
+
+ /* Save count before an operator for next time. */
+ opcount = ca.opcount;
+***************
+*** 1437,1451 ****
+ int empty_region_error;
+ int restart_edit_save;
+
+- #ifdef FEAT_VISUAL
+ /* The visual area is remembered for redo */
+ static int redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T redo_VIsual_line_count; /* number of lines */
+ static colnr_T redo_VIsual_vcol; /* number of cols or end column */
+ static long redo_VIsual_count; /* count for Visual operator */
+! # ifdef FEAT_VIRTUALEDIT
+ int include_line_break = FALSE;
+- # endif
+ #endif
+
+ #if defined(FEAT_CLIPBOARD)
+--- 1377,1389 ----
+ int empty_region_error;
+ int restart_edit_save;
+
+ /* The visual area is remembered for redo */
+ static int redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+ static linenr_T redo_VIsual_line_count; /* number of lines */
+ static colnr_T redo_VIsual_vcol; /* number of cols or end column */
+ static long redo_VIsual_count; /* count for Visual operator */
+! #ifdef FEAT_VIRTUALEDIT
+ int include_line_break = FALSE;
+ #endif
+
+ #if defined(FEAT_CLIPBOARD)
+***************
+*** 1459,1468 ****
+ if ((clip_star.available || clip_plus.available)
+ && oap->op_type != OP_NOP
+ && !gui_yank
+- # ifdef FEAT_VISUAL
+ && VIsual_active
+ && !redo_VIsual_busy
+- # endif
+ && oap->regname == 0)
+ clip_auto_select();
+ #endif
+--- 1397,1404 ----
+***************
+*** 1471,1483 ****
+ /*
+ * If an operation is pending, handle it...
+ */
+! if ((finish_op
+! #ifdef FEAT_VISUAL
+! || VIsual_active
+! #endif
+! ) && oap->op_type != OP_NOP)
+ {
+- #ifdef FEAT_VISUAL
+ oap->is_VIsual = VIsual_active;
+ if (oap->motion_force == 'V')
+ oap->motion_type = MLINE;
+--- 1407,1414 ----
+ /*
+ * If an operation is pending, handle it...
+ */
+! if ((finish_op || VIsual_active) && oap->op_type != OP_NOP)
+ {
+ oap->is_VIsual = VIsual_active;
+ if (oap->motion_force == 'V')
+ oap->motion_type = MLINE;
+***************
+*** 1501,1517 ****
+ VIsual_select = FALSE;
+ VIsual_reselect = FALSE;
+ }
+- #endif
+
+ /* Only redo yank when 'y' flag is in 'cpoptions'. */
+ /* Never redo "zf" (define fold). */
+ if ((vim_strchr(p_cpo, CPO_YANK) != NULL || oap->op_type != OP_YANK)
+- #ifdef FEAT_VISUAL
+ && ((!VIsual_active || oap->motion_force)
+ /* Also redo Operator-pending Visual mode mappings */
+ || (VIsual_active && cap->cmdchar == ':'
+ && oap->op_type != OP_COLON))
+- #endif
+ && cap->cmdchar != 'D'
+ #ifdef FEAT_FOLDING
+ && oap->op_type != OP_FOLD
+--- 1432,1445 ----
+***************
+*** 1554,1560 ****
+ }
+ }
+
+- #ifdef FEAT_VISUAL
+ if (redo_VIsual_busy)
+ {
+ /* Redo of an operation on a Visual area. Use the same size from
+--- 1482,1487 ----
+***************
+*** 1639,1645 ****
+ if (VIsual_mode == 'V')
+ oap->start.col = 0;
+ }
+- #endif /* FEAT_VISUAL */
+
+ /*
+ * Set oap->start to the first position of the operated text, oap->end
+--- 1566,1571 ----
+***************
+*** 1690,1696 ****
+ virtual_op = virtual_active();
+ #endif
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active || redo_VIsual_busy)
+ {
+ if (VIsual_mode == Ctrl_V) /* block mode */
+--- 1616,1621 ----
+***************
+*** 1826,1834 ****
+ {
+ oap->motion_type = MCHAR;
+ if (VIsual_mode != Ctrl_V && *ml_get_pos(&(oap->end)) == NUL
+! # ifdef FEAT_VIRTUALEDIT
+ && (include_line_break || !virtual_op)
+! # endif
+ )
+ {
+ oap->inclusive = FALSE;
+--- 1751,1759 ----
+ {
+ oap->motion_type = MCHAR;
+ if (VIsual_mode != Ctrl_V && *ml_get_pos(&(oap->end)) == NUL
+! #ifdef FEAT_VIRTUALEDIT
+ && (include_line_break || !virtual_op)
+! #endif
+ )
+ {
+ oap->inclusive = FALSE;
+***************
+*** 1840,1848 ****
+ {
+ ++oap->end.lnum;
+ oap->end.col = 0;
+! # ifdef FEAT_VIRTUALEDIT
+ oap->end.coladd = 0;
+! # endif
+ ++oap->line_count;
+ }
+ else
+--- 1765,1773 ----
+ {
+ ++oap->end.lnum;
+ oap->end.col = 0;
+! #ifdef FEAT_VIRTUALEDIT
+ oap->end.coladd = 0;
+! #endif
+ ++oap->line_count;
+ }
+ else
+***************
+*** 1868,1877 ****
+ if (!gui_yank)
+ {
+ VIsual_active = FALSE;
+! # ifdef FEAT_MOUSE
+ setmouse();
+ mouse_dragging = 0;
+! # endif
+ if (mode_displayed)
+ clear_cmdline = TRUE; /* unshow visual mode later */
+ #ifdef FEAT_CMDL_INFO
+--- 1793,1802 ----
+ if (!gui_yank)
+ {
+ VIsual_active = FALSE;
+! #ifdef FEAT_MOUSE
+ setmouse();
+ mouse_dragging = 0;
+! #endif
+ if (mode_displayed)
+ clear_cmdline = TRUE; /* unshow visual mode later */
+ #ifdef FEAT_CMDL_INFO
+***************
+*** 1886,1892 ****
+ redraw_curbuf_later(INVERTED);
+ }
+ }
+- #endif
+
+ #ifdef FEAT_MBYTE
+ /* Include the trailing byte of a multi-byte char. */
+--- 1811,1816 ----
+***************
+*** 1921,1936 ****
+ empty_region_error = (oap->empty
+ && vim_strchr(p_cpo, CPO_EMPTYREGION) != NULL);
+
+- #ifdef FEAT_VISUAL
+ /* Force a redraw when operating on an empty Visual region, when
+ * 'modifiable is off or creating a fold. */
+ if (oap->is_VIsual && (oap->empty || !curbuf->b_p_ma
+! # ifdef FEAT_FOLDING
+ || oap->op_type == OP_FOLD
+! # endif
+ ))
+ redraw_curbuf_later(INVERTED);
+- #endif
+
+ /*
+ * If the end of an operator is in column one while oap->motion_type
+--- 1845,1858 ----
+ empty_region_error = (oap->empty
+ && vim_strchr(p_cpo, CPO_EMPTYREGION) != NULL);
+
+ /* Force a redraw when operating on an empty Visual region, when
+ * 'modifiable is off or creating a fold. */
+ if (oap->is_VIsual && (oap->empty || !curbuf->b_p_ma
+! #ifdef FEAT_FOLDING
+ || oap->op_type == OP_FOLD
+! #endif
+ ))
+ redraw_curbuf_later(INVERTED);
+
+ /*
+ * If the end of an operator is in column one while oap->motion_type
+***************
+*** 1943,1952 ****
+ && oap->inclusive == FALSE
+ && !(cap->retval & CA_NO_ADJ_OP_END)
+ && oap->end.col == 0
+- #ifdef FEAT_VISUAL
+ && (!oap->is_VIsual || *p_sel == 'o')
+ && !oap->block_mode
+- #endif
+ && oap->line_count > 1)
+ {
+ oap->end_adjusted = TRUE; /* remember that we did this */
+--- 1865,1872 ----
+***************
+*** 1971,1981 ****
+ {
+ case OP_LSHIFT:
+ case OP_RSHIFT:
+! op_shift(oap, TRUE,
+! #ifdef FEAT_VISUAL
+! oap->is_VIsual ? (int)cap->count1 :
+! #endif
+! 1);
+ auto_format(FALSE, TRUE);
+ break;
+
+--- 1891,1897 ----
+ {
+ case OP_LSHIFT:
+ case OP_RSHIFT:
+! op_shift(oap, TRUE, oap->is_VIsual ? (int)cap->count1 : 1);
+ auto_format(FALSE, TRUE);
+ break;
+
+***************
+*** 1988,2002 ****
+ beep_flush();
+ else
+ {
+! (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
+ auto_format(FALSE, TRUE);
+ }
+ break;
+
+ case OP_DELETE:
+- #ifdef FEAT_VISUAL
+ VIsual_reselect = FALSE; /* don't reselect now */
+- #endif
+ if (empty_region_error)
+ {
+ vim_beep();
+--- 1904,1917 ----
+ beep_flush();
+ else
+ {
+! (void)do_join(oap->line_count, oap->op_type == OP_JOIN,
+! TRUE, TRUE);
+ auto_format(FALSE, TRUE);
+ }
+ break;
+
+ case OP_DELETE:
+ VIsual_reselect = FALSE; /* don't reselect now */
+ if (empty_region_error)
+ {
+ vim_beep();
+***************
+*** 2026,2034 ****
+ break;
+
+ case OP_CHANGE:
+- #ifdef FEAT_VISUAL
+ VIsual_reselect = FALSE; /* don't reselect now */
+- #endif
+ if (empty_region_error)
+ {
+ vim_beep();
+--- 1941,1947 ----
+***************
+*** 2126,2134 ****
+
+ case OP_INSERT:
+ case OP_APPEND:
+- #ifdef FEAT_VISUAL
+ VIsual_reselect = FALSE; /* don't reselect now */
+- #endif
+ #ifdef FEAT_VISUALEXTRA
+ if (empty_region_error)
+ {
+--- 2039,2045 ----
+***************
+*** 2158,2166 ****
+ break;
+
+ case OP_REPLACE:
+- #ifdef FEAT_VISUAL
+ VIsual_reselect = FALSE; /* don't reselect now */
+- #endif
+ #ifdef FEAT_VISUALEXTRA
+ if (empty_region_error)
+ #endif
+--- 2069,2075 ----
+***************
+*** 2220,2228 ****
+ {
+ curwin->w_cursor = old_cursor;
+ }
+- #ifdef FEAT_VISUAL
+ oap->block_mode = FALSE;
+- #endif
+ clearop(oap);
+ }
+ }
+--- 2129,2135 ----
+***************
+*** 2235,2245 ****
+ oparg_T *oap;
+ {
+ stuffcharReadbuff(':');
+- #ifdef FEAT_VISUAL
+ if (oap->is_VIsual)
+ stuffReadbuff((char_u *)"'<,'>");
+ else
+- #endif
+ {
+ /*
+ * Make the range look nice, so it can be repeated.
+--- 2142,2150 ----
+***************
+*** 2404,2417 ****
+ pos_T save_cursor;
+ #endif
+ win_T *old_curwin = curwin;
+- #ifdef FEAT_VISUAL
+ static pos_T orig_cursor;
+ colnr_T leftcol, rightcol;
+ pos_T end_visual;
+ int diff;
+ int old_active = VIsual_active;
+ int old_mode = VIsual_mode;
+- #endif
+ int regname;
+
+ #if defined(FEAT_FOLDING)
+--- 2309,2320 ----
+***************
+*** 2432,2446 ****
+ if (!gui.in_use)
+ #endif
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (!mouse_has(MOUSE_VISUAL))
+ return FALSE;
+ }
+! else
+! #endif
+! if (State == NORMAL && !mouse_has(MOUSE_NORMAL))
+ return FALSE;
+ }
+
+--- 2335,2346 ----
+ if (!gui.in_use)
+ #endif
+ {
+ if (VIsual_active)
+ {
+ if (!mouse_has(MOUSE_VISUAL))
+ return FALSE;
+ }
+! else if (State == NORMAL && !mouse_has(MOUSE_NORMAL))
+ return FALSE;
+ }
+
+***************
+*** 2509,2522 ****
+ }
+ }
+
+- #ifndef FEAT_VISUAL
+- /*
+- * ALT is only used for starting/extending Visual mode.
+- */
+- if ((mod_mask & MOD_MASK_ALT))
+- return FALSE;
+- #endif
+-
+ /*
+ * CTRL right mouse button does CTRL-T
+ */
+--- 2409,2414 ----
+***************
+*** 2586,2592 ****
+ return FALSE;
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * If visual was active, yank the highlighted text and put it
+ * before the mouse pointer position.
+--- 2478,2483 ----
+***************
+*** 2607,2613 ****
+ do_always = TRUE; /* ignore 'mouse' setting next time */
+ return FALSE;
+ }
+- #endif
+ /*
+ * The rest is below jump_to_mouse()
+ */
+--- 2498,2503 ----
+***************
+*** 2761,2767 ****
+ {
+ /* First set the cursor position before showing the popup
+ * menu. */
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ pos_T m_pos;
+--- 2651,2656 ----
+***************
+*** 2800,2815 ****
+ }
+ else
+ jump_flags = MOUSE_MAY_STOP_VIS;
+- #endif
+ }
+ if (jump_flags)
+ {
+ jump_flags = jump_to_mouse(jump_flags, NULL, which_button);
+! update_curbuf(
+! #ifdef FEAT_VISUAL
+! VIsual_active ? INVERTED :
+! #endif
+! VALID);
+ setcursor();
+ out_flush(); /* Update before showing popup menu */
+ }
+--- 2689,2699 ----
+ }
+ else
+ jump_flags = MOUSE_MAY_STOP_VIS;
+ }
+ if (jump_flags)
+ {
+ jump_flags = jump_to_mouse(jump_flags, NULL, which_button);
+! update_curbuf(VIsual_active ? INVERTED : VALID);
+ setcursor();
+ out_flush(); /* Update before showing popup menu */
+ }
+***************
+*** 2832,2838 ****
+ }
+ }
+
+- #ifdef FEAT_VISUAL
+ if ((State & (NORMAL | INSERT))
+ && !(mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL)))
+ {
+--- 2716,2721 ----
+***************
+*** 2872,2878 ****
+ jump_flags |= MOUSE_MAY_VIS;
+ }
+ }
+- #endif
+
+ /*
+ * If an operator is pending, ignore all drags and releases until the
+--- 2755,2760 ----
+***************
+*** 2941,2947 ****
+ }
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /* Set global flag that we are extending the Visual area with mouse
+ * dragging; temporarily minimize 'scrolloff'. */
+ if (VIsual_active && is_drag && p_so)
+--- 2823,2828 ----
+***************
+*** 3040,3046 ****
+ */
+ else if ((State & INSERT) && VIsual_active)
+ stuffcharReadbuff(Ctrl_O);
+- #endif
+
+ /*
+ * Middle mouse click: Put text before cursor.
+--- 2921,2926 ----
+***************
+*** 3118,3128 ****
+ */
+ else if ((mod_mask & MOD_MASK_SHIFT))
+ {
+! if (State & INSERT
+! #ifdef FEAT_VISUAL
+! || (VIsual_active && VIsual_select)
+! #endif
+! )
+ stuffcharReadbuff(Ctrl_O);
+ if (which_button == MOUSE_LEFT)
+ stuffcharReadbuff('*');
+--- 2998,3004 ----
+ */
+ else if ((mod_mask & MOD_MASK_SHIFT))
+ {
+! if ((State & INSERT) || (VIsual_active && VIsual_select))
+ stuffcharReadbuff(Ctrl_O);
+ if (which_button == MOUSE_LEFT)
+ stuffcharReadbuff('*');
+***************
+*** 3153,3159 ****
+ # endif
+ }
+ #endif
+- #ifdef FEAT_VISUAL
+ else if ((mod_mask & MOD_MASK_MULTI_CLICK) && (State & (NORMAL | INSERT))
+ && mouse_has(MOUSE_VISUAL))
+ {
+--- 3029,3034 ----
+***************
+*** 3267,3278 ****
+ || (VIsual_active && p_smd && msg_silent == 0
+ && (!old_active || VIsual_mode != old_mode)))
+ redraw_cmdline = TRUE;
+- #endif
+
+ return moved;
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * Move "pos" back to the start of the word it's in.
+ */
+--- 3142,3151 ----
+***************
+*** 3372,3381 ****
+ return 1;
+ return c;
+ }
+- #endif /* FEAT_VISUAL */
+ #endif /* FEAT_MOUSE */
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+ /*
+ * Check if highlighting for visual mode is possible, give a warning message
+ * if not.
+--- 3245,3252 ----
+***************
+*** 3468,3474 ****
+ VIsual_reselect = FALSE;
+ }
+ }
+- #endif /* FEAT_VISUAL */
+
+ #if defined(FEAT_BEVAL)
+ static int find_is_eval_item __ARGS((char_u *ptr, int *colp, int *nbp, int dir));
+--- 3339,3344 ----
+***************
+*** 3802,3812 ****
+ checkclearopq(oap)
+ oparg_T *oap;
+ {
+! if (oap->op_type == OP_NOP
+! #ifdef FEAT_VISUAL
+! && !VIsual_active
+! #endif
+! )
+ return FALSE;
+ clearopbeep(oap);
+ return TRUE;
+--- 3672,3678 ----
+ checkclearopq(oap)
+ oparg_T *oap;
+ {
+! if (oap->op_type == OP_NOP && !VIsual_active)
+ return FALSE;
+ clearopbeep(oap);
+ return TRUE;
+***************
+*** 3830,3836 ****
+ beep_flush();
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * Remove the shift modifier from a special key.
+ */
+--- 3696,3701 ----
+***************
+*** 3849,3866 ****
+ }
+ cap->cmdchar = simplify_key(cap->cmdchar, &mod_mask);
+ }
+- #endif
+
+ #if defined(FEAT_CMDL_INFO) || defined(PROTO)
+ /*
+ * Routines for displaying a partly typed command
+ */
+
+! #ifdef FEAT_VISUAL /* need room for size of Visual area */
+! # define SHOWCMD_BUFLEN SHOWCMD_COLS + 1 + 30
+! #else
+! # define SHOWCMD_BUFLEN SHOWCMD_COLS + 1
+! #endif
+ static char_u showcmd_buf[SHOWCMD_BUFLEN];
+ static char_u old_showcmd_buf[SHOWCMD_BUFLEN]; /* For push_showcmd() */
+ static int showcmd_is_clear = TRUE;
+--- 3714,3726 ----
+ }
+ cap->cmdchar = simplify_key(cap->cmdchar, &mod_mask);
+ }
+
+ #if defined(FEAT_CMDL_INFO) || defined(PROTO)
+ /*
+ * Routines for displaying a partly typed command
+ */
+
+! #define SHOWCMD_BUFLEN SHOWCMD_COLS + 1 + 30
+ static char_u showcmd_buf[SHOWCMD_BUFLEN];
+ static char_u old_showcmd_buf[SHOWCMD_BUFLEN]; /* For push_showcmd() */
+ static int showcmd_is_clear = TRUE;
+***************
+*** 3874,3880 ****
+ if (!p_sc)
+ return;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active && !char_avail())
+ {
+ int cursor_bot = lt(VIsual, curwin->w_cursor);
+--- 3734,3739 ----
+***************
+*** 3960,3966 ****
+ showcmd_visual = TRUE;
+ }
+ else
+- #endif
+ {
+ showcmd_buf[0] = NUL;
+ showcmd_visual = FALSE;
+--- 3819,3824 ----
+***************
+*** 4203,4212 ****
+ int want_hor;
+ win_T *old_curwin = curwin;
+ buf_T *old_curbuf = curbuf;
+- #ifdef FEAT_VISUAL
+ int old_VIsual_select = VIsual_select;
+ int old_VIsual_active = VIsual_active;
+- #endif
+ colnr_T tgt_leftcol = curwin->w_leftcol;
+ long topline;
+ long y;
+--- 4061,4068 ----
+***************
+*** 4223,4231 ****
+ /*
+ * loop through the scrollbound windows and scroll accordingly
+ */
+- #ifdef FEAT_VISUAL
+ VIsual_select = VIsual_active = 0;
+- #endif
+ for (curwin = firstwin; curwin; curwin = curwin->w_next)
+ {
+ curbuf = curwin->w_buffer;
+--- 4079,4085 ----
+***************
+*** 4280,4289 ****
+ /*
+ * reset current-window
+ */
+- #ifdef FEAT_VISUAL
+ VIsual_select = old_VIsual_select;
+ VIsual_active = old_VIsual_active;
+- #endif
+ curwin = old_curwin;
+ curbuf = old_curbuf;
+ }
+--- 4134,4141 ----
+***************
+*** 5239,5249 ****
+
+ if (checkclearop(cap->oap))
+ break;
+- # ifdef FEAT_VISUAL
+ if (VIsual_active && get_visual_text(cap, &ptr, &len)
+ == FAIL)
+ return;
+- # endif
+ if (ptr == NULL)
+ {
+ pos_T pos = curwin->w_cursor;
+--- 5091,5099 ----
+***************
+*** 5411,5422 ****
+ /*
+ * Ignore 'Q' in Visual mode, just give a beep.
+ */
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ vim_beep();
+! else
+! #endif
+! if (!checkclearop(cap->oap))
+ do_exmode(FALSE);
+ }
+
+--- 5261,5269 ----
+ /*
+ * Ignore 'Q' in Visual mode, just give a beep.
+ */
+ if (VIsual_active)
+ vim_beep();
+! else if (!checkclearop(cap->oap))
+ do_exmode(FALSE);
+ }
+
+***************
+*** 5430,5440 ****
+ int old_p_im;
+ int cmd_result;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ nv_operator(cap);
+ else
+- #endif
+ {
+ if (cap->oap->op_type != OP_NOP)
+ {
+--- 5277,5285 ----
+***************
+*** 5494,5508 ****
+ nv_ctrlg(cap)
+ cmdarg_T *cap;
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active) /* toggle Selection/Visual mode */
+ {
+ VIsual_select = !VIsual_select;
+ showmode();
+ }
+! else
+! #endif
+! if (!checkclearop(cap->oap))
+ /* print full name if count given or :cd used */
+ fileinfo((int)cap->count0, FALSE, TRUE);
+ }
+--- 5339,5350 ----
+ nv_ctrlg(cap)
+ cmdarg_T *cap;
+ {
+ if (VIsual_active) /* toggle Selection/Visual mode */
+ {
+ VIsual_select = !VIsual_select;
+ showmode();
+ }
+! else if (!checkclearop(cap->oap))
+ /* print full name if count given or :cd used */
+ fileinfo((int)cap->count0, FALSE, TRUE);
+ }
+***************
+*** 5514,5527 ****
+ nv_ctrlh(cap)
+ cmdarg_T *cap;
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active && VIsual_select)
+ {
+ cap->cmdchar = 'x'; /* BS key behaves like 'x' in Select mode */
+ v_visop(cap);
+ }
+ else
+- #endif
+ nv_left(cap);
+ }
+
+--- 5356,5367 ----
+***************
+*** 5558,5564 ****
+ nv_ctrlo(cap)
+ cmdarg_T *cap;
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active && VIsual_select)
+ {
+ VIsual_select = FALSE;
+--- 5398,5403 ----
+***************
+*** 5566,5572 ****
+ restart_VIsual_select = 2; /* restart Select mode later */
+ }
+ else
+- #endif
+ {
+ cap->count1 = -cap->count1;
+ nv_pcmark(cap);
+--- 5405,5410 ----
+***************
+*** 5675,5684 ****
+ */
+ if (cmdchar == ']' || cmdchar == Ctrl_RSB || cmdchar == 'K')
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active && get_visual_text(cap, &ptr, &n) == FAIL)
+ return;
+- #endif
+ if (checkclearopq(cap->oap))
+ return;
+ }
+--- 5513,5520 ----
+***************
+*** 5872,5878 ****
+ vim_free(buf);
+ }
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+ /*
+ * Get visually selected text, within one line only.
+ * Returns FAIL if more than one line selected.
+--- 5708,5713 ----
+***************
+*** 5917,5923 ****
+ reset_VIsual_and_resel();
+ return OK;
+ }
+- #endif
+
+ /*
+ * CTRL-T: backwards in tag stack
+--- 5752,5757 ----
+***************
+*** 6040,6050 ****
+ cmdarg_T *cap;
+ {
+ long n;
+! #ifdef FEAT_VISUAL
+! int PAST_LINE;
+! #else
+! # define PAST_LINE 0
+! #endif
+
+ if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
+ {
+--- 5874,5880 ----
+ cmdarg_T *cap;
+ {
+ long n;
+! int past_line;
+
+ if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
+ {
+***************
+*** 6057,6081 ****
+
+ cap->oap->motion_type = MCHAR;
+ cap->oap->inclusive = FALSE;
+! #ifdef FEAT_VISUAL
+! PAST_LINE = (VIsual_active && *p_sel != 'o');
+
+! # ifdef FEAT_VIRTUALEDIT
+ /*
+! * In virtual mode, there's no such thing as "PAST_LINE", as lines are
+! * (theoretically) infinitely long.
+ */
+ if (virtual_active())
+! PAST_LINE = 0;
+! # endif
+ #endif
+
+ for (n = cap->count1; n > 0; --n)
+ {
+! if ((!PAST_LINE && oneright() == FAIL)
+! #ifdef FEAT_VISUAL
+! || (PAST_LINE && *ml_get_cursor() == NUL)
+! #endif
+ )
+ {
+ /*
+--- 5887,5907 ----
+
+ cap->oap->motion_type = MCHAR;
+ cap->oap->inclusive = FALSE;
+! past_line = (VIsual_active && *p_sel != 'o');
+
+! #ifdef FEAT_VIRTUALEDIT
+ /*
+! * In virtual edit mode, there's no such thing as "past_line", as lines
+! * are (theoretically) infinitely long.
+ */
+ if (virtual_active())
+! past_line = 0;
+ #endif
+
+ for (n = cap->count1; n > 0; --n)
+ {
+! if ((!past_line && oneright() == FAIL)
+! || (past_line && *ml_get_cursor() == NUL)
+ )
+ {
+ /*
+***************
+*** 6123,6148 ****
+ }
+ break;
+ }
+! #ifdef FEAT_VISUAL
+! else if (PAST_LINE)
+ {
+ curwin->w_set_curswant = TRUE;
+! # ifdef FEAT_VIRTUALEDIT
+ if (virtual_active())
+ oneright();
+ else
+! # endif
+ {
+! # ifdef FEAT_MBYTE
+ if (has_mbyte)
+ curwin->w_cursor.col +=
+ (*mb_ptr2len)(ml_get_cursor());
+ else
+! # endif
+ ++curwin->w_cursor.col;
+ }
+ }
+- #endif
+ }
+ #ifdef FEAT_FOLDING
+ if (n != cap->count1 && (fdo_flags & FDO_HOR) && KeyTyped
+--- 5949,5972 ----
+ }
+ break;
+ }
+! else if (past_line)
+ {
+ curwin->w_set_curswant = TRUE;
+! #ifdef FEAT_VIRTUALEDIT
+ if (virtual_active())
+ oneright();
+ else
+! #endif
+ {
+! #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ curwin->w_cursor.col +=
+ (*mb_ptr2len)(ml_get_cursor());
+ else
+! #endif
+ ++curwin->w_cursor.col;
+ }
+ }
+ }
+ #ifdef FEAT_FOLDING
+ if (n != cap->count1 && (fdo_flags & FDO_HOR) && KeyTyped
+***************
+*** 6503,6511 ****
+ else
+ curwin->w_cursor.coladd = 0;
+ #endif
+- #ifdef FEAT_VISUAL
+ adjust_for_sel(cap);
+- #endif
+ #ifdef FEAT_FOLDING
+ if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP)
+ foldOpenCursor();
+--- 6327,6333 ----
+***************
+*** 6754,6760 ****
+ int dir = (cap->cmdchar == ']' && cap->nchar == 'p')
+ ? FORWARD : BACKWARD;
+ int regname = cap->oap->regname;
+- #ifdef FEAT_VISUAL
+ int was_visual = VIsual_active;
+ int line_count = curbuf->b_ml.ml_line_count;
+ pos_T start, end;
+--- 6576,6581 ----
+***************
+*** 6766,6779 ****
+ end = equalpos(start,VIsual) ? curwin->w_cursor : VIsual;
+ curwin->w_cursor = (dir == BACKWARD ? start : end);
+ }
+- #endif
+ # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(&regname);
+ # endif
+ prep_redo_cmd(cap);
+
+ do_put(regname, dir, cap->count1, PUT_FIXINDENT);
+- #ifdef FEAT_VISUAL
+ if (was_visual)
+ {
+ VIsual = start;
+--- 6587,6598 ----
+***************
+*** 6802,6808 ****
+ redraw_later(SOME_VALID);
+ }
+ }
+- #endif
+ }
+ }
+
+--- 6621,6626 ----
+***************
+*** 6936,6944 ****
+ #ifdef FEAT_VIRTUALEDIT
+ curwin->w_cursor.coladd = 0;
+ #endif
+- #ifdef FEAT_VISUAL
+ adjust_for_sel(cap);
+- #endif
+ }
+ }
+ #ifdef FEAT_FOLDING
+--- 6754,6760 ----
+***************
+*** 7027,7037 ****
+ nv_undo(cap)
+ cmdarg_T *cap;
+ {
+! if (cap->oap->op_type == OP_LOWER
+! #ifdef FEAT_VISUAL
+! || VIsual_active
+! #endif
+! )
+ {
+ /* translate "<Visual>u" to "<Visual>gu" and "guu" to "gugu" */
+ cap->cmdchar = 'g';
+--- 6843,6849 ----
+ nv_undo(cap)
+ cmdarg_T *cap;
+ {
+! if (cap->oap->op_type == OP_LOWER || VIsual_active)
+ {
+ /* translate "<Visual>u" to "<Visual>gu" and "guu" to "gugu" */
+ cap->cmdchar = 'g';
+***************
+*** 7089,7095 ****
+ return;
+ }
+
+- #ifdef FEAT_VISUAL
+ /* Visual mode "r" */
+ if (VIsual_active)
+ {
+--- 6901,6906 ----
+***************
+*** 7105,7111 ****
+ nv_operator(cap);
+ return;
+ }
+- #endif
+
+ #ifdef FEAT_VIRTUALEDIT
+ /* Break tabs, etc. */
+--- 6916,6921 ----
+***************
+*** 7273,7279 ****
+ }
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * 'o': Exchange start and end of Visual area.
+ * 'O': same, but in block mode exchange left and right corners.
+--- 7083,7088 ----
+***************
+*** 7326,7332 ****
+ curwin->w_set_curswant = TRUE;
+ }
+ }
+- #endif /* FEAT_VISUAL */
+
+ /*
+ * "R" (cap->arg is FALSE) and "gR" (cap->arg is TRUE).
+--- 7135,7140 ----
+***************
+*** 7335,7341 ****
+ nv_Replace(cap)
+ cmdarg_T *cap;
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active) /* "R" is replace lines */
+ {
+ cap->cmdchar = 'c';
+--- 7143,7148 ----
+***************
+*** 7344,7352 ****
+ VIsual_mode = 'V';
+ nv_operator(cap);
+ }
+! else
+! #endif
+! if (!checkclearopq(cap->oap))
+ {
+ if (!curbuf->b_p_ma)
+ EMSG(_(e_modifiable));
+--- 7151,7157 ----
+ VIsual_mode = 'V';
+ nv_operator(cap);
+ }
+! else if (!checkclearopq(cap->oap))
+ {
+ if (!curbuf->b_p_ma)
+ EMSG(_(e_modifiable));
+***************
+*** 7369,7384 ****
+ nv_vreplace(cap)
+ cmdarg_T *cap;
+ {
+- # ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ cap->cmdchar = 'r';
+ cap->nchar = cap->extra_char;
+ nv_replace(cap); /* Do same as "r" in Visual mode for now */
+ }
+! else
+! # endif
+! if (!checkclearopq(cap->oap))
+ {
+ if (!curbuf->b_p_ma)
+ EMSG(_(e_modifiable));
+--- 7174,7186 ----
+ nv_vreplace(cap)
+ cmdarg_T *cap;
+ {
+ if (VIsual_active)
+ {
+ cap->cmdchar = 'r';
+ cap->nchar = cap->extra_char;
+ nv_replace(cap); /* Do same as "r" in Visual mode for now */
+ }
+! else if (!checkclearopq(cap->oap))
+ {
+ if (!curbuf->b_p_ma)
+ EMSG(_(e_modifiable));
+***************
+*** 7525,7531 ****
+ curwin->w_set_curswant = TRUE;
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * Handle commands that are operators in Visual mode.
+ */
+--- 7327,7332 ----
+***************
+*** 7550,7556 ****
+ cap->cmdchar = *(vim_strchr(trans, cap->cmdchar) + 1);
+ nv_operator(cap);
+ }
+- #endif
+
+ /*
+ * "s" and "S" commands.
+--- 7351,7356 ----
+***************
+*** 7559,7565 ****
+ nv_subst(cap)
+ cmdarg_T *cap;
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active) /* "vs" and "vS" are the same as "vc" */
+ {
+ if (cap->cmdchar == 'S')
+--- 7359,7364 ----
+***************
+*** 7571,7577 ****
+ nv_operator(cap);
+ }
+ else
+- #endif
+ nv_optrans(cap);
+ }
+
+--- 7370,7375 ----
+***************
+*** 7585,7596 ****
+ if (cap->cmdchar == K_DEL || cap->cmdchar == K_KDEL)
+ cap->cmdchar = 'x'; /* DEL key behaves like 'x' */
+
+- #ifdef FEAT_VISUAL
+ /* in Visual mode these commands are operators */
+ if (VIsual_active)
+ v_visop(cap);
+ else
+- #endif
+ nv_optrans(cap);
+ }
+
+--- 7383,7392 ----
+***************
+*** 7758,7764 ****
+ clearopbeep(cap->oap);
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * Handle "v", "V" and "CTRL-V" commands.
+ * Also for "gh", "gH" and "g^H" commands: Always start Select mode, cap->arg
+--- 7554,7559 ----
+***************
+*** 7950,7956 ****
+ }
+ }
+
+- #endif /* FEAT_VISUAL */
+
+ /*
+ * CTRL-W: Window commands
+--- 7745,7750 ----
+***************
+*** 7975,7984 ****
+ cmdarg_T *cap;
+ {
+ clearop(cap->oap);
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ end_visual_mode(); /* stop Visual mode */
+- #endif
+ do_cmdline_cmd((char_u *)"st");
+ }
+
+--- 7769,7776 ----
+***************
+*** 7990,7998 ****
+ cmdarg_T *cap;
+ {
+ oparg_T *oap = cap->oap;
+- #ifdef FEAT_VISUAL
+ pos_T tpos;
+- #endif
+ int i;
+ int flag = FALSE;
+
+--- 7782,7788 ----
+***************
+*** 8025,8031 ****
+ do_cmdline_cmd((char_u *)"%s//~/&");
+ break;
+
+- #ifdef FEAT_VISUAL
+ /*
+ * "gv": Reselect the previous Visual area. If Visual already active,
+ * exchange previous and current Visual area.
+--- 7815,7820 ----
+***************
+*** 8126,8132 ****
+ cap->arg = TRUE;
+ nv_visual(cap);
+ break;
+- #endif /* FEAT_VISUAL */
+
+ /* "gn", "gN" visually select next/previous search match
+ * "gn" selects next match
+--- 7915,7920 ----
+***************
+*** 8134,8142 ****
+ */
+ case 'N':
+ case 'n':
+- #ifdef FEAT_VISUAL
+ if (!current_search(cap->count1, cap->nchar == 'n'))
+- #endif
+ clearopbeep(oap);
+ break;
+
+--- 7922,7928 ----
+***************
+*** 8258,8266 ****
+ && vim_iswhite(ptr[curwin->w_cursor.col]))
+ --curwin->w_cursor.col;
+ curwin->w_set_curswant = TRUE;
+- #ifdef FEAT_VISUAL
+ adjust_for_sel(cap);
+- #endif
+ }
+ break;
+
+--- 8044,8050 ----
+***************
+*** 8657,8667 ****
+ cmdarg_T *cap;
+ {
+ /* In Visual mode and typing "gUU" triggers an operator */
+! if (cap->oap->op_type == OP_UPPER
+! #ifdef FEAT_VISUAL
+! || VIsual_active
+! #endif
+! )
+ {
+ /* translate "gUU" to "gUgU" */
+ cap->cmdchar = 'g';
+--- 8441,8447 ----
+ cmdarg_T *cap;
+ {
+ /* In Visual mode and typing "gUU" triggers an operator */
+! if (cap->oap->op_type == OP_UPPER || VIsual_active)
+ {
+ /* translate "gUU" to "gUgU" */
+ cap->cmdchar = 'g';
+***************
+*** 8683,8693 ****
+ nv_tilde(cap)
+ cmdarg_T *cap;
+ {
+! if (!p_to
+! #ifdef FEAT_VISUAL
+! && !VIsual_active
+! #endif
+! && cap->oap->op_type != OP_TILDE)
+ n_swapchar(cap);
+ else
+ nv_operator(cap);
+--- 8463,8469 ----
+ nv_tilde(cap)
+ cmdarg_T *cap;
+ {
+! if (!p_to && !VIsual_active && cap->oap->op_type != OP_TILDE)
+ n_swapchar(cap);
+ else
+ nv_operator(cap);
+***************
+*** 8906,8914 ****
+ clearopbeep(cap->oap);
+ else
+ {
+- #ifdef FEAT_VISUAL
+ adjust_for_sel(cap);
+- #endif
+ #ifdef FEAT_FOLDING
+ if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP)
+ foldOpenCursor();
+--- 8682,8688 ----
+***************
+*** 8931,8939 ****
+ * - 'virtualedit' is not "all" and not "onemore".
+ */
+ if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL
+- #ifdef FEAT_VISUAL
+ && (!VIsual_active || *p_sel == 'o')
+- #endif
+ #ifdef FEAT_VIRTUALEDIT
+ && !virtual_active() && (ve_flags & VE_ONEMORE) == 0
+ #endif
+--- 8705,8711 ----
+***************
+*** 8968,8974 ****
+ one-character line). */
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * In exclusive Visual mode, may include the last character.
+ */
+--- 8740,8745 ----
+***************
+*** 8979,8989 ****
+ if (VIsual_active && cap->oap->inclusive && *p_sel == 'e'
+ && gchar_cursor() != NUL && lt(VIsual, curwin->w_cursor))
+ {
+! # ifdef FEAT_MBYTE
+ if (has_mbyte)
+ inc_cursor();
+ else
+! # endif
+ ++curwin->w_cursor.col;
+ cap->oap->inclusive = FALSE;
+ }
+--- 8750,8760 ----
+ if (VIsual_active && cap->oap->inclusive && *p_sel == 'e'
+ && gchar_cursor() != NUL && lt(VIsual, curwin->w_cursor))
+ {
+! #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ inc_cursor();
+ else
+! #endif
+ ++curwin->w_cursor.col;
+ cap->oap->inclusive = FALSE;
+ }
+***************
+*** 9044,9050 ****
+ }
+ }
+
+- #endif
+
+ /*
+ * "G", "gg", CTRL-END, CTRL-HOME.
+--- 8815,8820 ----
+***************
+*** 9095,9107 ****
+ if (cmdwin_type != 0)
+ cmdwin_result = Ctrl_C;
+ #endif
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ end_visual_mode(); /* stop Visual */
+ redraw_curbuf_later(INVERTED);
+ }
+- #endif
+ /* CTRL-\ CTRL-G restarts Insert mode when 'insertmode' is set. */
+ if (cap->nchar == Ctrl_G && p_im)
+ restart_edit = 'a';
+--- 8865,8875 ----
+***************
+*** 9132,9140 ****
+ #ifdef FEAT_CMDWIN
+ && cmdwin_type == 0
+ #endif
+- #ifdef FEAT_VISUAL
+ && !VIsual_active
+- #endif
+ && no_reason)
+ MSG(_("Type :quit<Enter> to exit Vim"));
+
+--- 8900,8906 ----
+***************
+*** 9152,9158 ****
+ #endif
+ }
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ end_visual_mode(); /* stop Visual */
+--- 8918,8923 ----
+***************
+*** 9160,9169 ****
+ curwin->w_set_curswant = TRUE;
+ redraw_curbuf_later(INVERTED);
+ }
+! else
+! #endif
+! if (no_reason)
+! vim_beep();
+ clearop(cap->oap);
+
+ /* A CTRL-C is often used at the start of a menu. When 'insertmode' is
+--- 8925,8932 ----
+ curwin->w_set_curswant = TRUE;
+ redraw_curbuf_later(INVERTED);
+ }
+! else if (no_reason)
+! vim_beep();
+ clearop(cap->oap);
+
+ /* A CTRL-C is often used at the start of a menu. When 'insertmode' is
+***************
+*** 9187,9206 ****
+ if (cap->cmdchar == K_INS || cap->cmdchar == K_KINS)
+ cap->cmdchar = 'i';
+
+- #ifdef FEAT_VISUAL
+ /* in Visual mode "A" and "I" are an operator */
+ if (VIsual_active && (cap->cmdchar == 'A' || cap->cmdchar == 'I'))
+ v_visop(cap);
+
+ /* in Visual mode and after an operator "a" and "i" are for text objects */
+! else
+! #endif
+! if ((cap->cmdchar == 'a' || cap->cmdchar == 'i')
+! && (cap->oap->op_type != OP_NOP
+! #ifdef FEAT_VISUAL
+! || VIsual_active
+! #endif
+! ))
+ {
+ #ifdef FEAT_TEXTOBJ
+ nv_object(cap);
+--- 8950,8962 ----
+ if (cap->cmdchar == K_INS || cap->cmdchar == K_KINS)
+ cap->cmdchar = 'i';
+
+ /* in Visual mode "A" and "I" are an operator */
+ if (VIsual_active && (cap->cmdchar == 'A' || cap->cmdchar == 'I'))
+ v_visop(cap);
+
+ /* in Visual mode and after an operator "a" and "i" are for text objects */
+! else if ((cap->cmdchar == 'a' || cap->cmdchar == 'i')
+! && (cap->oap->op_type != OP_NOP || VIsual_active))
+ {
+ #ifdef FEAT_TEXTOBJ
+ nv_object(cap);
+***************
+*** 9467,9478 ****
+ nv_join(cap)
+ cmdarg_T *cap;
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active) /* join the visual lines */
+ nv_operator(cap);
+! else
+! #endif
+! if (!checkclearop(cap->oap))
+ {
+ if (cap->count0 <= 1)
+ cap->count0 = 2; /* default for join is two lines! */
+--- 9223,9231 ----
+ nv_join(cap)
+ cmdarg_T *cap;
+ {
+ if (VIsual_active) /* join the visual lines */
+ nv_operator(cap);
+! else if (!checkclearop(cap->oap))
+ {
+ if (cap->count0 <= 1)
+ cap->count0 = 2; /* default for join is two lines! */
+***************
+*** 9495,9506 ****
+ nv_put(cap)
+ cmdarg_T *cap;
+ {
+- #ifdef FEAT_VISUAL
+ int regname = 0;
+ void *reg1 = NULL, *reg2 = NULL;
+ int empty = FALSE;
+ int was_visual = FALSE;
+- #endif
+ int dir;
+ int flags = 0;
+
+--- 9248,9257 ----
+***************
+*** 9526,9532 ****
+ if (cap->cmdchar == 'g')
+ flags |= PUT_CURSEND;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ /* Putting in Visual mode: The put text replaces the selected
+--- 9277,9282 ----
+***************
+*** 9536,9549 ****
+ */
+ was_visual = TRUE;
+ regname = cap->oap->regname;
+! # ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(&regname);
+! # endif
+ if (regname == 0 || regname == '"'
+ || VIM_ISDIGIT(regname) || regname == '-'
+! # ifdef FEAT_CLIPBOARD
+ || (clip_unnamed && (regname == '*' || regname == '+'))
+! # endif
+
+ )
+ {
+--- 9286,9299 ----
+ */
+ was_visual = TRUE;
+ regname = cap->oap->regname;
+! #ifdef FEAT_CLIPBOARD
+ adjust_clip_reg(&regname);
+! #endif
+ if (regname == 0 || regname == '"'
+ || VIM_ISDIGIT(regname) || regname == '-'
+! #ifdef FEAT_CLIPBOARD
+ || (clip_unnamed && (regname == '*' || regname == '+'))
+! #endif
+
+ )
+ {
+***************
+*** 9591,9600 ****
+ /* May have been reset in do_put(). */
+ VIsual_active = TRUE;
+ }
+- #endif
+ do_put(cap->oap->regname, dir, cap->count1, flags);
+
+- #ifdef FEAT_VISUAL
+ /* If a register was saved, put it back now. */
+ if (reg2 != NULL)
+ put_register(regname, reg2);
+--- 9341,9348 ----
+***************
+*** 9621,9627 ****
+ coladvance((colnr_T)MAXCOL);
+ }
+ }
+- #endif
+ auto_format(FALSE, TRUE);
+ }
+ }
+--- 9369,9374 ----
+***************
+*** 9642,9652 ****
+ }
+ else
+ #endif
+- #ifdef FEAT_VISUAL
+ if (VIsual_active) /* switch start and end of visual */
+ v_swap_corners(cap->cmdchar);
+ else
+- #endif
+ n_opencmd(cap);
+ }
+
+--- 9389,9397 ----
+*** ../vim-7.4.211/src/ops.c 2014-03-19 18:57:27.730175565 +0100
+--- src/ops.c 2014-03-23 15:08:16.095260447 +0100
+***************
+*** 57,65 ****
+ char_u **y_array; /* pointer to array of line pointers */
+ linenr_T y_size; /* number of lines in y_array */
+ char_u y_type; /* MLINE, MCHAR or MBLOCK */
+- #ifdef FEAT_VISUAL
+ colnr_T y_width; /* only set if y_type == MBLOCK */
+- #endif
+ } y_regs[NUM_REGISTERS];
+
+ static struct yankreg *y_current; /* ptr to current yankreg */
+--- 57,63 ----
+***************
+*** 107,123 ****
+ static int yank_copy_line __ARGS((struct block_def *bd, long y_idx));
+ #ifdef FEAT_CLIPBOARD
+ static void copy_yank_reg __ARGS((struct yankreg *reg));
+- # if defined(FEAT_VISUAL) || defined(FEAT_EVAL)
+ static void may_set_selection __ARGS((void));
+- # endif
+ #endif
+ static void dis_msg __ARGS((char_u *p, int skip_esc));
+ #if defined(FEAT_COMMENTS) || defined(PROTO)
+ static char_u *skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
+ #endif
+- #ifdef FEAT_VISUAL
+ static void block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
+- #endif
+ #if defined(FEAT_CLIPBOARD) || defined(FEAT_EVAL)
+ static void str_to_reg __ARGS((struct yankreg *y_ptr, int type, char_u *str, long len, long blocklen));
+ #endif
+--- 105,117 ----
+***************
+*** 187,193 ****
+ return i;
+ }
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+ /*
+ * Return TRUE if operator "op" always works on whole lines.
+ */
+--- 181,186 ----
+***************
+*** 197,203 ****
+ {
+ return opchars[op][2];
+ }
+- #endif
+
+ /*
+ * Get first operator command character.
+--- 190,195 ----
+***************
+*** 232,249 ****
+ long i;
+ int first_char;
+ char_u *s;
+- #ifdef FEAT_VISUAL
+ int block_col = 0;
+- #endif
+
+ if (u_save((linenr_T)(oap->start.lnum - 1),
+ (linenr_T)(oap->end.lnum + 1)) == FAIL)
+ return;
+
+- #ifdef FEAT_VISUAL
+ if (oap->block_mode)
+ block_col = curwin->w_cursor.col;
+- #endif
+
+ for (i = oap->line_count; --i >= 0; )
+ {
+--- 224,237 ----
+***************
+*** 272,286 ****
+ foldOpenCursor();
+ #endif
+
+- #ifdef FEAT_VISUAL
+ if (oap->block_mode)
+ {
+ curwin->w_cursor.lnum = oap->start.lnum;
+ curwin->w_cursor.col = block_col;
+ }
+! else
+! #endif
+! if (curs_top) /* put cursor on first line, for ">>" */
+ {
+ curwin->w_cursor.lnum = oap->start.lnum;
+ beginline(BL_SOL | BL_FIX); /* shift_line() may have set cursor.col */
+--- 260,271 ----
+ foldOpenCursor();
+ #endif
+
+ if (oap->block_mode)
+ {
+ curwin->w_cursor.lnum = oap->start.lnum;
+ curwin->w_cursor.col = block_col;
+ }
+! else if (curs_top) /* put cursor on first line, for ">>" */
+ {
+ curwin->w_cursor.lnum = oap->start.lnum;
+ beginline(BL_SOL | BL_FIX); /* shift_line() may have set cursor.col */
+***************
+*** 733,746 ****
+ * there is no change still need to remove the Visual highlighting. */
+ if (last_changed != 0)
+ changed_lines(first_changed, 0,
+- #ifdef FEAT_VISUAL
+ oap->is_VIsual ? start_lnum + oap->line_count :
+- #endif
+ last_changed + 1, 0L);
+- #ifdef FEAT_VISUAL
+ else if (oap->is_VIsual)
+ redraw_curbuf_later(INVERTED);
+- #endif
+
+ if (oap->line_count > p_report)
+ {
+--- 718,727 ----
+***************
+*** 948,954 ****
+ }
+ #endif
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+ /*
+ * Obtain the contents of a "normal" register. The register is made empty.
+ * The returned pointer has allocated memory, use put_register() later.
+--- 929,934 ----
+***************
+*** 1016,1025 ****
+ *y_current = *(struct yankreg *)reg;
+ vim_free(reg);
+
+! # ifdef FEAT_CLIPBOARD
+ /* Send text written to clipboard register to the clipboard. */
+ may_set_selection();
+! # endif
+ }
+
+ void
+--- 996,1005 ----
+ *y_current = *(struct yankreg *)reg;
+ vim_free(reg);
+
+! #ifdef FEAT_CLIPBOARD
+ /* Send text written to clipboard register to the clipboard. */
+ may_set_selection();
+! #endif
+ }
+
+ void
+***************
+*** 1034,1040 ****
+ vim_free(reg);
+ *y_current = tmp;
+ }
+- #endif
+
+ #if defined(FEAT_MOUSE) || defined(PROTO)
+ /*
+--- 1014,1019 ----
+***************
+*** 1634,1643 ****
+ int n;
+ linenr_T lnum;
+ char_u *ptr;
+- #ifdef FEAT_VISUAL
+ char_u *newp, *oldp;
+ struct block_def bd;
+- #endif
+ linenr_T old_lcount = curbuf->b_ml.ml_line_count;
+ int did_yank = FALSE;
+ int orig_regname = oap->regname;
+--- 1613,1620 ----
+***************
+*** 1670,1679 ****
+ * delete linewise. Don't do this for the change command or Visual mode.
+ */
+ if ( oap->motion_type == MCHAR
+- #ifdef FEAT_VISUAL
+ && !oap->is_VIsual
+ && !oap->block_mode
+- #endif
+ && oap->line_count > 1
+ && oap->motion_force == NUL
+ && oap->op_type == OP_DELETE)
+--- 1647,1654 ----
+***************
+*** 1787,1793 ****
+ }
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * block mode delete
+ */
+--- 1762,1767 ----
+***************
+*** 1838,1846 ****
+ oap->end.lnum + 1, 0L);
+ oap->line_count = 0; /* no lines deleted */
+ }
+! else
+! #endif
+! if (oap->motion_type == MLINE)
+ {
+ if (oap->op_type == OP_CHANGE)
+ {
+--- 1812,1818 ----
+ oap->end.lnum + 1, 0L);
+ oap->line_count = 0; /* no lines deleted */
+ }
+! else if (oap->motion_type == MLINE)
+ {
+ if (oap->op_type == OP_CHANGE)
+ {
+***************
+*** 1924,1936 ****
+ return FAIL;
+
+ /* if 'cpoptions' contains '$', display '$' at end of change */
+! if ( vim_strchr(p_cpo, CPO_DOLLAR) != NULL
+ && oap->op_type == OP_CHANGE
+ && oap->end.lnum == curwin->w_cursor.lnum
+! #ifdef FEAT_VISUAL
+! && !oap->is_VIsual
+! #endif
+! )
+ display_dollar(oap->end.col - !oap->inclusive);
+
+ n = oap->end.col - oap->start.col + 1 - !oap->inclusive;
+--- 1896,1905 ----
+ return FAIL;
+
+ /* if 'cpoptions' contains '$', display '$' at end of change */
+! if ( vim_strchr(p_cpo, CPO_DOLLAR) != NULL
+ && oap->op_type == OP_CHANGE
+ && oap->end.lnum == curwin->w_cursor.lnum
+! && !oap->is_VIsual)
+ display_dollar(oap->end.col - !oap->inclusive);
+
+ n = oap->end.col - oap->start.col + 1 - !oap->inclusive;
+***************
+*** 1967,1977 ****
+ }
+ else
+ {
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+! #ifdef FEAT_VISUAL
+! && !oap->is_VIsual
+! #endif
+! );
+ }
+ }
+ else /* delete characters between lines */
+--- 1936,1943 ----
+ }
+ else
+ {
+! (void)del_bytes((long)n, !virtual_op,
+! oap->op_type == OP_DELETE && !oap->is_VIsual);
+ }
+ }
+ else /* delete characters between lines */
+***************
+*** 2008,2018 ****
+ {
+ /* delete from start of line until op_end */
+ curwin->w_cursor.col = 0;
+! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+! #ifdef FEAT_VISUAL
+! && !oap->is_VIsual
+! #endif
+! );
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+ }
+ if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+--- 1974,1981 ----
+ {
+ /* delete from start of line until op_end */
+ curwin->w_cursor.col = 0;
+! (void)del_bytes((long)n, !virtual_op,
+! oap->op_type == OP_DELETE && !oap->is_VIsual);
+ curwin->w_cursor = curpos; /* restore curwin->w_cursor */
+ }
+ if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+***************
+*** 2025,2038 ****
+ #ifdef FEAT_VIRTUALEDIT
+ setmarks:
+ #endif
+- #ifdef FEAT_VISUAL
+ if (oap->block_mode)
+ {
+ curbuf->b_op_end.lnum = oap->end.lnum;
+ curbuf->b_op_end.col = oap->start.col;
+ }
+ else
+- #endif
+ curbuf->b_op_end = oap->start;
+ curbuf->b_op_start = oap->start;
+
+--- 1988,1999 ----
+***************
+*** 2318,2326 ****
+ oparg_T *oap;
+ {
+ pos_T pos;
+- #ifdef FEAT_VISUAL
+ struct block_def bd;
+- #endif
+ int did_change = FALSE;
+
+ if (u_save((linenr_T)(oap->start.lnum - 1),
+--- 2279,2285 ----
+***************
+*** 2328,2334 ****
+ return;
+
+ pos = oap->start;
+- #ifdef FEAT_VISUAL
+ if (oap->block_mode) /* Visual block mode */
+ {
+ for (; pos.lnum <= oap->end.lnum; ++pos.lnum)
+--- 2287,2292 ----
+***************
+*** 2340,2346 ****
+ one_change = swapchars(oap->op_type, &pos, bd.textlen);
+ did_change |= one_change;
+
+! # ifdef FEAT_NETBEANS_INTG
+ if (netbeans_active() && one_change)
+ {
+ char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
+--- 2298,2304 ----
+ one_change = swapchars(oap->op_type, &pos, bd.textlen);
+ did_change |= one_change;
+
+! #ifdef FEAT_NETBEANS_INTG
+ if (netbeans_active() && one_change)
+ {
+ char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
+***************
+*** 2350,2362 ****
+ netbeans_inserted(curbuf, pos.lnum, bd.textcol,
+ &ptr[bd.textcol], bd.textlen);
+ }
+! # endif
+ }
+ if (did_change)
+ changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+ }
+ else /* not block mode */
+- #endif
+ {
+ if (oap->motion_type == MLINE)
+ {
+--- 2308,2319 ----
+ netbeans_inserted(curbuf, pos.lnum, bd.textcol,
+ &ptr[bd.textcol], bd.textlen);
+ }
+! #endif
+ }
+ if (did_change)
+ changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+ }
+ else /* not block mode */
+ {
+ if (oap->motion_type == MLINE)
+ {
+***************
+*** 2412,2422 ****
+ }
+ }
+
+- #ifdef FEAT_VISUAL
+ if (!did_change && oap->is_VIsual)
+ /* No change: need to remove the Visual selection */
+ redraw_curbuf_later(INVERTED);
+- #endif
+
+ /*
+ * Set '[ and '] marks.
+--- 2369,2377 ----
+***************
+*** 3018,3027 ****
+ if ( oap->motion_type == MCHAR
+ && oap->start.col == 0
+ && !oap->inclusive
+- #ifdef FEAT_VISUAL
+ && (!oap->is_VIsual || *p_sel == 'o')
+ && !oap->block_mode
+- #endif
+ && oap->end.col == 0
+ && yanklines > 1)
+ {
+--- 2973,2980 ----
+***************
+*** 3032,3040 ****
+
+ y_current->y_size = yanklines;
+ y_current->y_type = yanktype; /* set the yank register type */
+- #ifdef FEAT_VISUAL
+ y_current->y_width = 0;
+- #endif
+ y_current->y_array = (char_u **)lalloc_clear((long_u)(sizeof(char_u *) *
+ yanklines), TRUE);
+
+--- 2985,2991 ----
+***************
+*** 3047,3053 ****
+ y_idx = 0;
+ lnum = oap->start.lnum;
+
+- #ifdef FEAT_VISUAL
+ if (oap->block_mode)
+ {
+ /* Visual block mode */
+--- 2998,3003 ----
+***************
+*** 3057,3075 ****
+ if (curwin->w_curswant == MAXCOL && y_current->y_width > 0)
+ y_current->y_width--;
+ }
+- #endif
+
+ for ( ; lnum <= yankendlnum; lnum++, y_idx++)
+ {
+ switch (y_current->y_type)
+ {
+- #ifdef FEAT_VISUAL
+ case MBLOCK:
+ block_prep(oap, &bd, lnum, FALSE);
+ if (yank_copy_line(&bd, y_idx) == FAIL)
+ goto fail;
+ break;
+- #endif
+
+ case MLINE:
+ if ((y_current->y_array[y_idx] =
+--- 3007,3022 ----
+***************
+*** 3206,3214 ****
+ if (mess) /* Display message about yank? */
+ {
+ if (yanktype == MCHAR
+- #ifdef FEAT_VISUAL
+ && !oap->block_mode
+- #endif
+ && yanklines == 1)
+ yanklines = 0;
+ /* Some versions of Vi use ">=" here, some don't... */
+--- 3153,3159 ----
+***************
+*** 3218,3234 ****
+ update_topline_redraw();
+ if (yanklines == 1)
+ {
+- #ifdef FEAT_VISUAL
+ if (oap->block_mode)
+ MSG(_("block of 1 line yanked"));
+ else
+- #endif
+ MSG(_("1 line yanked"));
+ }
+- #ifdef FEAT_VISUAL
+ else if (oap->block_mode)
+ smsg((char_u *)_("block of %ld lines yanked"), yanklines);
+- #endif
+ else
+ smsg((char_u *)_("%ld lines yanked"), yanklines);
+ }
+--- 3163,3175 ----
+***************
+*** 3239,3249 ****
+ */
+ curbuf->b_op_start = oap->start;
+ curbuf->b_op_end = oap->end;
+! if (yanktype == MLINE
+! #ifdef FEAT_VISUAL
+! && !oap->block_mode
+! #endif
+! )
+ {
+ curbuf->b_op_start.col = 0;
+ curbuf->b_op_end.col = MAXCOL;
+--- 3180,3186 ----
+ */
+ curbuf->b_op_start = oap->start;
+ curbuf->b_op_end = oap->end;
+! if (yanktype == MLINE && !oap->block_mode)
+ {
+ curbuf->b_op_start.col = 0;
+ curbuf->b_op_end.col = MAXCOL;
+***************
+*** 3380,3386 ****
+ long i; /* index in y_array[] */
+ int y_type;
+ long y_size;
+- #ifdef FEAT_VISUAL
+ int oldlen;
+ long y_width = 0;
+ colnr_T vcol;
+--- 3317,3322 ----
+***************
+*** 3388,3394 ****
+ int incr = 0;
+ long j;
+ struct block_def bd;
+- #endif
+ char_u **y_array = NULL;
+ long nr_lines = 0;
+ pos_T new_cursor;
+--- 3324,3329 ----
+***************
+*** 3497,3510 ****
+ get_yank_register(regname, FALSE);
+
+ y_type = y_current->y_type;
+- #ifdef FEAT_VISUAL
+ y_width = y_current->y_width;
+- #endif
+ y_size = y_current->y_size;
+ y_array = y_current->y_array;
+ }
+
+- #ifdef FEAT_VISUAL
+ if (y_type == MLINE)
+ {
+ if (flags & PUT_LINE_SPLIT)
+--- 3432,3442 ----
+***************
+*** 3535,3541 ****
+ curbuf->b_op_start = curwin->w_cursor; /* default for '[ mark */
+ curbuf->b_op_end = curwin->w_cursor; /* default for '] mark */
+ }
+- #endif
+
+ if (flags & PUT_LINE) /* :put command or "p" in Visual line mode. */
+ y_type = MLINE;
+--- 3467,3472 ----
+***************
+*** 3547,3553 ****
+ goto end;
+ }
+
+- #ifdef FEAT_VISUAL
+ if (y_type == MBLOCK)
+ {
+ lnum = curwin->w_cursor.lnum + y_size + 1;
+--- 3478,3483 ----
+***************
+*** 3556,3564 ****
+ if (u_save(curwin->w_cursor.lnum - 1, lnum) == FAIL)
+ goto end;
+ }
+! else
+! #endif
+! if (y_type == MLINE)
+ {
+ lnum = curwin->w_cursor.lnum;
+ #ifdef FEAT_FOLDING
+--- 3486,3492 ----
+ if (u_save(curwin->w_cursor.lnum - 1, lnum) == FAIL)
+ goto end;
+ }
+! else if (y_type == MLINE)
+ {
+ lnum = curwin->w_cursor.lnum;
+ #ifdef FEAT_FOLDING
+***************
+*** 3610,3616 ****
+ lnum = curwin->w_cursor.lnum;
+ col = curwin->w_cursor.col;
+
+- #ifdef FEAT_VISUAL
+ /*
+ * Block mode
+ */
+--- 3538,3543 ----
+***************
+*** 3792,3798 ****
+ curwin->w_cursor.lnum = lnum;
+ }
+ else
+- #endif
+ {
+ /*
+ * Character or Line mode
+--- 3719,3724 ----
+***************
+*** 3866,3882 ****
+ curwin->w_cursor.col += (colnr_T)(totlen - 1);
+ }
+ }
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ lnum++;
+! #endif
+! } while (
+! #ifdef FEAT_VISUAL
+! VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum
+! #else
+! FALSE /* stop after 1 paste */
+! #endif
+! );
+
+ curbuf->b_op_end = curwin->w_cursor;
+ /* For "CTRL-O p" in Insert mode, put cursor after last char */
+--- 3792,3800 ----
+ curwin->w_cursor.col += (colnr_T)(totlen - 1);
+ }
+ }
+ if (VIsual_active)
+ lnum++;
+! } while (VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum);
+
+ curbuf->b_op_end = curwin->w_cursor;
+ /* For "CTRL-O p" in Insert mode, put cursor after last char */
+***************
+*** 4038,4046 ****
+ if (regname == '=')
+ vim_free(y_array);
+
+- #ifdef FEAT_VISUAL
+ VIsual_active = FALSE;
+- #endif
+
+ /* If the cursor is past the end of the line put it at the end. */
+ adjust_cursor_eol();
+--- 3956,3962 ----
+***************
+*** 4729,4739 ****
+ return;
+ curwin->w_cursor = oap->start;
+
+- #ifdef FEAT_VISUAL
+ if (oap->is_VIsual)
+ /* When there is no change: need to remove the Visual selection */
+ redraw_curbuf_later(INVERTED);
+- #endif
+
+ /* Set '[ mark at the start of the formatted area */
+ curbuf->b_op_start = oap->start;
+--- 4645,4653 ----
+***************
+*** 4765,4771 ****
+ saved_cursor.lnum = 0;
+ }
+
+- #ifdef FEAT_VISUAL
+ if (oap->is_VIsual)
+ {
+ win_T *wp;
+--- 4679,4684 ----
+***************
+*** 4783,4789 ****
+ }
+ }
+ }
+- #endif
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 4696,4701 ----
+***************
+*** 4794,4804 ****
+ op_formatexpr(oap)
+ oparg_T *oap;
+ {
+- # ifdef FEAT_VISUAL
+ if (oap->is_VIsual)
+ /* When there is no change: need to remove the Visual selection */
+ redraw_curbuf_later(INVERTED);
+- # endif
+
+ if (fex_format(oap->start.lnum, oap->line_count, NUL) != 0)
+ /* As documented: when 'formatexpr' returns non-zero fall back to
+--- 4706,4714 ----
+***************
+*** 5238,5244 ****
+ return FALSE;
+ }
+
+- #ifdef FEAT_VISUAL
+ /*
+ * prepare a few things for block mode yank/delete/tilde
+ *
+--- 5148,5153 ----
+***************
+*** 5397,5403 ****
+ bdp->textcol = (colnr_T) (pstart - line);
+ bdp->textstart = pstart;
+ }
+- #endif /* FEAT_VISUAL */
+
+ #ifdef FEAT_RIGHTLEFT
+ static void reverse_line __ARGS((char_u *s));
+--- 5306,5311 ----
+***************
+*** 5748,5766 ****
+ str = skipwhite(skiptowhite(str));
+ if (STRNCMP(str, "CHAR", 4) == 0)
+ y_current->y_type = MCHAR;
+- #ifdef FEAT_VISUAL
+ else if (STRNCMP(str, "BLOCK", 5) == 0)
+ y_current->y_type = MBLOCK;
+- #endif
+ else
+ y_current->y_type = MLINE;
+ /* get the block width; if it's missing we get a zero, which is OK */
+ str = skipwhite(skiptowhite(str));
+- #ifdef FEAT_VISUAL
+ y_current->y_width = getdigits(&str);
+- #else
+- (void)getdigits(&str);
+- #endif
+ }
+
+ while (!(eof = viminfo_readline(virp))
+--- 5656,5668 ----
+***************
+*** 5868,5878 ****
+ case MCHAR:
+ type = (char_u *)"CHAR";
+ break;
+- #ifdef FEAT_VISUAL
+ case MBLOCK:
+ type = (char_u *)"BLOCK";
+ break;
+- #endif
+ default:
+ sprintf((char *)IObuff, _("E574: Unknown register type %d"),
+ y_regs[i].y_type);
+--- 5770,5778 ----
+***************
+*** 5886,5898 ****
+ fprintf(fp, "\"%c", c);
+ if (c == execreg_lastc)
+ fprintf(fp, "@");
+! fprintf(fp, "\t%s\t%d\n", type,
+! #ifdef FEAT_VISUAL
+! (int)y_regs[i].y_width
+! #else
+! 0
+! #endif
+! );
+
+ /* If max_num_lines < 0, then we save ALL the lines in the register */
+ if (max_num_lines > 0 && num_lines > max_num_lines)
+--- 5786,5792 ----
+ fprintf(fp, "\"%c", c);
+ if (c == execreg_lastc)
+ fprintf(fp, "@");
+! fprintf(fp, "\t%s\t%d\n", type, (int)y_regs[i].y_width);
+
+ /* If max_num_lines < 0, then we save ALL the lines in the register */
+ if (max_num_lines > 0 && num_lines > max_num_lines)
+***************
+*** 6039,6048 ****
+ {
+ struct yankreg *old_y_previous, *old_y_current;
+ pos_T old_cursor;
+- #ifdef FEAT_VISUAL
+ pos_T old_visual;
+ int old_visual_mode;
+- #endif
+ colnr_T old_curswant;
+ int old_set_curswant;
+ pos_T old_op_start, old_op_end;
+--- 5933,5940 ----
+***************
+*** 6063,6072 ****
+ old_set_curswant = curwin->w_set_curswant;
+ old_op_start = curbuf->b_op_start;
+ old_op_end = curbuf->b_op_end;
+- #ifdef FEAT_VISUAL
+ old_visual = VIsual;
+ old_visual_mode = VIsual_mode;
+- #endif
+ clear_oparg(&oa);
+ oa.regname = (cbd == &clip_plus ? '+' : '*');
+ oa.op_type = OP_YANK;
+--- 5955,5962 ----
+***************
+*** 6084,6093 ****
+ curwin->w_set_curswant = old_set_curswant;
+ curbuf->b_op_start = old_op_start;
+ curbuf->b_op_end = old_op_end;
+- #ifdef FEAT_VISUAL
+ VIsual = old_visual;
+ VIsual_mode = old_visual_mode;
+- #endif
+ }
+ else
+ {
+--- 5974,5981 ----
+***************
+*** 6190,6196 ****
+ }
+
+
+- # if defined(FEAT_VISUAL) || defined(FEAT_EVAL)
+ /*
+ * If we have written to a clipboard register, send the text to the clipboard.
+ */
+--- 6078,6083 ----
+***************
+*** 6208,6214 ****
+ clip_gen_set_selection(&clip_plus);
+ }
+ }
+- # endif
+
+ #endif /* FEAT_CLIPBOARD || PROTO */
+
+--- 6095,6100 ----
+***************
+*** 6273,6282 ****
+
+ if (y_current->y_array != NULL)
+ {
+- #ifdef FEAT_VISUAL
+ if (reglen != NULL && y_current->y_type == MBLOCK)
+ *reglen = y_current->y_width;
+- #endif
+ return y_current->y_type;
+ }
+ return MAUTO;
+--- 6159,6166 ----
+***************
+*** 6454,6464 ****
+ get_yank_register(name, TRUE);
+ if (!y_append && !must_append)
+ free_yank_all();
+- #ifndef FEAT_VISUAL
+- /* Just in case - make sure we don't use MBLOCK */
+- if (yank_type == MBLOCK)
+- yank_type = MAUTO;
+- #endif
+ str_to_reg(y_current, yank_type, str, len, block_len);
+
+ # ifdef FEAT_CLIPBOARD
+--- 6338,6343 ----
+***************
+*** 6496,6504 ****
+ int append = FALSE; /* append to last line in register */
+ char_u *s;
+ char_u **pp;
+- #ifdef FEAT_VISUAL
+ long maxlen;
+- #endif
+
+ if (y_ptr->y_array == NULL) /* NULL means empty register */
+ y_ptr->y_size = 0;
+--- 6375,6381 ----
+***************
+*** 6539,6547 ****
+ pp[lnum] = y_ptr->y_array[lnum];
+ vim_free(y_ptr->y_array);
+ y_ptr->y_array = pp;
+- #ifdef FEAT_VISUAL
+ maxlen = 0;
+- #endif
+
+ /*
+ * Find the end of each line and save it into the array.
+--- 6416,6422 ----
+***************
+*** 6552,6561 ****
+ if (str[i] == '\n')
+ break;
+ i -= start; /* i is now length of line */
+- #ifdef FEAT_VISUAL
+ if (i > maxlen)
+ maxlen = i;
+- #endif
+ if (append)
+ {
+ --lnum;
+--- 6427,6434 ----
+***************
+*** 6585,6596 ****
+ }
+ y_ptr->y_type = type;
+ y_ptr->y_size = lnum;
+- # ifdef FEAT_VISUAL
+ if (type == MBLOCK)
+ y_ptr->y_width = (blocklen < 0 ? maxlen - 1 : blocklen);
+ else
+ y_ptr->y_width = 0;
+- # endif
+ }
+ #endif /* FEAT_CLIPBOARD || FEAT_EVAL || PROTO */
+
+--- 6458,6467 ----
+***************
+*** 6684,6695 ****
+ long word_count_cursor = 0;
+ int eol_size;
+ long last_check = 100000L;
+- #ifdef FEAT_VISUAL
+ long line_count_selected = 0;
+ pos_T min_pos, max_pos;
+ oparg_T oparg;
+ struct block_def bd;
+- #endif
+
+ /*
+ * Compute the length of the file in characters.
+--- 6555,6564 ----
+***************
+*** 6705,6711 ****
+ else
+ eol_size = 1;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (lt(VIsual, curwin->w_cursor))
+--- 6574,6579 ----
+***************
+*** 6749,6755 ****
+ }
+ line_count_selected = max_pos.lnum - min_pos.lnum + 1;
+ }
+- #endif
+
+ for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
+ {
+--- 6617,6622 ----
+***************
+*** 6762,6768 ****
+ last_check = byte_count + 100000L;
+ }
+
+- #ifdef FEAT_VISUAL
+ /* Do extra processing for VIsual mode. */
+ if (VIsual_active
+ && lnum >= min_pos.lnum && lnum <= max_pos.lnum)
+--- 6629,6634 ----
+***************
+*** 6773,6785 ****
+ switch (VIsual_mode)
+ {
+ case Ctrl_V:
+! # ifdef FEAT_VIRTUALEDIT
+ virtual_op = virtual_active();
+! # endif
+ block_prep(&oparg, &bd, lnum, 0);
+! # ifdef FEAT_VIRTUALEDIT
+ virtual_op = MAYBE;
+! # endif
+ s = bd.textstart;
+ len = (long)bd.textlen;
+ break;
+--- 6639,6651 ----
+ switch (VIsual_mode)
+ {
+ case Ctrl_V:
+! #ifdef FEAT_VIRTUALEDIT
+ virtual_op = virtual_active();
+! #endif
+ block_prep(&oparg, &bd, lnum, 0);
+! #ifdef FEAT_VIRTUALEDIT
+ virtual_op = MAYBE;
+! #endif
+ s = bd.textstart;
+ len = (long)bd.textlen;
+ break;
+***************
+*** 6811,6817 ****
+ }
+ }
+ else
+- #endif
+ {
+ /* In non-visual mode, check for the line the cursor is on */
+ if (lnum == curwin->w_cursor.lnum)
+--- 6677,6682 ----
+***************
+*** 6833,6839 ****
+ if (!curbuf->b_p_eol && curbuf->b_p_bin)
+ byte_count -= eol_size;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (VIsual_mode == Ctrl_V && curwin->w_curswant < MAXCOL)
+--- 6698,6703 ----
+***************
+*** 6864,6870 ****
+ byte_count_cursor, byte_count);
+ }
+ else
+- #endif
+ {
+ p = ml_get_curline();
+ validate_virtcol();
+--- 6728,6733 ----
+*** ../vim-7.4.211/src/option.c 2014-03-12 18:55:52.100906804 +0100
+--- src/option.c 2014-03-23 13:28:12.359168452 +0100
+***************
+*** 1629,1639 ****
+ #endif
+ SCRIPTID_INIT},
+ {"keymodel", "km", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+- #ifdef FEAT_VISUAL
+ (char_u *)&p_km, PV_NONE,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"keywordprg", "kp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_kp, PV_KP,
+--- 1629,1635 ----
+***************
+*** 2190,2208 ****
+ (char_u *)&p_secure, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"selection", "sel", P_STRING|P_VI_DEF,
+- #ifdef FEAT_VISUAL
+ (char_u *)&p_sel, PV_NONE,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ {(char_u *)"inclusive", (char_u *)0L}
+ SCRIPTID_INIT},
+ {"selectmode", "slm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+- #ifdef FEAT_VISUAL
+ (char_u *)&p_slm, PV_NONE,
+- #else
+- (char_u *)NULL, PV_NONE,
+- #endif
+ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ #ifdef FEAT_SESSION
+--- 2186,2196 ----
+***************
+*** 2979,2991 ****
+ static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
+ #endif
+ static char *(p_mousem_values[]) = {"extend", "popup", "popup_setpos", "mac", NULL};
+- #ifdef FEAT_VISUAL
+ static char *(p_sel_values[]) = {"inclusive", "exclusive", "old", NULL};
+ static char *(p_slm_values[]) = {"mouse", "key", "cmd", NULL};
+- #endif
+- #ifdef FEAT_VISUAL
+ static char *(p_km_values[]) = {"startsel", "stopsel", NULL};
+- #endif
+ #ifdef FEAT_BROWSE
+ static char *(p_bsdir_values[]) = {"current", "last", "buffer", NULL};
+ #endif
+--- 2967,2975 ----
+***************
+*** 6578,6584 ****
+ }
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /* 'selection' */
+ else if (varp == &p_sel)
+ {
+--- 6562,6567 ----
+***************
+*** 6593,6599 ****
+ if (check_opt_strings(p_slm, p_slm_values, TRUE) != OK)
+ errmsg = e_invarg;
+ }
+- #endif
+
+ #ifdef FEAT_BROWSE
+ /* 'browsedir' */
+--- 6576,6581 ----
+***************
+*** 6605,6611 ****
+ }
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /* 'keymodel' */
+ else if (varp == &p_km)
+ {
+--- 6587,6592 ----
+***************
+*** 6617,6623 ****
+ km_startsel = (vim_strchr(p_km, 'a') != NULL);
+ }
+ }
+- #endif
+
+ /* 'mousemodel' */
+ else if (varp == &p_mousem)
+--- 6598,6603 ----
+*** ../vim-7.4.211/src/os_msdos.c 2013-05-06 04:06:04.000000000 +0200
+--- src/os_msdos.c 2014-03-23 13:28:24.855168644 +0100
+***************
+*** 2270,2278 ****
+ default:
+ case 'L': type = MLINE; break;
+ case 'C': type = MCHAR; break;
+- #ifdef FEAT_VISUAL
+ case 'B': type = MBLOCK; break;
+- #endif
+ }
+ }
+
+--- 2270,2276 ----
+***************
+*** 2799,2807 ****
+ default:
+ case MLINE: clip_sel_type = "L"; break;
+ case MCHAR: clip_sel_type = "C"; break;
+- #ifdef FEAT_VISUAL
+ case MBLOCK: clip_sel_type = "B"; break;
+- #endif
+ }
+
+ movedata(
+--- 2797,2803 ----
+*** ../vim-7.4.211/src/os_qnx.c 2011-09-21 19:48:08.000000000 +0200
+--- src/os_qnx.c 2014-03-23 13:28:38.815168858 +0100
+***************
+*** 78,86 ****
+ default: /* fallthrough to line type */
+ case 'L': type = MLINE; break;
+ case 'C': type = MCHAR; break;
+- #ifdef FEAT_VISUAL
+ case 'B': type = MBLOCK; break;
+- #endif
+ }
+ is_type_set = TRUE;
+ }
+--- 78,84 ----
+***************
+*** 143,151 ****
+ default: /* fallthrough to MLINE */
+ case MLINE: *vim_clip = 'L'; break;
+ case MCHAR: *vim_clip = 'C'; break;
+- #ifdef FEAT_VISUAL
+ case MBLOCK: *vim_clip = 'B'; break;
+- #endif
+ }
+
+ vim_strncpy(text_clip, str, len);
+--- 141,147 ----
+*** ../vim-7.4.211/src/quickfix.c 2014-03-12 19:41:37.096948866 +0100
+--- src/quickfix.c 2014-03-23 13:28:50.907169043 +0100
+***************
+*** 2347,2355 ****
+ else
+ height = QF_WINHEIGHT;
+
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+--- 2347,2353 ----
+*** ../vim-7.4.211/src/regexp.c 2013-11-21 17:12:55.000000000 +0100
+--- src/regexp.c 2014-03-23 13:29:14.495169404 +0100
+***************
+*** 4179,4187 ****
+ - (*mb_head_off)(regline, reginput - 1), reg_buf);
+ return -1;
+ }
+-
+ #endif
+! #ifdef FEAT_VISUAL
+ static int reg_match_visual __ARGS((void));
+
+ /*
+--- 4179,4186 ----
+ - (*mb_head_off)(regline, reginput - 1), reg_buf);
+ return -1;
+ }
+ #endif
+!
+ static int reg_match_visual __ARGS((void));
+
+ /*
+***************
+*** 4258,4264 ****
+ }
+ return TRUE;
+ }
+- #endif
+
+ #define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
+
+--- 4257,4262 ----
+***************
+*** 4440,4448 ****
+ break;
+
+ case RE_VISUAL:
+- #ifdef FEAT_VISUAL
+ if (!reg_match_visual())
+- #endif
+ status = RA_NOMATCH;
+ break;
+
+--- 4438,4444 ----
+*** ../vim-7.4.211/src/regexp_nfa.c 2013-11-28 14:20:11.000000000 +0100
+--- src/regexp_nfa.c 2014-03-23 13:29:31.367169663 +0100
+***************
+*** 6403,6416 ****
+ break;
+
+ case NFA_VISUAL:
+- #ifdef FEAT_VISUAL
+ result = reg_match_visual();
+ if (result)
+ {
+ add_here = TRUE;
+ add_state = t->state->out;
+ }
+- #endif
+ break;
+
+ case NFA_MOPEN1:
+--- 6403,6414 ----
+*** ../vim-7.4.211/src/screen.c 2013-12-11 15:51:54.000000000 +0100
+--- src/screen.c 2014-03-23 13:32:10.787172106 +0100
+***************
+*** 446,453 ****
+ #endif
+ }
+
+- #if defined(FEAT_RUBY) || defined(FEAT_PERL) || defined(FEAT_VISUAL) || \
+- (defined(FEAT_CLIPBOARD) && defined(FEAT_X11)) || defined(PROTO)
+ /*
+ * update all windows that are editing the current buffer
+ */
+--- 446,451 ----
+***************
+*** 458,464 ****
+ redraw_curbuf_later(type);
+ update_screen(type);
+ }
+- #endif
+
+ /*
+ * update_screen()
+--- 456,461 ----
+***************
+*** 596,609 ****
+ && curwin->w_botfill == curwin->w_old_botfill
+ #endif
+ && curwin->w_topline == curwin->w_lines[0].wl_lnum)
+- #ifdef FEAT_VISUAL
+ || (type == INVERTED
+ && VIsual_active
+ && curwin->w_old_cursor_lnum == curwin->w_cursor.lnum
+ && curwin->w_old_visual_mode == VIsual_mode
+ && (curwin->w_valid & VALID_VIRTCOL)
+ && curwin->w_old_curswant == curwin->w_curswant)
+- #endif
+ ))
+ curwin->w_redr_type = type;
+
+--- 593,604 ----
+***************
+*** 1030,1039 ****
+ updating. 0 when no mid area updating. */
+ int bot_start = 999;/* first row of the bot area that needs
+ updating. 999 when no bot area updating */
+- #ifdef FEAT_VISUAL
+ int scrolled_down = FALSE; /* TRUE when scrolled down when
+ w_topline got smaller a bit */
+- #endif
+ #ifdef FEAT_SEARCH_EXTRA
+ matchitem_T *cur; /* points to the match list */
+ int top_to_mod = FALSE; /* redraw above mod_top */
+--- 1025,1032 ----
+***************
+*** 1354,1362 ****
+ /* Need to update rows that are new, stop at the
+ * first one that scrolled down. */
+ top_end = i;
+- #ifdef FEAT_VISUAL
+ scrolled_down = TRUE;
+- #endif
+
+ /* Move the entries that were scrolled, disable
+ * the entries for the lines to be redrawn. */
+--- 1347,1353 ----
+***************
+*** 1513,1519 ****
+ type = NOT_VALID;
+ }
+
+- #ifdef FEAT_VISUAL
+ /* check if we are updating or removing the inverted part */
+ if ((VIsual_active && buf == curwin->w_buffer)
+ || (wp->w_old_cursor_lnum != 0 && type != NOT_VALID))
+--- 1504,1509 ----
+***************
+*** 1708,1714 ****
+ wp->w_old_visual_lnum = 0;
+ wp->w_old_visual_col = 0;
+ }
+- #endif /* FEAT_VISUAL */
+
+ #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA)
+ /* reset got_int, otherwise regexp won't work */
+--- 1698,1703 ----
+***************
+*** 2670,2676 ****
+ * 6. set highlighting for the Visual area an other text.
+ * If all folded lines are in the Visual area, highlight the line.
+ */
+- #ifdef FEAT_VISUAL
+ if (VIsual_active && wp->w_buffer == curwin->w_buffer)
+ {
+ if (ltoreq(curwin->w_cursor, VIsual))
+--- 2659,2664 ----
+***************
+*** 2718,2724 ****
+ }
+ }
+ }
+- #endif
+
+ #ifdef FEAT_SYN_HL
+ /* Show 'cursorcolumn' in the fold line. */
+--- 2706,2711 ----
+***************
+*** 2876,2885 ****
+ int fromcol, tocol; /* start/end of inverting */
+ int fromcol_prev = -2; /* start of inverting after cursor */
+ int noinvcur = FALSE; /* don't invert the cursor */
+- #ifdef FEAT_VISUAL
+ pos_T *top, *bot;
+ int lnum_in_visual_area = FALSE;
+- #endif
+ pos_T pos;
+ long v;
+
+--- 2863,2870 ----
+***************
+*** 3090,3096 ****
+ */
+ fromcol = -10;
+ tocol = MAXCOL;
+- #ifdef FEAT_VISUAL
+ if (VIsual_active && wp->w_buffer == curwin->w_buffer)
+ {
+ /* Visual is after curwin->w_cursor */
+--- 3075,3080 ----
+***************
+*** 3183,3191 ****
+ /*
+ * handle 'incsearch' and ":s///c" highlighting
+ */
+! else
+! #endif /* FEAT_VISUAL */
+! if (highlight_match
+ && wp == curwin
+ && lnum >= curwin->w_cursor.lnum
+ && lnum <= curwin->w_cursor.lnum + search_match_lines)
+--- 3167,3173 ----
+ /*
+ * handle 'incsearch' and ":s///c" highlighting
+ */
+! else if (highlight_match
+ && wp == curwin
+ && lnum >= curwin->w_cursor.lnum
+ && lnum <= curwin->w_cursor.lnum + search_match_lines)
+***************
+*** 3324,3330 ****
+ mb_ptr_adv(ptr);
+ }
+
+- #if defined(FEAT_SYN_HL) || defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
+ /* When:
+ * - 'cuc' is set, or
+ * - 'colorcolumn' is set, or
+--- 3306,3311 ----
+***************
+*** 3333,3359 ****
+ * the end of the line may be before the start of the displayed part.
+ */
+ if (vcol < v && (
+! # ifdef FEAT_SYN_HL
+! wp->w_p_cuc
+! || draw_color_col
+! # if defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
+! ||
+! # endif
+! # endif
+! # ifdef FEAT_VIRTUALEDIT
+! virtual_active()
+! # ifdef FEAT_VISUAL
+! ||
+! # endif
+! # endif
+! # ifdef FEAT_VISUAL
+! (VIsual_active && wp->w_buffer == curwin->w_buffer)
+! # endif
+! ))
+ {
+ vcol = v;
+ }
+- #endif
+
+ /* Handle a character that's not completely on the screen: Put ptr at
+ * that character but skip the first few screen characters. */
+--- 3314,3329 ----
+ * the end of the line may be before the start of the displayed part.
+ */
+ if (vcol < v && (
+! #ifdef FEAT_SYN_HL
+! wp->w_p_cuc || draw_color_col ||
+! #endif
+! #ifdef FEAT_VIRTUALEDIT
+! virtual_active() ||
+! #endif
+! (VIsual_active && wp->w_buffer == curwin->w_buffer)))
+ {
+ vcol = v;
+ }
+
+ /* Handle a character that's not completely on the screen: Put ptr at
+ * that character but skip the first few screen characters. */
+***************
+*** 4500,4508 ****
+ && ((wp->w_p_list && lcs_eol > 0)
+ || ((fromcol >= 0 || fromcol_prev >= 0)
+ && tocol > vcol
+- #ifdef FEAT_VISUAL
+ && VIsual_mode != Ctrl_V
+- #endif
+ && (
+ # ifdef FEAT_RIGHTLEFT
+ wp->w_p_rl ? (col >= 0) :
+--- 4470,4476 ----
+***************
+*** 4854,4864 ****
+ #endif
+ if (lcs_eol == lcs_eol_one
+ && ((area_attr != 0 && vcol == fromcol
+- #ifdef FEAT_VISUAL
+ && (VIsual_mode != Ctrl_V
+ || lnum == VIsual.lnum
+ || lnum == curwin->w_cursor.lnum)
+- #endif
+ && c == NUL)
+ #ifdef FEAT_SEARCH_EXTRA
+ /* highlight 'hlsearch' match at end of line */
+--- 4822,4830 ----
+***************
+*** 9659,9668 ****
+ do_mode = ((p_smd && msg_silent == 0)
+ && ((State & INSERT)
+ || restart_edit
+! #ifdef FEAT_VISUAL
+! || VIsual_active
+! #endif
+! ));
+ if (do_mode || Recording)
+ {
+ /*
+--- 9625,9631 ----
+ do_mode = ((p_smd && msg_silent == 0)
+ && ((State & INSERT)
+ || restart_edit
+! || VIsual_active));
+ if (do_mode || Recording)
+ {
+ /*
+***************
+*** 9790,9796 ****
+ if ((State & INSERT) && p_paste)
+ MSG_PUTS_ATTR(_(" (paste)"), attr);
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ char *p;
+--- 9753,9758 ----
+***************
+*** 9810,9816 ****
+ }
+ MSG_PUTS_ATTR(_(p), attr);
+ }
+- #endif
+ MSG_PUTS_ATTR(" --", attr);
+ }
+
+--- 9772,9777 ----
+***************
+*** 9839,9849 ****
+ msg_clr_cmdline();
+
+ #ifdef FEAT_CMDL_INFO
+- # ifdef FEAT_VISUAL
+ /* In Visual mode the size of the selected area must be redrawn. */
+ if (VIsual_active)
+ clear_showcmd();
+- # endif
+
+ /* If the last window has no status line, the ruler is after the mode
+ * message and must be redrawn */
+--- 9800,9808 ----
+*** ../vim-7.4.211/src/search.c 2014-01-14 21:31:30.000000000 +0100
+--- src/search.c 2014-03-23 13:34:46.351174489 +0100
+***************
+*** 506,512 ****
+ #endif
+
+ /*
+! * lowest level search function.
+ * Search for 'count'th occurrence of pattern 'pat' in direction 'dir'.
+ * Start at position 'pos' and return the found position in 'pos'.
+ *
+--- 506,512 ----
+ #endif
+
+ /*
+! * Lowest level search function.
+ * Search for 'count'th occurrence of pattern 'pat' in direction 'dir'.
+ * Start at position 'pos' and return the found position in 'pos'.
+ *
+***************
+*** 3198,3204 ****
+ cls_bigword = bigword;
+ clearpos(&start_pos);
+
+- #ifdef FEAT_VISUAL
+ /* Correct cursor when 'selection' is exclusive */
+ if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
+ dec_cursor();
+--- 3198,3203 ----
+***************
+*** 3208,3214 ****
+ * character, select the word and/or white space under the cursor.
+ */
+ if (!VIsual_active || equalpos(curwin->w_cursor, VIsual))
+- #endif
+ {
+ /*
+ * Go to start of current word or white space.
+--- 3207,3212 ----
+***************
+*** 3245,3251 ****
+ include_white = TRUE;
+ }
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ /* should do something when inclusive == FALSE ! */
+--- 3243,3248 ----
+***************
+*** 3253,3259 ****
+ redraw_curbuf_later(INVERTED); /* update the inversion */
+ }
+ else
+- #endif
+ {
+ oap->start = start_pos;
+ oap->motion_type = MCHAR;
+--- 3250,3255 ----
+***************
+*** 3267,3273 ****
+ while (count > 0)
+ {
+ inclusive = TRUE;
+- #ifdef FEAT_VISUAL
+ if (VIsual_active && lt(curwin->w_cursor, VIsual))
+ {
+ /*
+--- 3263,3268 ----
+***************
+*** 3288,3294 ****
+ }
+ }
+ else
+- #endif
+ {
+ /*
+ * Move cursor forward one word and/or white area.
+--- 3283,3288 ----
+***************
+*** 3334,3351 ****
+ back_in_line();
+ if (cls() == 0 && curwin->w_cursor.col > 0)
+ {
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ VIsual = curwin->w_cursor;
+ else
+- #endif
+ oap->start = curwin->w_cursor;
+ }
+ }
+ curwin->w_cursor = pos; /* put cursor back at end */
+ }
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (*p_sel == 'e' && inclusive && ltoreq(VIsual, curwin->w_cursor))
+--- 3328,3342 ----
+***************
+*** 3357,3363 ****
+ }
+ }
+ else
+- #endif
+ oap->inclusive = inclusive;
+
+ return OK;
+--- 3348,3353 ----
+***************
+*** 3384,3390 ****
+ pos = start_pos;
+ findsent(FORWARD, 1L); /* Find start of next sentence. */
+
+- #ifdef FEAT_VISUAL
+ /*
+ * When the Visual area is bigger than one character: Extend it.
+ */
+--- 3374,3379 ----
+***************
+*** 3471,3477 ****
+ }
+ return OK;
+ }
+- #endif
+
+ /*
+ * If the cursor started on a blank, check if it is just before the start
+--- 3460,3465 ----
+***************
+*** 3521,3527 ****
+ find_first_blank(&start_pos);
+ }
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ /* Avoid getting stuck with "is" on a single space before a sentence. */
+--- 3509,3514 ----
+***************
+*** 3534,3540 ****
+ redraw_curbuf_later(INVERTED); /* update the inversion */
+ }
+ else
+- #endif
+ {
+ /* include a newline after the sentence, if there is one */
+ if (incl(&curwin->w_cursor) == -1)
+--- 3521,3526 ----
+***************
+*** 3574,3582 ****
+ /*
+ * If we start on '(', '{', ')', '}', etc., use the whole block inclusive.
+ */
+- #ifdef FEAT_VISUAL
+ if (!VIsual_active || equalpos(VIsual, curwin->w_cursor))
+- #endif
+ {
+ setpcmark();
+ if (what == '{') /* ignore indent */
+--- 3560,3566 ----
+***************
+*** 3587,3593 ****
+ /* cursor on '(' or '{', move cursor just after it */
+ ++curwin->w_cursor.col;
+ }
+- #ifdef FEAT_VISUAL
+ else if (lt(VIsual, curwin->w_cursor))
+ {
+ old_start = VIsual;
+--- 3571,3576 ----
+***************
+*** 3595,3601 ****
+ }
+ else
+ old_end = VIsual;
+- #endif
+
+ /*
+ * Search backwards for unclosed '(', '{', etc..
+--- 3578,3583 ----
+***************
+*** 3641,3647 ****
+ if (decl(&curwin->w_cursor) != 0)
+ break;
+ }
+- #ifdef FEAT_VISUAL
+ /*
+ * In Visual mode, when the resulting area is not bigger than what we
+ * started with, extend it to the next block, and then exclude again.
+--- 3623,3628 ----
+***************
+*** 3666,3676 ****
+ curwin->w_cursor = *end_pos;
+ }
+ else
+- #endif
+ break;
+ }
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (*p_sel == 'e')
+--- 3647,3655 ----
+***************
+*** 3683,3689 ****
+ showmode();
+ }
+ else
+- #endif
+ {
+ oap->start = start_pos;
+ oap->motion_type = MCHAR;
+--- 3662,3667 ----
+***************
+*** 3807,3823 ****
+ old_pos = curwin->w_cursor;
+ old_end = curwin->w_cursor; /* remember where we started */
+ old_start = old_end;
+- #ifdef FEAT_VISUAL
+ if (!VIsual_active || *p_sel == 'e')
+- #endif
+ decl(&old_end); /* old_end is inclusive */
+
+ /*
+ * If we start on "<aaa>" select that block.
+ */
+- #ifdef FEAT_VISUAL
+ if (!VIsual_active || equalpos(VIsual, curwin->w_cursor))
+- #endif
+ {
+ setpcmark();
+
+--- 3785,3797 ----
+***************
+*** 3843,3849 ****
+ old_end = curwin->w_cursor;
+ }
+ }
+- #ifdef FEAT_VISUAL
+ else if (lt(VIsual, curwin->w_cursor))
+ {
+ old_start = VIsual;
+--- 3817,3822 ----
+***************
+*** 3851,3857 ****
+ }
+ else
+ old_end = VIsual;
+- #endif
+
+ again:
+ /*
+--- 3824,3829 ----
+***************
+*** 3951,3957 ****
+ }
+ }
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ /* If the end is before the start there is no text between tags, select
+--- 3923,3928 ----
+***************
+*** 3966,3972 ****
+ showmode();
+ }
+ else
+- #endif
+ {
+ oap->start = start_pos;
+ oap->motion_type = MCHAR;
+--- 3937,3942 ----
+***************
+*** 4010,4016 ****
+
+ start_lnum = curwin->w_cursor.lnum;
+
+- #ifdef FEAT_VISUAL
+ /*
+ * When visual area is more than one line: extend it.
+ */
+--- 3980,3985 ----
+***************
+*** 4064,4070 ****
+ curwin->w_cursor.col = 0;
+ return retval;
+ }
+- #endif
+
+ /*
+ * First move back to the start_lnum of the paragraph or white lines
+--- 4033,4038 ----
+***************
+*** 4136,4142 ****
+ while (start_lnum > 1 && linewhite(start_lnum - 1))
+ --start_lnum;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ /* Problem: when doing "Vipipip" nothing happens in a single white
+--- 4104,4109 ----
+***************
+*** 4149,4155 ****
+ showmode();
+ }
+ else
+- #endif
+ {
+ oap->start.lnum = start_lnum;
+ oap->start.col = 0;
+--- 4116,4121 ----
+***************
+*** 4247,4253 ****
+ int col_end;
+ int col_start = curwin->w_cursor.col;
+ int inclusive = FALSE;
+- #ifdef FEAT_VISUAL
+ int vis_empty = TRUE; /* Visual selection <= 1 char */
+ int vis_bef_curs = FALSE; /* Visual starts before cursor */
+ int inside_quotes = FALSE; /* Looks like "i'" done before */
+--- 4213,4218 ----
+***************
+*** 4331,4347 ****
+ }
+ }
+ else
+- #endif
+
+! if (line[col_start] == quotechar
+! #ifdef FEAT_VISUAL
+! || !vis_empty
+! #endif
+! )
+ {
+ int first_col = col_start;
+
+- #ifdef FEAT_VISUAL
+ if (!vis_empty)
+ {
+ if (vis_bef_curs)
+--- 4296,4306 ----
+ }
+ }
+ else
+
+! if (line[col_start] == quotechar || !vis_empty)
+ {
+ int first_col = col_start;
+
+ if (!vis_empty)
+ {
+ if (vis_bef_curs)
+***************
+*** 4349,4355 ****
+ else
+ first_col = find_prev_quote(line, col_start, quotechar, NULL);
+ }
+! #endif
+ /* The cursor is on a quote, we don't know if it's the opening or
+ * closing quote. Search from the start of the line to find out.
+ * Also do this when there is a Visual area, a' may leave the cursor
+--- 4308,4314 ----
+ else
+ first_col = find_prev_quote(line, col_start, quotechar, NULL);
+ }
+!
+ /* The cursor is on a quote, we don't know if it's the opening or
+ * closing quote. Search from the start of the line to find out.
+ * Also do this when there is a Visual area, a' may leave the cursor
+***************
+*** 4406,4419 ****
+
+ /* Set start position. After vi" another i" must include the ".
+ * For v2i" include the quotes. */
+! if (!include && count < 2
+! #ifdef FEAT_VISUAL
+! && (vis_empty || !inside_quotes)
+! #endif
+! )
+ ++col_start;
+ curwin->w_cursor.col = col_start;
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ /* Set the start of the Visual area when the Visual area was empty, we
+--- 4365,4373 ----
+
+ /* Set start position. After vi" another i" must include the ".
+ * For v2i" include the quotes. */
+! if (!include && count < 2 && (vis_empty || !inside_quotes))
+ ++col_start;
+ curwin->w_cursor.col = col_start;
+ if (VIsual_active)
+ {
+ /* Set the start of the Visual area when the Visual area was empty, we
+***************
+*** 4433,4439 ****
+ }
+ }
+ else
+- #endif
+ {
+ oap->start = curwin->w_cursor;
+ oap->motion_type = MCHAR;
+--- 4387,4392 ----
+***************
+*** 4441,4454 ****
+
+ /* Set end position. */
+ curwin->w_cursor.col = col_end;
+! if ((include || count > 1
+! #ifdef FEAT_VISUAL
+! /* After vi" another i" must include the ". */
+ || (!vis_empty && inside_quotes)
+- #endif
+ ) && inc_cursor() == 2)
+ inclusive = TRUE;
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ if (vis_empty || vis_bef_curs)
+--- 4394,4403 ----
+
+ /* Set end position. */
+ curwin->w_cursor.col = col_end;
+! if ((include || count > 1 /* After vi" another i" must include the ". */
+ || (!vis_empty && inside_quotes)
+ ) && inc_cursor() == 2)
+ inclusive = TRUE;
+ if (VIsual_active)
+ {
+ if (vis_empty || vis_bef_curs)
+***************
+*** 4480,4486 ****
+ }
+ }
+ else
+- #endif
+ {
+ /* Set inclusive and other oap's flags. */
+ oap->inclusive = inclusive;
+--- 4429,4434 ----
+***************
+*** 4491,4497 ****
+
+ #endif /* FEAT_TEXTOBJ */
+
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+ static int is_one_char __ARGS((char_u *pattern));
+
+ /*
+--- 4439,4444 ----
+***************
+*** 4690,4696 ****
+ vim_regfree(regmatch.regprog);
+ return result;
+ }
+- #endif /* FEAT_VISUAL */
+
+ #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
+ || defined(PROTO)
+--- 4637,4642 ----
+*** ../vim-7.4.211/src/spell.c 2014-03-08 16:13:39.123462070 +0100
+--- src/spell.c 2014-03-23 13:35:15.195174931 +0100
+***************
+*** 10191,10197 ****
+ if (no_spell_checking(curwin))
+ return;
+
+- #ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ /* Use the Visually selected text as the bad word. But reject
+--- 10191,10196 ----
+***************
+*** 10209,10218 ****
+ ++badlen;
+ end_visual_mode();
+ }
+! else
+! #endif
+! /* Find the start of the badly spelled word. */
+! if (spell_move_to(curwin, FORWARD, TRUE, TRUE, NULL) == 0
+ || curwin->w_cursor.col > prev_cursor.col)
+ {
+ /* No bad word or it starts after the cursor: use the word under the
+--- 10208,10215 ----
+ ++badlen;
+ end_visual_mode();
+ }
+! /* Find the start of the badly spelled word. */
+! else if (spell_move_to(curwin, FORWARD, TRUE, TRUE, NULL) == 0
+ || curwin->w_cursor.col > prev_cursor.col)
+ {
+ /* No bad word or it starts after the cursor: use the word under the
+*** ../vim-7.4.211/src/syntax.c 2013-11-28 18:53:47.000000000 +0100
+--- src/syntax.c 2014-03-23 13:35:30.379175164 +0100
+***************
+*** 6837,6846 ****
+ CENT("SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue",
+ "SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue"),
+ #endif
+- #ifdef FEAT_VISUAL
+ CENT("Visual term=reverse",
+ "Visual term=reverse guibg=LightGrey"),
+- #endif
+ #ifdef FEAT_DIFF
+ CENT("DiffAdd term=bold ctermbg=LightBlue",
+ "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue"),
+--- 6837,6844 ----
+***************
+*** 6927,6936 ****
+ CENT("SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan",
+ "SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan"),
+ #endif
+- #ifdef FEAT_VISUAL
+ CENT("Visual term=reverse",
+ "Visual term=reverse guibg=DarkGrey"),
+- #endif
+ #ifdef FEAT_DIFF
+ CENT("DiffAdd term=bold ctermbg=DarkBlue",
+ "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue"),
+--- 6925,6932 ----
+*** ../vim-7.4.211/src/term.c 2014-03-19 14:01:53.153903819 +0100
+--- src/term.c 2014-03-23 13:35:43.519175365 +0100
+***************
+*** 3456,3467 ****
+ return;
+ }
+
+- # ifdef FEAT_VISUAL
+ if (VIsual_active)
+ checkfor = MOUSE_VISUAL;
+! else
+! # endif
+! if (State == HITRETURN || State == ASKMORE || State == SETWSIZE)
+ checkfor = MOUSE_RETURN;
+ else if (State & INSERT)
+ checkfor = MOUSE_INSERT;
+--- 3456,3464 ----
+ return;
+ }
+
+ if (VIsual_active)
+ checkfor = MOUSE_VISUAL;
+! else if (State == HITRETURN || State == ASKMORE || State == SETWSIZE)
+ checkfor = MOUSE_RETURN;
+ else if (State & INSERT)
+ checkfor = MOUSE_INSERT;
+*** ../vim-7.4.211/src/ui.c 2013-07-13 20:57:08.000000000 +0200
+--- src/ui.c 2014-03-23 13:36:15.459175855 +0100
+***************
+*** 2610,2622 ****
+ if (on_sep_line)
+ return IN_SEP_LINE;
+ #endif
+- #ifdef FEAT_VISUAL
+ if (flags & MOUSE_MAY_STOP_VIS)
+ {
+ end_visual_mode();
+ redraw_curbuf_later(INVERTED); /* delete the inversion */
+ }
+- #endif
+ #if defined(FEAT_CMDWIN) && defined(FEAT_CLIPBOARD)
+ /* Continue a modeless selection in another window. */
+ if (cmdwin_type != 0 && row < W_WINROW(curwin))
+--- 2610,2620 ----
+***************
+*** 2686,2717 ****
+ }
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /* Before jumping to another buffer, or moving the cursor for a left
+ * click, stop Visual mode. */
+ if (VIsual_active
+ && (wp->w_buffer != curwin->w_buffer
+ || (!on_status_line
+! # ifdef FEAT_VERTSPLIT
+ && !on_sep_line
+! # endif
+! # ifdef FEAT_FOLDING
+ && (
+! # ifdef FEAT_RIGHTLEFT
+ wp->w_p_rl ? col < W_WIDTH(wp) - wp->w_p_fdc :
+! # endif
+ col >= wp->w_p_fdc
+! # ifdef FEAT_CMDWIN
+ + (cmdwin_type == 0 && wp == curwin ? 0 : 1)
+- # endif
+- )
+ # endif
+ && (flags & MOUSE_MAY_STOP_VIS))))
+ {
+ end_visual_mode();
+ redraw_curbuf_later(INVERTED); /* delete the inversion */
+ }
+- #endif
+ #ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0 && wp != curwin)
+ {
+--- 2684,2713 ----
+ }
+ #endif
+
+ /* Before jumping to another buffer, or moving the cursor for a left
+ * click, stop Visual mode. */
+ if (VIsual_active
+ && (wp->w_buffer != curwin->w_buffer
+ || (!on_status_line
+! #ifdef FEAT_VERTSPLIT
+ && !on_sep_line
+! #endif
+! #ifdef FEAT_FOLDING
+ && (
+! # ifdef FEAT_RIGHTLEFT
+ wp->w_p_rl ? col < W_WIDTH(wp) - wp->w_p_fdc :
+! # endif
+ col >= wp->w_p_fdc
+! # ifdef FEAT_CMDWIN
+ + (cmdwin_type == 0 && wp == curwin ? 0 : 1)
+ # endif
++ )
++ #endif
+ && (flags & MOUSE_MAY_STOP_VIS))))
+ {
+ end_visual_mode();
+ redraw_curbuf_later(INVERTED); /* delete the inversion */
+ }
+ #ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0 && wp != curwin)
+ {
+***************
+*** 2801,2814 ****
+ #endif
+ else /* keep_window_focus must be TRUE */
+ {
+- #ifdef FEAT_VISUAL
+ /* before moving the cursor for a left click, stop Visual mode */
+ if (flags & MOUSE_MAY_STOP_VIS)
+ {
+ end_visual_mode();
+ redraw_curbuf_later(INVERTED); /* delete the inversion */
+ }
+- #endif
+
+ #if defined(FEAT_CMDWIN) && defined(FEAT_CLIPBOARD)
+ /* Continue a modeless selection in another window. */
+--- 2797,2808 ----
+***************
+*** 2933,2939 ****
+ if (mouse_comp_pos(curwin, &row, &col, &curwin->w_cursor.lnum))
+ mouse_past_bottom = TRUE;
+
+- #ifdef FEAT_VISUAL
+ /* Start Visual mode before coladvance(), for when 'sel' != "old" */
+ if ((flags & MOUSE_MAY_VIS) && !VIsual_active)
+ {
+--- 2927,2932 ----
+***************
+*** 2947,2953 ****
+ if (p_smd && msg_silent == 0)
+ redraw_cmdline = TRUE; /* show visual mode later */
+ }
+- #endif
+
+ curwin->w_curswant = col;
+ curwin->w_set_curswant = FALSE; /* May still have been TRUE */
+--- 2940,2945 ----
+*** ../vim-7.4.211/src/undo.c 2014-03-12 16:51:35.060792541 +0100
+--- src/undo.c 2014-03-23 13:37:05.435176620 +0100
+***************
+*** 532,540 ****
+
+ /* save named marks and Visual marks for undo */
+ mch_memmove(uhp->uh_namedm, curbuf->b_namedm, sizeof(pos_T) * NMARKS);
+- #ifdef FEAT_VISUAL
+ uhp->uh_visual = curbuf->b_visual;
+- #endif
+
+ curbuf->b_u_newhead = uhp;
+ if (curbuf->b_u_oldhead == NULL)
+--- 532,538 ----
+***************
+*** 1014,1029 ****
+ /* Assume NMARKS will stay the same. */
+ for (i = 0; i < NMARKS; ++i)
+ serialize_pos(uhp->uh_namedm[i], fp);
+- #ifdef FEAT_VISUAL
+ serialize_visualinfo(&uhp->uh_visual, fp);
+- #else
+- {
+- visualinfo_T info;
+-
+- memset(&info, 0, sizeof(visualinfo_T));
+- serialize_visualinfo(&info, fp);
+- }
+- #endif
+ put_time(fp, uhp->uh_time);
+
+ /* Optional fields. */
+--- 1012,1018 ----
+***************
+*** 1082,1095 ****
+ uhp->uh_flags = get2c(fp);
+ for (i = 0; i < NMARKS; ++i)
+ unserialize_pos(&uhp->uh_namedm[i], fp);
+- #ifdef FEAT_VISUAL
+ unserialize_visualinfo(&uhp->uh_visual, fp);
+- #else
+- {
+- visualinfo_T info;
+- unserialize_visualinfo(&info, fp);
+- }
+- #endif
+ uhp->uh_time = get8ctime(fp);
+
+ /* Optional fields. */
+--- 1071,1077 ----
+***************
+*** 2406,2414 ****
+ int old_flags;
+ int new_flags;
+ pos_T namedm[NMARKS];
+- #ifdef FEAT_VISUAL
+ visualinfo_T visualinfo;
+- #endif
+ int empty_buffer; /* buffer became empty */
+ u_header_T *curhead = curbuf->b_u_curhead;
+
+--- 2388,2394 ----
+***************
+*** 2430,2438 ****
+ * save marks before undo/redo
+ */
+ mch_memmove(namedm, curbuf->b_namedm, sizeof(pos_T) * NMARKS);
+- #ifdef FEAT_VISUAL
+ visualinfo = curbuf->b_visual;
+- #endif
+ curbuf->b_op_start.lnum = curbuf->b_ml.ml_line_count;
+ curbuf->b_op_start.col = 0;
+ curbuf->b_op_end.lnum = 0;
+--- 2410,2416 ----
+***************
+*** 2602,2614 ****
+ curbuf->b_namedm[i] = curhead->uh_namedm[i];
+ curhead->uh_namedm[i] = namedm[i];
+ }
+- #ifdef FEAT_VISUAL
+ if (curhead->uh_visual.vi_start.lnum != 0)
+ {
+ curbuf->b_visual = curhead->uh_visual;
+ curhead->uh_visual = visualinfo;
+ }
+- #endif
+
+ /*
+ * If the cursor is only off by one line, put it at the same position as
+--- 2580,2590 ----
+*** ../vim-7.4.211/src/version.c 2014-03-22 13:29:57.693846167 +0100
+--- src/version.c 2014-03-23 15:01:49.719254526 +0100
+***************
+*** 642,656 ****
+ #else
+ "-virtualedit",
+ #endif
+- #ifdef FEAT_VISUAL
+ "+visual",
+! # ifdef FEAT_VISUALEXTRA
+ "+visualextra",
+- # else
+- "-visualextra",
+- # endif
+ #else
+! "-visual",
+ #endif
+ #ifdef FEAT_VIMINFO
+ "+viminfo",
+--- 642,652 ----
+ #else
+ "-virtualedit",
+ #endif
+ "+visual",
+! #ifdef FEAT_VISUALEXTRA
+ "+visualextra",
+ #else
+! "-visualextra",
+ #endif
+ #ifdef FEAT_VIMINFO
+ "+viminfo",
+*** ../vim-7.4.211/src/window.c 2014-01-10 15:53:09.000000000 +0100
+--- src/window.c 2014-03-23 13:38:17.767177729 +0100
+***************
+*** 130,138 ****
+ case Ctrl_S:
+ case 's':
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ #ifdef FEAT_QUICKFIX
+ /* When splitting the quickfix window open a new buffer in it,
+ * don't replicate the quickfix buffer. */
+--- 130,136 ----
+***************
+*** 150,158 ****
+ case Ctrl_V:
+ case 'v':
+ CHECK_CMDWIN
+- # ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- # endif
+ # ifdef FEAT_QUICKFIX
+ /* When splitting the quickfix window open a new buffer in it,
+ * don't replicate the quickfix buffer. */
+--- 148,154 ----
+***************
+*** 170,178 ****
+ case Ctrl_HAT:
+ case '^':
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ STRCPY(cbuf, "split #");
+ if (Prenum)
+ vim_snprintf((char *)cbuf + 7, sizeof(cbuf) - 7,
+--- 166,172 ----
+***************
+*** 184,192 ****
+ case Ctrl_N:
+ case 'n':
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ #ifdef FEAT_QUICKFIX
+ newwindow:
+ #endif
+--- 178,184 ----
+***************
+*** 206,223 ****
+ /* quit current window */
+ case Ctrl_Q:
+ case 'q':
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ do_cmdline_cmd((char_u *)"quit");
+ break;
+
+ /* close current window */
+ case Ctrl_C:
+ case 'c':
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ do_cmdline_cmd((char_u *)"close");
+ break;
+
+--- 198,211 ----
+***************
+*** 226,234 ****
+ case Ctrl_Z:
+ case 'z':
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ do_cmdline_cmd((char_u *)"pclose");
+ break;
+
+--- 214,220 ----
+***************
+*** 248,256 ****
+ case Ctrl_O:
+ case 'o':
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ do_cmdline_cmd((char_u *)"only");
+ break;
+
+--- 234,240 ----
+***************
+*** 399,416 ****
+ case Ctrl_R:
+ case 'r':
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ win_rotate(FALSE, (int)Prenum1); /* downwards */
+ break;
+
+ /* rotate windows upwards */
+ case 'R':
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ win_rotate(TRUE, (int)Prenum1); /* upwards */
+ break;
+
+--- 383,396 ----
+***************
+*** 499,507 ****
+ case ']':
+ case Ctrl_RSB:
+ CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ if (Prenum)
+ postponed_split = Prenum;
+ else
+--- 479,485 ----
+***************
+*** 612,620 ****
+ #endif
+ case ']':
+ case Ctrl_RSB:
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ if (Prenum)
+ postponed_split = Prenum;
+ else
+--- 590,596 ----
+***************
+*** 3726,3734 ****
+ {
+ tabpage_T *tp = curtab;
+
+- #ifdef FEAT_VISUAL
+ reset_VIsual_and_resel(); /* stop Visual mode */
+- #endif
+ #ifdef FEAT_AUTOCMD
+ if (trigger_leave_autocmds)
+ {
+--- 3702,3708 ----
+***************
+*** 4029,4040 ****
+ return;
+ #endif
+
+- #ifdef FEAT_VISUAL
+ if (wp->w_buffer != curbuf)
+ reset_VIsual_and_resel();
+ else if (VIsual_active)
+ wp->w_cursor = curwin->w_cursor;
+- #endif
+
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+--- 4003,4012 ----
+***************
+*** 6037,6043 ****
+ long count;
+ linenr_T *file_lnum;
+ {
+- # ifdef FEAT_VISUAL
+ if (VIsual_active)
+ {
+ int len;
+--- 6009,6014 ----
+***************
+*** 6048,6054 ****
+ return find_file_name_in_path(ptr, len,
+ FNAME_MESS|FNAME_EXP|FNAME_REL, count, curbuf->b_ffname);
+ }
+- # endif
+ return file_name_at_cursor(FNAME_MESS|FNAME_HYP|FNAME_EXP|FNAME_REL, count,
+ file_lnum);
+
+--- 6019,6024 ----
+*** ../vim-7.4.211/src/feature.h 2014-03-12 17:56:42.960852421 +0100
+--- src/feature.h 2014-03-23 13:39:02.003178407 +0100
+***************
+*** 214,220 ****
+ * +visual Visual mode - now always included.
+ * +visualextra Extra features for Visual mode (mostly block operators).
+ */
+- #define FEAT_VISUAL
+ #ifdef FEAT_NORMAL
+ # define FEAT_VISUALEXTRA
+ #endif
+--- 214,219 ----
+***************
+*** 1138,1150 ****
+ #ifdef FEAT_GUI
+ # ifndef FEAT_CLIPBOARD
+ # define FEAT_CLIPBOARD
+- # ifndef FEAT_VISUAL
+- # define FEAT_VISUAL
+- # endif
+ # endif
+ #endif
+
+! #if defined(FEAT_NORMAL) && defined(FEAT_VISUAL) \
+ && (defined(UNIX) || defined(VMS)) \
+ && defined(WANT_X11) && defined(HAVE_X11)
+ # define FEAT_XCLIPBOARD
+--- 1137,1146 ----
+ #ifdef FEAT_GUI
+ # ifndef FEAT_CLIPBOARD
+ # define FEAT_CLIPBOARD
+ # endif
+ #endif
+
+! #if defined(FEAT_NORMAL) \
+ && (defined(UNIX) || defined(VMS)) \
+ && defined(WANT_X11) && defined(HAVE_X11)
+ # define FEAT_XCLIPBOARD
+*** ../vim-7.4.211/src/globals.h 2014-02-22 23:03:48.712901208 +0100
+--- src/globals.h 2014-03-23 13:39:17.407178643 +0100
+***************
+*** 662,668 ****
+ /* set to TRUE when "-s" commandline argument
+ * used for ex */
+
+- #ifdef FEAT_VISUAL
+ EXTERN pos_T VIsual; /* start position of active Visual selection */
+ EXTERN int VIsual_active INIT(= FALSE);
+ /* whether Visual mode is active */
+--- 662,667 ----
+***************
+*** 677,683 ****
+
+ EXTERN int redo_VIsual_busy INIT(= FALSE);
+ /* TRUE when redoing Visual */
+- #endif
+
+ #ifdef FEAT_MOUSE
+ /*
+--- 676,681 ----
+***************
+*** 1178,1188 ****
+ EXTERN int fill_diff INIT(= '-');
+ #endif
+
+- #ifdef FEAT_VISUAL
+ /* Whether 'keymodel' contains "stopsel" and "startsel". */
+ EXTERN int km_stopsel INIT(= FALSE);
+ EXTERN int km_startsel INIT(= FALSE);
+- #endif
+
+ #ifdef FEAT_CMDWIN
+ EXTERN int cedit_key INIT(= -1); /* key value of 'cedit' option */
+--- 1176,1184 ----
+*** ../vim-7.4.211/src/option.h 2014-03-12 18:55:52.104906804 +0100
+--- src/option.h 2014-03-23 13:39:30.991178851 +0100
+***************
+*** 572,580 ****
+ EXTERN char_u *p_isp; /* 'isprint' */
+ EXTERN int p_js; /* 'joinspaces' */
+ EXTERN char_u *p_kp; /* 'keywordprg' */
+- #ifdef FEAT_VISUAL
+ EXTERN char_u *p_km; /* 'keymodel' */
+- #endif
+ #ifdef FEAT_LANGMAP
+ EXTERN char_u *p_langmap; /* 'langmap'*/
+ #endif
+--- 572,578 ----
+***************
+*** 681,690 ****
+ #endif
+ EXTERN char_u *p_sections; /* 'sections' */
+ EXTERN int p_secure; /* 'secure' */
+- #ifdef FEAT_VISUAL
+ EXTERN char_u *p_sel; /* 'selection' */
+ EXTERN char_u *p_slm; /* 'selectmode' */
+- #endif
+ #ifdef FEAT_SESSION
+ EXTERN char_u *p_ssop; /* 'sessionoptions' */
+ EXTERN unsigned ssop_flags;
+--- 679,686 ----
+*** ../vim-7.4.211/src/os_win32.h 2013-09-25 19:13:32.000000000 +0200
+--- src/os_win32.h 2014-03-23 13:39:49.819179139 +0100
+***************
+*** 68,74 ****
+ #endif
+
+ #define USE_FNAME_CASE /* adjust case of file names */
+! #if !defined(FEAT_CLIPBOARD) && defined(FEAT_VISUAL) && defined(FEAT_MOUSE)
+ # define FEAT_CLIPBOARD /* include clipboard support */
+ #endif
+ #if defined(__DATE__) && defined(__TIME__)
+--- 68,74 ----
+ #endif
+
+ #define USE_FNAME_CASE /* adjust case of file names */
+! #if !defined(FEAT_CLIPBOARD) && defined(FEAT_MOUSE)
+ # define FEAT_CLIPBOARD /* include clipboard support */
+ #endif
+ #if defined(__DATE__) && defined(__TIME__)
+*** ../vim-7.4.211/src/structs.h 2014-03-12 18:55:52.104906804 +0100
+--- src/structs.h 2014-03-23 13:40:19.175179589 +0100
+***************
+*** 346,354 ****
+ #endif
+ int uh_flags; /* see below */
+ pos_T uh_namedm[NMARKS]; /* marks before undo/after redo */
+- #ifdef FEAT_VISUAL
+ visualinfo_T uh_visual; /* Visual areas before undo/after redo */
+- #endif
+ time_t uh_time; /* timestamp when the change was made */
+ long uh_save_nr; /* set when the file was saved after the
+ changes in this block */
+--- 346,352 ----
+***************
+*** 1406,1417 ****
+
+ pos_T b_namedm[NMARKS]; /* current named marks (mark.c) */
+
+- #ifdef FEAT_VISUAL
+ /* These variables are set when VIsual_active becomes FALSE */
+ visualinfo_T b_visual;
+! # ifdef FEAT_EVAL
+ int b_visual_mode_eval; /* b_visual.vi_mode for visualmode() */
+- # endif
+ #endif
+
+ pos_T b_last_cursor; /* cursor position when last unloading this
+--- 1404,1413 ----
+
+ pos_T b_namedm[NMARKS]; /* current named marks (mark.c) */
+
+ /* These variables are set when VIsual_active becomes FALSE */
+ visualinfo_T b_visual;
+! #ifdef FEAT_EVAL
+ int b_visual_mode_eval; /* b_visual.vi_mode for visualmode() */
+ #endif
+
+ pos_T b_last_cursor; /* cursor position when last unloading this
+***************
+*** 1980,1986 ****
+ time through cursupdate() to the
+ current virtual column */
+
+- #ifdef FEAT_VISUAL
+ /*
+ * the next six are used to update the visual part
+ */
+--- 1976,1981 ----
+***************
+*** 1991,1997 ****
+ linenr_T w_old_visual_lnum; /* last known start of visual part */
+ colnr_T w_old_visual_col; /* last known start of visual part */
+ colnr_T w_old_curswant; /* last known value of Curswant */
+- #endif
+
+ /*
+ * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
+--- 1986,1991 ----
+***************
+*** 2293,2302 ****
+ (inclusive) */
+ int empty; /* op_start and op_end the same (only used by
+ do_change()) */
+- #ifdef FEAT_VISUAL
+ int is_VIsual; /* operator on Visual area */
+ int block_mode; /* current operator is Visual block mode */
+- #endif
+ colnr_T start_vcol; /* start col for block mode operator */
+ colnr_T end_vcol; /* end col for block mode operator */
+ #ifdef FEAT_AUTOCMD
+--- 2287,2294 ----
+*** ../vim-7.4.211/src/version.c 2014-03-22 13:29:57.693846167 +0100
+--- src/version.c 2014-03-23 15:01:49.719254526 +0100
+***************
+*** 740,741 ****
+--- 736,739 ----
+ { /* Add new patch number below this line */
++ /**/
++ 212,
+ /**/
+
+--
+If all you have is a hammer, everything looks like a nail.
+When your hammer is C++, everything begins to look like a thumb.
+ -- Steve Hoflich, comp.lang.c++
+
+ /// 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 ///