diff --git a/src/edit.c b/src/edit.c
index 78f5cd7..4cbfc77 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -235,7 +235,6 @@
     conceal_check_cursor_line();
 #endif
 
-#ifdef FEAT_MOUSE
     /*
      * When doing a paste with the middle mouse button, Insstart is set to
      * where the paste started.
@@ -243,7 +242,6 @@
     if (where_paste_started.lnum != 0)
 	Insstart = where_paste_started;
     else
-#endif
     {
 	Insstart = curwin->w_cursor;
 	if (startln)
@@ -336,7 +334,6 @@
      */
     if (restart_edit != 0 && stuff_empty())
     {
-#ifdef FEAT_MOUSE
 	/*
 	 * After a paste we consider text typed to be part of the insert for
 	 * the pasted text. You can backspace over the pasted text too.
@@ -344,7 +341,6 @@
 	if (where_paste_started.lnum)
 	    arrow_used = FALSE;
 	else
-#endif
 	    arrow_used = TRUE;
 	restart_edit = 0;
 
@@ -381,9 +377,7 @@
     /* Need to save the line for undo before inserting the first char. */
     ins_need_undo = TRUE;
 
-#ifdef FEAT_MOUSE
     where_paste_started.lnum = 0;
-#endif
 #ifdef FEAT_CINDENT
     can_cindent = TRUE;
 #endif
@@ -980,7 +974,6 @@
 	    inserted_space = FALSE;
 	    break;
 
-#ifdef FEAT_MOUSE
 	case K_LEFTMOUSE:   /* mouse keys */
 	case K_LEFTMOUSE_NM:
 	case K_LEFTDRAG:
@@ -1017,7 +1010,7 @@
 	case K_MOUSERIGHT: /* Scroll wheel right */
 	    ins_mousescroll(MSCR_RIGHT);
 	    break;
-#endif
+
 	case K_PS:
 	    bracketed_paste(PASTE_INSERT, FALSE, NULL);
 	    if (cmdchar == K_PS)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 962c6c4..c43c883 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -815,9 +815,7 @@
 #ifdef FEAT_GUI
     {"test_scrollbar",	3, 3, FEARG_2,	  f_test_scrollbar},
 #endif
-#ifdef FEAT_MOUSE
     {"test_setmouse",	2, 2, 0,	  f_test_setmouse},
-#endif
     {"test_settime",	1, 1, FEARG_1,	  f_test_settime},
 #ifdef FEAT_TIMERS
     {"timer_info",	0, 1, FEARG_1,	  f_timer_info},
@@ -3433,9 +3431,7 @@
 	"mksession",
 #endif
 	"modify_fname",
-#ifdef FEAT_MOUSE
 	"mouse",
-#endif
 #ifdef FEAT_MOUSESHAPE
 	"mouseshape",
 #endif
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 838bd84..5816f3f 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -795,11 +795,9 @@
     int		save_msg_scroll = msg_scroll;
     int		save_State = State;	/* remember State when called */
     int		some_key_typed = FALSE;	/* one of the keys was typed */
-#ifdef FEAT_MOUSE
     /* mouse drag and release events are ignored, unless they are
      * preceded with a mouse down event */
     int		ignore_drag_release = TRUE;
-#endif
 #ifdef FEAT_EVAL
     int		break_ctrl_c = FALSE;
 #endif
@@ -1856,7 +1854,6 @@
 	    break;
 #endif
 
-#ifdef FEAT_MOUSE
 	case K_MIDDLEDRAG:
 	case K_MIDDLERELEASE:
 		goto cmdline_not_changed;	/* Ignore mouse */
@@ -1961,8 +1958,6 @@
 	case K_MOUSEMOVE:
 		goto cmdline_not_changed;
 
-#endif	/* FEAT_MOUSE */
-
 #ifdef FEAT_GUI
 	case K_LEFTMOUSE_NM:	/* mousefocus click, ignored */
 	case K_LEFTRELEASE_NM:
@@ -2195,9 +2190,7 @@
 
 	case Ctrl_V:
 	case Ctrl_Q:
-#ifdef FEAT_MOUSE
 		ignore_drag_release = TRUE;
-#endif
 		putcmdline('^', TRUE);
 		c = get_literal();	    /* get next (two) character(s) */
 		do_abbr = FALSE;	    /* don't do abbreviation now */
@@ -2213,13 +2206,11 @@
 
 #ifdef FEAT_DIGRAPHS
 	case Ctrl_K:
-#ifdef FEAT_MOUSE
 		ignore_drag_release = TRUE;
-#endif
 		putcmdline('?', TRUE);
-#ifdef USE_ON_FLY_SCROLL
+# ifdef USE_ON_FLY_SCROLL
 		dont_scroll = TRUE;	    /* disallow scrolling here */
-#endif
+# endif
 		c = get_digraph(TRUE);
 		extra_char = NUL;
 		if (c != NUL)
@@ -2227,7 +2218,7 @@
 
 		redrawcmd();
 		goto cmdline_not_changed;
-#endif /* FEAT_DIGRAPHS */
+#endif // FEAT_DIGRAPHS
 
 #ifdef FEAT_RIGHTLEFT
 	case Ctrl__:	    /* CTRL-_: switch language mode */
diff --git a/src/feature.h b/src/feature.h
index b2ba162..04bb30c 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -964,12 +964,12 @@
  *			console mouse handling.
  * +mouse_urxvt		Unix only: Include code for for urxvt mosue handling.
  * +mouse		Any mouse support (any of the above enabled).
+ *			Always included, since either FEAT_MOUSE_XTERM or
+ *			DOS_MOUSE is defined.
  */
 /* OS/2 and Amiga console have no mouse support */
-#if !defined(AMIGA)
-# ifdef FEAT_NORMAL
-#  define FEAT_MOUSE_XTERM
-# endif
+#if defined(UNIX) || defined(VMS)
+# define FEAT_MOUSE_XTERM
 # ifdef FEAT_BIG
 #  define FEAT_MOUSE_NET
 # endif
@@ -979,12 +979,12 @@
 # ifdef FEAT_BIG
 #  define FEAT_MOUSE_URXVT
 # endif
-# if defined(FEAT_NORMAL) && defined(MSWIN)
-#  define DOS_MOUSE
-# endif
-# if defined(FEAT_NORMAL) && defined(__QNX__)
-#  define FEAT_MOUSE_PTERM
-# endif
+#endif
+#if defined(MSWIN)
+# define DOS_MOUSE
+#endif
+#if defined(__QNX__)
+# define FEAT_MOUSE_PTERM
 #endif
 
 /*
@@ -1002,28 +1002,11 @@
 # define FEAT_SYSMOUSE
 #endif
 
-/* urxvt is a small variation of mouse_xterm, and shares its code */
+// urxvt is a small variation of mouse_xterm, and shares its code
 #if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
 # define FEAT_MOUSE_XTERM
 #endif
 
-/* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
-#if !defined(FEAT_MOUSE_TTY) \
-	&& (defined(FEAT_MOUSE_XTERM) \
-	    || defined(FEAT_MOUSE_NET) \
-	    || defined(FEAT_MOUSE_DEC) \
-	    || defined(DOS_MOUSE) \
-	    || defined(FEAT_MOUSE_GPM) \
-	    || defined(FEAT_MOUSE_JSB) \
-	    || defined(FEAT_MOUSE_PTERM) \
-	    || defined(FEAT_SYSMOUSE) \
-	    || defined(FEAT_MOUSE_URXVT))
-# define FEAT_MOUSE_TTY		/* include non-GUI mouse support */
-#endif
-#if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
-# define FEAT_MOUSE		/* include generic mouse support */
-#endif
-
 /*
  * +clipboard		Clipboard support.  Always used for the GUI.
  * +xterm_clipboard	Unix only: Include code for handling the clipboard
@@ -1093,7 +1076,7 @@
  *			to check if mouse dragging can be used and if term
  *			codes can be obtained.
  */
-#if (defined(FEAT_NORMAL) || defined(FEAT_MOUSE)) && defined(HAVE_TGETENT)
+#if defined(HAVE_TGETENT)
 # define FEAT_TERMRESPONSE
 #endif
 
diff --git a/src/getchar.c b/src/getchar.c
index 475bfca..03a67be 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1325,10 +1325,8 @@
 
 static int old_char = -1;	/* character put back by vungetc() */
 static int old_mod_mask;	/* mod_mask for ungotten character */
-#ifdef FEAT_MOUSE
 static int old_mouse_row;	/* mouse_row related to old_char */
 static int old_mouse_col;	/* mouse_col related to old_char */
-#endif
 
 /*
  * Save all three kinds of typeahead, so that the user must type at a prompt.
@@ -1559,10 +1557,8 @@
 	c = old_char;
 	old_char = -1;
 	mod_mask = old_mod_mask;
-#ifdef FEAT_MOUSE
 	mouse_row = old_mouse_row;
 	mouse_col = old_mouse_col;
-#endif
     }
     else
     {
@@ -2007,7 +2003,6 @@
 	rettv->v_type = VAR_STRING;
 	rettv->vval.v_string = vim_strsave(temp);
 
-#ifdef FEAT_MOUSE
 	if (is_mouse_key(n))
 	{
 	    int		row = mouse_row;
@@ -2025,11 +2020,11 @@
 		if (win == NULL)
 		    return;
 		(void)mouse_comp_pos(win, &row, &col, &lnum, NULL);
-# ifdef FEAT_TEXT_PROP
+#ifdef FEAT_TEXT_PROP
 		if (WIN_IS_POPUP(win))
 		    winnr = 0;
 		else
-# endif
+#endif
 		    for (wp = firstwin; wp != win && wp != NULL;
 							       wp = wp->w_next)
 			++winnr;
@@ -2039,7 +2034,6 @@
 		set_vim_var_nr(VV_MOUSE_COL, col + 1);
 	    }
 	}
-#endif
     }
 }
 
@@ -2636,10 +2630,8 @@
 {
     old_char = c;
     old_mod_mask = mod_mask;
-#ifdef FEAT_MOUSE
     old_mouse_row = mouse_row;
     old_mouse_col = mouse_col;
-#endif
 }
 
 /*
diff --git a/src/globals.h b/src/globals.h
index 014fca2..3f883d1 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -470,7 +470,6 @@
 EXTERN buf_T	*au_pending_free_buf INIT(= NULL);
 EXTERN win_T	*au_pending_free_win INIT(= NULL);
 
-#ifdef FEAT_MOUSE
 /*
  * Mouse coordinates, set by check_termcode()
  */
@@ -480,15 +479,15 @@
 EXTERN int	mouse_past_eol INIT(= FALSE);	// mouse right of line
 EXTERN int	mouse_dragging INIT(= 0);	// extending Visual area with
 						// mouse dragging
-# if defined(FEAT_MOUSE_DEC)
+#if defined(FEAT_MOUSE_DEC)
 /*
  * When the DEC mouse has been pressed but not yet released we enable
  * automatic queries for the mouse position.
  */
 EXTERN int	WantQueryMouse INIT(= FALSE);
-# endif
+#endif
 
-# ifdef FEAT_GUI
+#ifdef FEAT_GUI
 // When the window layout is about to be changed, need_mouse_correct is set,
 // so that gui_mouse_correct() is called afterwards, to correct the mouse
 // pointer when focus-follow-mouse is being used.
@@ -496,10 +495,10 @@
 
 // When double clicking, topline must be the same
 EXTERN linenr_T gui_prev_topline INIT(= 0);
-#  ifdef FEAT_DIFF
+# ifdef FEAT_DIFF
 EXTERN int	gui_prev_topfill INIT(= 0);
-#  endif
 # endif
+#endif
 
 # ifdef FEAT_MOUSESHAPE
 EXTERN int	drag_status_line INIT(= FALSE);	// dragging the status line
@@ -508,7 +507,6 @@
 EXTERN int	drag_sep_line INIT(= FALSE);	// dragging vert separator
 # endif
 
-#endif
 
 #ifdef FEAT_DIFF
 // Value set from 'diffopt'.
@@ -785,13 +783,11 @@
 EXTERN linenr_T	resel_VIsual_line_count;	// number of lines
 EXTERN colnr_T	resel_VIsual_vcol;		// nr of cols or end col
 
-#ifdef FEAT_MOUSE
 /*
  * When pasting text with the middle mouse button in visual mode with
  * restart_edit set, remember where it started so we can set Insstart.
  */
 EXTERN pos_T	where_paste_started;
-#endif
 
 /*
  * This flag is used to make auto-indent work right on lines where only a
diff --git a/src/message.c b/src/message.c
index fddb28e..8af5d7b 100644
--- a/src/message.c
+++ b/src/message.c
@@ -1200,7 +1200,6 @@
 #ifdef FEAT_GUI
 				|| c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR
 #endif
-#ifdef FEAT_MOUSE
 				|| c == K_LEFTDRAG   || c == K_LEFTRELEASE
 				|| c == K_MIDDLEDRAG || c == K_MIDDLERELEASE
 				|| c == K_RIGHTDRAG  || c == K_RIGHTRELEASE
@@ -1214,19 +1213,15 @@
 					|| c == K_RIGHTMOUSE
 					|| c == K_X1MOUSE
 					|| c == K_X2MOUSE))
-#endif
 				);
 	ui_breakcheck();
-#ifdef FEAT_MOUSE
 	/*
 	 * Avoid that the mouse-up event causes visual mode to start.
 	 */
 	if (c == K_LEFTMOUSE || c == K_MIDDLEMOUSE || c == K_RIGHTMOUSE
 					  || c == K_X1MOUSE || c == K_X2MOUSE)
 	    (void)jump_to_mouse(MOUSE_SETPOS, NULL, 0);
-	else
-#endif
-	    if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C)
+	else if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C)
 	{
 	    /* Put the character back in the typeahead buffer.  Don't use the
 	     * stuff buffer, because lmaps wouldn't work. */
diff --git a/src/misc1.c b/src/misc1.c
index d359ffd..0e18255 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -847,9 +847,7 @@
 	    n = TO_SPECIAL(buf[1], buf[2]);
 	    if (buf[1] == KS_MODIFIER
 		    || n == K_IGNORE
-#ifdef FEAT_MOUSE
 		    || (is_mouse_key(n) && n != K_LEFTMOUSE)
-#endif
 #ifdef FEAT_GUI
 		    || n == K_VER_SCROLLBAR
 		    || n == K_HOR_SCROLLBAR
@@ -929,14 +927,12 @@
 	    }
 	    n /= 10;
 	}
-#ifdef FEAT_MOUSE
 	else if (mouse_used != NULL && c == K_LEFTMOUSE)
 	{
 	    *mouse_used = TRUE;
 	    n = mouse_row + 1;
 	    break;
 	}
-#endif
 	else if (n == 0 && c == ':' && colon)
 	{
 	    stuffcharReadbuff(':');
diff --git a/src/mouse.c b/src/mouse.c
index 498ff04..b71ef37 100644
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -13,8 +13,6 @@
 
 #include "vim.h"
 
-#if defined(FEAT_MOUSE) || defined(PROTO)
-
 /*
  * Get class of a character for selection: same class means same word.
  * 0: blank
@@ -1258,20 +1256,17 @@
     return (int)KE_IGNORE;	    // not recognized, ignore it
 }
 
-# ifdef FEAT_MOUSE_TTY
-#  define HMT_NORMAL	1
-#  define HMT_NETTERM	2
-#  define HMT_DEC	4
-#  define HMT_JSBTERM	8
-#  define HMT_PTERM	16
-#  define HMT_URXVT	32
-#  define HMT_GPM	64
-#  define HMT_SGR	128
-#  define HMT_SGR_REL	256
+# define HMT_NORMAL	1
+# define HMT_NETTERM	2
+# define HMT_DEC	4
+# define HMT_JSBTERM	8
+# define HMT_PTERM	16
+# define HMT_URXVT	32
+# define HMT_GPM	64
+# define HMT_SGR	128
+# define HMT_SGR_REL	256
 static int has_mouse_termcode = 0;
-# endif
 
-# if (!defined(UNIX) || defined(FEAT_MOUSE_TTY)) || defined(PROTO)
     void
 set_mouse_termcode(
     int		n,	// KS_MOUSE, KS_NETTERM_MOUSE or KS_DEC_MOUSE
@@ -1282,7 +1277,6 @@
     name[0] = n;
     name[1] = KE_FILLER;
     add_termcode(name, s, FALSE);
-#  ifdef FEAT_MOUSE_TTY
 #   ifdef FEAT_MOUSE_JSB
     if (n == KS_JSBTERM_MOUSE)
 	has_mouse_termcode |= HMT_JSBTERM;
@@ -1319,12 +1313,9 @@
 	has_mouse_termcode |= HMT_SGR_REL;
     else
 	has_mouse_termcode |= HMT_NORMAL;
-#  endif
 }
-# endif
 
-# if ((defined(UNIX) || defined(VMS)) \
-	&& defined(FEAT_MOUSE_TTY)) || defined(PROTO)
+# if defined(UNIX) || defined(VMS) || defined(PROTO)
     void
 del_mouse_termcode(
     int		n)	// KS_MOUSE, KS_NETTERM_MOUSE or KS_DEC_MOUSE
@@ -1334,7 +1325,6 @@
     name[0] = n;
     name[1] = KE_FILLER;
     del_termcode(name);
-#  ifdef FEAT_MOUSE_TTY
 #   ifdef FEAT_MOUSE_JSB
     if (n == KS_JSBTERM_MOUSE)
 	has_mouse_termcode &= ~HMT_JSBTERM;
@@ -1371,7 +1361,6 @@
 	has_mouse_termcode &= ~HMT_SGR_REL;
     else
 	has_mouse_termcode &= ~HMT_NORMAL;
-#  endif
 }
 # endif
 
@@ -1381,15 +1370,13 @@
     void
 setmouse(void)
 {
-# ifdef FEAT_MOUSE_TTY
     int	    checkfor;
-# endif
 
 # ifdef FEAT_MOUSESHAPE
     update_mouseshape(-1);
 # endif
 
-# ifdef FEAT_MOUSE_TTY // Should be outside proc, but may break MOUSESHAPE
+    // Should be outside proc, but may break MOUSESHAPE
 #  ifdef FEAT_GUI
     // In the GUI the mouse is always enabled.
     if (gui.in_use)
@@ -1423,7 +1410,6 @@
 	mch_setmouse(TRUE);
     else
 	mch_setmouse(FALSE);
-# endif
 }
 
 /*
@@ -2289,7 +2275,7 @@
 #   endif
 	   )
 	{
-#   if defined(UNIX) && defined(FEAT_MOUSE_TTY)
+#   if defined(UNIX)
 	    if (use_xterm_mouse() > 1 && mouse_code >= 0x80)
 		// mouse-move event, using MOUSE_DRAG works
 		mouse_code = MOUSE_DRAG;
@@ -2314,7 +2300,7 @@
 	}
 #   endif
 
-#   if defined(UNIX) && defined(FEAT_MOUSE_TTY)
+#   if defined(UNIX)
 	else if (use_xterm_mouse() > 1)
 	{
 	    if (mouse_code & MOUSE_DRAG_XTERM)
@@ -2810,10 +2796,8 @@
 
     return 0;
 }
-#endif // FEAT_MOUSE
 
 // Functions also used for popup windows.
-#if defined(FEAT_MOUSE) || defined(FEAT_TEXT_PROP) || defined(PROTO)
 
 /*
  * Compute the buffer line position from the screen position "rowp" / "colp" in
@@ -3017,15 +3001,3 @@
     return (int)(ptr - line);
 }
 #endif
-
-#else // FEAT_MOUSE
-
-/*
- * Dummy implementation of setmouse() to avoid lots of #ifdefs.
- */
-    void
-setmouse(void)
-{
-}
-
-#endif // FEAT_MOUSE
diff --git a/src/move.c b/src/move.c
index 223ed54..97f5ac1 100644
--- a/src/move.c
+++ b/src/move.c
@@ -190,9 +190,7 @@
     int		check_topline = FALSE;
     int		check_botline = FALSE;
     long        *so_ptr = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
-#ifdef FEAT_MOUSE
     int		save_so = *so_ptr;
-#endif
 
     /* If there is no valid screen and when the window height is zero just use
      * the cursor line. */
@@ -209,11 +207,9 @@
     if (curwin->w_valid & VALID_TOPLINE)
 	return;
 
-#ifdef FEAT_MOUSE
     /* When dragging with the mouse, don't scroll that quickly */
     if (mouse_dragging > 0)
 	*so_ptr = mouse_dragging - 1;
-#endif
 
     old_topline = curwin->w_topline;
 #ifdef FEAT_DIFF
@@ -418,9 +414,7 @@
 	    validate_cursor();
     }
 
-#ifdef FEAT_MOUSE
     *so_ptr = save_so;
-#endif
 }
 
 /*
@@ -1751,10 +1745,8 @@
     linenr_T	new_topline;
     int		off = get_scrolloff_value();
 
-#ifdef FEAT_MOUSE
     if (mouse_dragging > 0)
 	off = mouse_dragging - 1;
-#endif
 
     /*
      * Decrease topline until:
@@ -2004,11 +1996,7 @@
 	/* Stop when scrolled nothing or at least "min_scroll", found "extra"
 	 * context for 'scrolloff' and counted all lines below the window. */
 	if ((((scrolled <= 0 || scrolled >= min_scroll)
-			&& extra >= (
-#ifdef FEAT_MOUSE
-			    mouse_dragging > 0 ? mouse_dragging - 1 :
-#endif
-			    so))
+		    && extra >= (mouse_dragging > 0 ? mouse_dragging - 1 : so))
 		    || boff.lnum + 1 > curbuf->b_ml.ml_line_count)
 		&& loff.lnum <= curwin->w_botline
 #ifdef FEAT_DIFF
@@ -2050,11 +2038,8 @@
 	    used += boff.height;
 	    if (used > curwin->w_height)
 		break;
-	    if (extra < (
-#ifdef FEAT_MOUSE
-			mouse_dragging > 0 ? mouse_dragging - 1 :
-#endif
-			so) || scrolled < min_scroll)
+	    if (extra < ( mouse_dragging > 0 ? mouse_dragging - 1 : so)
+		    || scrolled < min_scroll)
 	    {
 		extra += boff.height;
 		if (boff.lnum >= curwin->w_botline
@@ -2230,13 +2215,11 @@
      */
     above_wanted = so;
     below_wanted = so;
-#ifdef FEAT_MOUSE
     if (mouse_dragging > 0)
     {
 	above_wanted = mouse_dragging - 1;
 	below_wanted = mouse_dragging - 1;
     }
-#endif
     if (curwin->w_topline == 1)
     {
 	above_wanted = 0;
@@ -2246,10 +2229,7 @@
     }
     validate_botline();
     if (curwin->w_botline == curbuf->b_ml.ml_line_count + 1
-#ifdef FEAT_MOUSE
-	    && mouse_dragging == 0
-#endif
-	    )
+	    && mouse_dragging == 0)
     {
 	below_wanted = 0;
 	max_off = (curwin->w_height - 1) / 2;
diff --git a/src/normal.c b/src/normal.c
index 50f7b31..87754eb 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -303,7 +303,6 @@
 
     /* pound sign */
     {POUND,	nv_ident,	0,			0},
-#ifdef FEAT_MOUSE
     {K_MOUSEUP, nv_mousescroll,	0,			MSCR_UP},
     {K_MOUSEDOWN, nv_mousescroll, 0,			MSCR_DOWN},
     {K_MOUSELEFT, nv_mousescroll, 0,			MSCR_LEFT},
@@ -326,7 +325,6 @@
     {K_X2MOUSE, nv_mouse,	0,			0},
     {K_X2DRAG, nv_mouse,	0,			0},
     {K_X2RELEASE, nv_mouse,	0,			0},
-#endif
     {K_IGNORE,	nv_ignore,	NV_KEEPREG,		0},
     {K_NOP,	nv_nop,		0,			0},
     {K_INS,	nv_edit,	0,			0},
@@ -1319,10 +1317,8 @@
 #endif
 
     VIsual_active = FALSE;
-#ifdef FEAT_MOUSE
     setmouse();
     mouse_dragging = 0;
-#endif
 
     /* Save the current VIsual area for '< and '> marks, and "gv" */
     curbuf->b_visual.vi_mode = VIsual_mode;
@@ -1849,14 +1845,13 @@
     int		old_len;
     int		extra_len;
     int		overflow;
-#if defined(FEAT_MOUSE)
     int		i;
     static int	ignore[] =
     {
-# ifdef FEAT_GUI
+#ifdef FEAT_GUI
 	K_VER_SCROLLBAR, K_HOR_SCROLLBAR,
 	K_LEFTMOUSE_NM, K_LEFTRELEASE_NM,
-# endif
+#endif
 	K_IGNORE, K_PS,
 	K_LEFTMOUSE, K_LEFTDRAG, K_LEFTRELEASE, K_MOUSEMOVE,
 	K_MIDDLEMOUSE, K_MIDDLEDRAG, K_MIDDLERELEASE,
@@ -1866,7 +1861,6 @@
 	K_CURSORHOLD,
 	0
     };
-#endif
 
     if (!p_sc || msg_silent != 0)
 	return FALSE;
@@ -1877,13 +1871,11 @@
 	showcmd_visual = FALSE;
     }
 
-#if defined(FEAT_MOUSE)
     /* Ignore keys that are scrollbar updates and mouse clicks */
     if (IS_SPECIAL(c))
 	for (i = 0; ignore[i] != 0; ++i)
 	    if (ignore[i] == c)
 		return FALSE;
-#endif
 
     p = transchar(c);
     if (*p == ' ')
@@ -4625,7 +4617,6 @@
 	nv_cursormark(cap, cap->nchar == '\'', pos);
     }
 
-#ifdef FEAT_MOUSE
     /*
      * [ or ] followed by a middle mouse click: put selected text with
      * indent adjustment.  Any other button just does as usual.
@@ -4636,7 +4627,6 @@
 		       (cap->cmdchar == ']') ? FORWARD : BACKWARD,
 		       cap->count1, PUT_FIXINDENT);
     }
-#endif /* FEAT_MOUSE */
 
 #ifdef FEAT_FOLDING
     /*
@@ -6220,7 +6210,6 @@
 	nv_gd(oap, cap->nchar, (int)cap->count0);
 	break;
 
-#ifdef FEAT_MOUSE
     /*
      * g<*Mouse> : <C-*mouse>
      */
@@ -6243,7 +6232,6 @@
 	mod_mask = MOD_MASK_CTRL;
 	(void)do_mouse(oap, cap->nchar, BACKWARD, cap->count1, 0);
 	break;
-#endif
 
     case K_IGNORE:
 	break;
diff --git a/src/ops.c b/src/ops.c
index a008a9d..6a9fbba 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -4369,10 +4369,8 @@
 	    if (!gui_yank)
 	    {
 		VIsual_active = FALSE;
-#ifdef FEAT_MOUSE
 		setmouse();
 		mouse_dragging = 0;
-#endif
 		may_clear_cmdline();
 		if ((oap->op_type == OP_YANK
 			    || oap->op_type == OP_COLON
diff --git a/src/option.c b/src/option.c
index 898068b..d27c73c 100644
--- a/src/option.c
+++ b/src/option.c
@@ -4976,9 +4976,7 @@
      * outputting a few things that the terminal doesn't understand, but the
      * screen will be cleared later, so this is OK.
      */
-#ifdef FEAT_MOUSE_TTY
-    mch_setmouse(FALSE);	    /* switch mouse off */
-#endif
+    mch_setmouse(FALSE);	    // switch mouse off
 #ifdef FEAT_TITLE
     mch_restore_title(SAVE_RESTORE_BOTH);    /* restore window titles */
 #endif
diff --git a/src/option.h b/src/option.h
index aaa9443..254ca6a 100644
--- a/src/option.h
+++ b/src/option.h
@@ -979,7 +979,7 @@
 # define TBIS_GIANT		0x20
 #endif
 EXTERN long	p_ttyscroll;	// 'ttyscroll'
-#if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS))
+#if defined(UNIX) || defined(VMS)
 EXTERN char_u	*p_ttym;	// 'ttymouse'
 EXTERN unsigned ttym_flags;
 # define TTYM_XTERM		0x01
diff --git a/src/optiondefs.h b/src/optiondefs.h
index 47f17ed..b557771 100644
--- a/src/optiondefs.h
+++ b/src/optiondefs.h
@@ -2655,7 +2655,7 @@
 			    (char_u *)&p_tf, PV_NONE,
 			    {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
     {"ttymouse",    "ttym", P_STRING|P_NODEFAULT|P_NO_MKRC|P_VI_DEF,
-#if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS))
+#if defined(UNIX) || defined(VMS)
 			    (char_u *)&p_ttym, PV_NONE,
 #else
 			    (char_u *)NULL, PV_NONE,
diff --git a/src/optionstr.c b/src/optionstr.c
index a5b5b55..7b83aed 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -47,7 +47,7 @@
 #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK)
 static char *(p_tbis_values[]) = {"tiny", "small", "medium", "large", "huge", "giant", NULL};
 #endif
-#if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS))
+#if defined(UNIX) || defined(VMS)
 static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
 #endif
 static char *(p_ve_values[]) = {"block", "insert", "all", "onemore", NULL};
@@ -110,7 +110,7 @@
     (void)opt_strings_flags(p_dy, p_dy_values, &dy_flags, TRUE);
     (void)opt_strings_flags(p_tc, p_tc_values, &tc_flags, FALSE);
     (void)opt_strings_flags(p_ve, p_ve_values, &ve_flags, TRUE);
-#if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS))
+#if defined(UNIX) || defined(VMS)
     (void)opt_strings_flags(p_ttym, p_ttym_values, &ttym_flags, FALSE);
 #endif
 #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_MSWIN)
@@ -1588,7 +1588,7 @@
     }
 #endif
 
-#if defined(FEAT_MOUSE_TTY) && (defined(UNIX) || defined(VMS))
+#if defined(UNIX) || defined(VMS)
     // 'ttymouse'
     else if (varp == &p_ttym)
     {
@@ -2254,12 +2254,7 @@
 #endif
 	else if (varp == &p_mouse) // 'mouse'
 	{
-#ifdef FEAT_MOUSE
 	    p = (char_u *)MOUSE_ALL;
-#else
-	    if (*p_mouse != NUL)
-		errmsg = N_("E538: No mouse support");
-#endif
 	}
 #if defined(FEAT_GUI)
 	else if (varp == &p_go) // 'guioptions'
@@ -2389,20 +2384,16 @@
 #endif
     }
 
-#ifdef FEAT_MOUSE
     if (varp == &p_mouse)
     {
-# ifdef FEAT_MOUSE_TTY
 	if (*p_mouse == NUL)
 	    mch_setmouse(FALSE);    // switch mouse off
 	else
-# endif
 	    setmouse();		    // in case 'mouse' changed
     }
-#endif
 
     if (curwin->w_curswant != MAXCOL
-		     && (get_option_flags(opt_idx) & (P_CURSWANT | P_RALL)) != 0)
+		   && (get_option_flags(opt_idx) & (P_CURSWANT | P_RALL)) != 0)
 	curwin->w_set_curswant = TRUE;
 
 #ifdef FEAT_GUI
diff --git a/src/os_unix.c b/src/os_unix.c
index 54989af..e518bb9 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2282,7 +2282,6 @@
 }
 #endif
 
-#if defined(FEAT_MOUSE_TTY) || defined(PROTO)
 /*
  * Return non-zero when using an xterm mouse, according to 'ttymouse'.
  * Return 1 for "xterm".
@@ -2303,7 +2302,6 @@
 	return 1;
     return 0;
 }
-#endif
 
     int
 vim_is_iris(char_u *name)
@@ -3592,7 +3590,6 @@
 
 #endif /* VMS  */
 
-#if defined(FEAT_MOUSE_TTY) || defined(PROTO)
 static int	mouse_ison = FALSE;
 
 /*
@@ -3601,29 +3598,29 @@
     void
 mch_setmouse(int on)
 {
-# ifdef FEAT_BEVAL_TERM
+#ifdef FEAT_BEVAL_TERM
     static int	bevalterm_ison = FALSE;
-# endif
+#endif
     int		xterm_mouse_vers;
 
-# if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
+#if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
     if (!on)
 	// Make sure not tracing mouse movements.  Important when a button-down
 	// was received but no release yet.
 	stop_xterm_trace();
-# endif
+#endif
 
     if (on == mouse_ison
-# ifdef FEAT_BEVAL_TERM
+#ifdef FEAT_BEVAL_TERM
 	    && p_bevalterm == bevalterm_ison
-# endif
+#endif
 	    )
 	/* return quickly if nothing to do */
 	return;
 
     xterm_mouse_vers = use_xterm_mouse();
 
-# ifdef FEAT_MOUSE_URXVT
+#ifdef FEAT_MOUSE_URXVT
     if (ttym_flags == TTYM_URXVT)
     {
 	out_str_nf((char_u *)
@@ -3632,7 +3629,7 @@
 		   : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
 	mouse_ison = on;
     }
-# endif
+#endif
 
     if (ttym_flags == TTYM_SGR)
     {
@@ -3644,7 +3641,7 @@
 	mouse_ison = on;
     }
 
-# ifdef FEAT_BEVAL_TERM
+#ifdef FEAT_BEVAL_TERM
     if (bevalterm_ison != (p_bevalterm && on))
     {
 	bevalterm_ison = (p_bevalterm && on);
@@ -3653,7 +3650,7 @@
 	    out_str_nf((char_u *)
 			(IF_EB("\033[?1003l", ESC_STR "[?1003l")));
     }
-# endif
+#endif
 
     if (xterm_mouse_vers > 0)
     {
@@ -3661,10 +3658,10 @@
 	    out_str_nf((char_u *)
 		       (xterm_mouse_vers > 1
 			? (
-# ifdef FEAT_BEVAL_TERM
+#ifdef FEAT_BEVAL_TERM
 			    bevalterm_ison
 			       ? IF_EB("\033[?1003h", ESC_STR "[?1003h") :
-# endif
+#endif
 			      IF_EB("\033[?1002h", ESC_STR "[?1002h"))
 			: IF_EB("\033[?1000h", ESC_STR "[?1000h")));
 	else	/* disable mouse events, could probably always send the same */
@@ -3675,7 +3672,7 @@
 	mouse_ison = on;
     }
 
-# ifdef FEAT_MOUSE_DEC
+#ifdef FEAT_MOUSE_DEC
     else if (ttym_flags == TTYM_DEC)
     {
 	if (on)	/* enable mouse events */
@@ -3684,9 +3681,9 @@
 	    out_str_nf((char_u *)"\033['z");
 	mouse_ison = on;
     }
-# endif
+#endif
 
-# ifdef FEAT_MOUSE_GPM
+#ifdef FEAT_MOUSE_GPM
     else
     {
 	if (on)
@@ -3700,9 +3697,9 @@
 	    mouse_ison = FALSE;
 	}
     }
-# endif
+#endif
 
-# ifdef FEAT_SYSMOUSE
+#ifdef FEAT_SYSMOUSE
     else
     {
 	if (on)
@@ -3716,9 +3713,9 @@
 	    mouse_ison = FALSE;
 	}
     }
-# endif
+#endif
 
-# ifdef FEAT_MOUSE_JSB
+#ifdef FEAT_MOUSE_JSB
     else
     {
 	if (on)
@@ -3738,14 +3735,14 @@
 	     *	  4 = Windows Cross Hair
 	     *	  5 = Windows UP Arrow
 	     */
-#  ifdef JSBTERM_MOUSE_NONADVANCED
+# ifdef JSBTERM_MOUSE_NONADVANCED
 	    /* Disables full feedback of pointer movements */
 	    out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK1Q\033\\",
 					 ESC_STR "[0~ZwLMRK1Q" ESC_STR "\\"));
-#  else
+# else
 	    out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK+1Q\033\\",
 					ESC_STR "[0~ZwLMRK+1Q" ESC_STR "\\"));
-#  endif
+# endif
 	    mouse_ison = TRUE;
 	}
 	else
@@ -3755,8 +3752,8 @@
 	    mouse_ison = FALSE;
 	}
     }
-# endif
-# ifdef FEAT_MOUSE_PTERM
+#endif
+#ifdef FEAT_MOUSE_PTERM
     else
     {
 	/* 1 = button press, 6 = release, 7 = drag, 1h...9l = right button */
@@ -3766,7 +3763,7 @@
 	    out_str_nf("\033[>1l\033[>6l\033[>7l\033[>1l\033[>9h");
 	mouse_ison = on;
     }
-# endif
+#endif
 }
 
 #if defined(FEAT_BEVAL_TERM) || defined(PROTO)
@@ -3929,7 +3926,6 @@
 	del_mouse_termcode(KS_SGR_MOUSE_RELEASE);
     }
 }
-#endif
 
 /*
  * set screen mode, always fails.
diff --git a/src/os_win32.c b/src/os_win32.c
index 9badbed..13960d1 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1127,17 +1127,15 @@
 #endif /* FEAT_GUI_MSWIN */
 
 
-#ifdef FEAT_MOUSE
-
 /*
  * For the GUI the mouse handling is in gui_w32.c.
  */
-# if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
+#if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
     void
 mch_setmouse(int on UNUSED)
 {
 }
-# else
+#else
 static int g_fMouseAvail = FALSE;   /* mouse present */
 static int g_fMouseActive = FALSE;  /* mouse enabled */
 static int g_nMouseClick = -1;	    /* mouse status */
@@ -1152,10 +1150,10 @@
 {
     DWORD cmodein;
 
-#  ifdef VIMDLL
+# ifdef VIMDLL
     if (gui.in_use)
 	return;
-#  endif
+# endif
     if (!g_fMouseAvail)
 	return;
 
@@ -1171,7 +1169,7 @@
 }
 
 
-#if defined(FEAT_BEVAL_TERM) || defined(PROTO)
+# if defined(FEAT_BEVAL_TERM) || defined(PROTO)
 /*
  * Called when 'balloonevalterm' changed.
  */
@@ -1180,7 +1178,7 @@
 {
     mch_setmouse(g_fMouseActive);
 }
-#endif
+# endif
 
 /*
  * Decode a MOUSE_EVENT.  If it's a valid event, return MOUSE_LEFT,
@@ -1218,9 +1216,9 @@
     static int s_xOldMouse = -1;
     static int s_yOldMouse = -1;
     static linenr_T s_old_topline = 0;
-#ifdef FEAT_DIFF
+# ifdef FEAT_DIFF
     static int s_old_topfill = 0;
-#endif
+# endif
     static int s_cClicks = 1;
     static BOOL s_fReleased = TRUE;
     static DWORD s_dwLastClickTime = 0;
@@ -1275,12 +1273,12 @@
 	/* If the last thing returned was MOUSE_RELEASE, ignore this */
 	if (s_fReleased)
 	{
-#ifdef FEAT_BEVAL_TERM
+# ifdef FEAT_BEVAL_TERM
 	    /* do return mouse move events when we want them */
 	    if (p_bevalterm)
 		nButton = MOUSE_DRAG;
 	    else
-#endif
+# endif
 		return FALSE;
 	}
 
@@ -1386,9 +1384,9 @@
 		    || s_yOldMouse != g_yMouse
 		    || s_nOldButton != nButton
 		    || s_old_topline != curwin->w_topline
-#ifdef FEAT_DIFF
+# ifdef FEAT_DIFF
 		    || s_old_topfill != curwin->w_topfill
-#endif
+# endif
 		    || (int)(dwCurrentTime - s_dwLastClickTime) > p_mouset)
 	    {
 		s_cClicks = 1;
@@ -1439,16 +1437,15 @@
     s_xOldMouse = g_xMouse;
     s_yOldMouse = g_yMouse;
     s_old_topline = curwin->w_topline;
-#ifdef FEAT_DIFF
+# ifdef FEAT_DIFF
     s_old_topfill = curwin->w_topfill;
-#endif
+# endif
     s_nOldMouseClick = g_nMouseClick;
 
     return TRUE;
 }
 
-# endif /* FEAT_GUI_MSWIN */
-#endif /* FEAT_MOUSE */
+#endif // FEAT_GUI_MSWIN
 
 
 #ifdef MCH_CURSOR_SHAPE
@@ -1547,10 +1544,7 @@
 #endif
 	}
 
-	if (0
-#ifdef FEAT_MOUSE
-		|| g_nMouseClick != -1
-#endif
+	if (g_nMouseClick != -1
 #ifdef FEAT_CLIENTSERVER
 		|| (!ignore_input && input_available())
 #endif
@@ -1683,11 +1677,9 @@
 		    shell_resized();
 		}
 	    }
-#ifdef FEAT_MOUSE
 	    else if (ir.EventType == MOUSE_EVENT
 		    && decode_mouse_event(&ir.Event.MouseEvent))
 		return TRUE;
-#endif
 	}
 	else if (msec == 0)
 	    break;
@@ -1760,10 +1752,8 @@
 	(void)WaitForChar(-1L, FALSE);
 	if (input_available())
 	    return 0;
-# ifdef FEAT_MOUSE
 	if (g_nMouseClick != -1)
 	    return 0;
-# endif
 #endif
 	if (read_console_input(g_hConIn, &ir, 1, &cRecords) == 0)
 	{
@@ -1783,13 +1773,11 @@
 	    handle_focus_event(ir);
 	else if (ir.EventType == WINDOW_BUFFER_SIZE_EVENT)
 	    shell_resized();
-#ifdef FEAT_MOUSE
 	else if (ir.EventType == MOUSE_EVENT)
 	{
 	    if (decode_mouse_event(&ir.Event.MouseEvent))
 		return 0;
 	}
-#endif
     }
 }
 #endif /* !FEAT_GUI_MSWIN */
@@ -1879,14 +1867,13 @@
 	    typeaheadlen = 0;
 	    break;
 	}
-#ifdef FEAT_MOUSE
 	if (g_nMouseClick != -1)
 	{
-# ifdef MCH_WRITE_DUMP
+#ifdef MCH_WRITE_DUMP
 	    if (fdDump)
 		fprintf(fdDump, "{%02x @ %d, %d}",
 			g_nMouseClick, g_xMouse, g_yMouse);
-# endif
+#endif
 	    typeahead[typeaheadlen++] = ESC + 128;
 	    typeahead[typeaheadlen++] = 'M';
 	    typeahead[typeaheadlen++] = g_nMouseClick;
@@ -1895,7 +1882,6 @@
 	    g_nMouseClick = -1;
 	}
 	else
-#endif
 	{
 	    WCHAR	ch2 = NUL;
 	    int		modifiers = 0;
@@ -1918,9 +1904,7 @@
 		got_int = TRUE;
 	    }
 
-#ifdef FEAT_MOUSE
 	    if (g_nMouseClick == -1)
-#endif
 	    {
 		int	n = 1;
 
@@ -2675,9 +2659,7 @@
 
     g_fWindInitCalled = TRUE;
 
-#ifdef FEAT_MOUSE
     g_fMouseAvail = GetSystemMetrics(SM_MOUSEPRESENT);
-#endif
 
 #ifdef FEAT_CLIPBOARD
     win_clip_init();
@@ -3609,10 +3591,8 @@
     {
 	cmodein &= ~(ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT |
 		     ENABLE_ECHO_INPUT);
-#ifdef FEAT_MOUSE
 	if (g_fMouseActive)
 	    cmodein |= ENABLE_MOUSE_INPUT;
-#endif
 	cmodeout &= ~(
 #ifdef FEAT_TERMGUICOLORS
 	    /* Do not turn off the ENABLE_PROCESSED_OUTPUT flag when using
@@ -5501,12 +5481,10 @@
 #endif
 
     GetConsoleMode(g_hConIn, &cmodein);
-#ifdef FEAT_MOUSE
     if (g_fMouseActive)
 	cmodein |= ENABLE_MOUSE_INPUT;
     else
 	cmodein &= ~ENABLE_MOUSE_INPUT;
-#endif
     cmodein |= ENABLE_WINDOW_INPUT;
     SetConsoleMode(g_hConIn, cmodein);
 
diff --git a/src/os_win32.h b/src/os_win32.h
index 2169bd3..ac89911 100644
--- a/src/os_win32.h
+++ b/src/os_win32.h
@@ -62,7 +62,7 @@
 #endif
 
 #define USE_FNAME_CASE		/* adjust case of file names */
-#if !defined(FEAT_CLIPBOARD) && defined(FEAT_MOUSE)
+#if !defined(FEAT_CLIPBOARD)
 # define FEAT_CLIPBOARD		/* include clipboard support */
 #endif
 #if defined(__DATE__) && defined(__TIME__)
diff --git a/src/register.c b/src/register.c
index eb40bba..a7e1377 100644
--- a/src/register.c
+++ b/src/register.c
@@ -352,7 +352,6 @@
 }
 #endif
 
-#if defined(FEAT_MOUSE) || defined(PROTO)
 /*
  * return TRUE if the current yank register has type MLINE
  */
@@ -366,7 +365,6 @@
     get_yank_register(regname, FALSE);
     return (y_current->y_type == MLINE);
 }
-#endif
 
 /*
  * Start or stop recording into a yank register.
diff --git a/src/term.c b/src/term.c
index ef857a1..cfbd7fe 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1962,9 +1962,7 @@
     is_mac_terminal = FALSE;
 #endif
 
-#ifdef FEAT_MOUSE
-# if defined(UNIX) || defined(VMS)
-#  ifdef FEAT_MOUSE_TTY
+#if defined(UNIX) || defined(VMS)
     /*
      * For Unix, set the 'ttymouse' option to the type of mouse to be used.
      * The termcode for the mouse is added as a side effect in option.c.
@@ -1972,7 +1970,7 @@
     {
 	char_u	*p = (char_u *)"";
 
-#  ifdef FEAT_MOUSE_XTERM
+# ifdef FEAT_MOUSE_XTERM
 	if (use_xterm_like_mouse(term))
 	{
 	    if (use_xterm_mouse())
@@ -1980,7 +1978,7 @@
 	    else
 		p = (char_u *)"xterm";
 	}
-#  endif
+# endif
 	if (p != NULL)
 	{
 	    set_option_value((char_u *)"ttym", 0L, p, 0);
@@ -1989,17 +1987,15 @@
 	    reset_option_was_set((char_u *)"ttym");
 	}
 	if (p == NULL
-#   ifdef FEAT_GUI
+#  ifdef FEAT_GUI
 		|| gui.in_use
-#   endif
+#  endif
 		)
 	    check_mouse_termcode();	/* set mouse termcode anyway */
     }
-#  endif
-# else
+#else
     set_mouse_termcode(KS_MOUSE, (char_u *)"\233M");
-# endif
-#endif	/* FEAT_MOUSE */
+#endif
 
 #ifdef USE_TERM_CONSOLE
     /* DEFAULT_TERM indicates that it is the machine console. */
@@ -2565,8 +2561,6 @@
 	out_flush();
 }
 
-#if defined(FEAT_TITLE) || defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI) \
-    || defined(FEAT_TERMRESPONSE) || defined(PROTO)
 /*
  * A never-padding out_str.
  * use this whenever you don't want to run the string through tputs.
@@ -2590,7 +2584,6 @@
     if (p_wd)
 	out_flush();
 }
-#endif
 
 /*
  * A conditional-flushing out_str, mainly for visualbell.
@@ -3151,9 +3144,6 @@
 }
 #endif
 
-#if defined(FEAT_GUI) \
-    || (defined(FEAT_MOUSE) && (!defined(UNIX) || defined(FEAT_MOUSE_XTERM) \
-		|| defined(FEAT_MOUSE_GPM) || defined(FEAT_SYSMOUSE)))
 /*
  * Read the next num_bytes bytes from buf, and store them in bytes.  Assume
  * that buf has been through inchar().	Returns the actual number of bytes used
@@ -3191,7 +3181,6 @@
     }
     return len;
 }
-#endif
 
 /*
  * Check if the new shell size is valid, correct it if it's too small or way
@@ -3436,10 +3425,8 @@
 		check_for_codes_from_term();
 	    }
 #endif
-#ifdef FEAT_MOUSE_TTY
 	    if (tmode != TMODE_RAW)
 		mch_setmouse(FALSE);	// switch mouse off
-#endif
 	    if (termcap_active)
 	    {
 		if (tmode != TMODE_RAW)
@@ -5084,8 +5071,7 @@
 
 	/* We only get here when we have a complete termcode match */
 
-#ifdef FEAT_MOUSE
-# ifdef FEAT_GUI
+#ifdef FEAT_GUI
 	/*
 	 * Only in the GUI: Fetch the pointer coordinates of the scroll event
 	 * so that we know which window to scroll later.
@@ -5109,29 +5095,29 @@
 	    slen += num_bytes;
 	}
 	else
-# endif
+#endif
 	/*
 	 * If it is a mouse click, get the coordinates.
 	 */
 	if (key_name[0] == KS_MOUSE
-# ifdef FEAT_MOUSE_GPM
+#ifdef FEAT_MOUSE_GPM
 		|| key_name[0] == KS_GPM_MOUSE
-# endif
-# ifdef FEAT_MOUSE_JSB
+#endif
+#ifdef FEAT_MOUSE_JSB
 		|| key_name[0] == KS_JSBTERM_MOUSE
-# endif
-# ifdef FEAT_MOUSE_NET
+#endif
+#ifdef FEAT_MOUSE_NET
 		|| key_name[0] == KS_NETTERM_MOUSE
-# endif
-# ifdef FEAT_MOUSE_DEC
+#endif
+#ifdef FEAT_MOUSE_DEC
 		|| key_name[0] == KS_DEC_MOUSE
-# endif
-# ifdef FEAT_MOUSE_PTERM
+#endif
+#ifdef FEAT_MOUSE_PTERM
 		|| key_name[0] == KS_PTERM_MOUSE
-# endif
-# ifdef FEAT_MOUSE_URXVT
+#endif
+#ifdef FEAT_MOUSE_URXVT
 		|| key_name[0] == KS_URXVT_MOUSE
-# endif
+#endif
 		|| key_name[0] == KS_SGR_MOUSE
 		|| key_name[0] == KS_SGR_MOUSE_RELEASE)
 	{
@@ -5139,7 +5125,6 @@
 							     &modifiers) == -1)
 		return -1;
 	}
-#endif /* FEAT_MOUSE */
 
 #ifdef FEAT_GUI
 	/*
diff --git a/src/testing.c b/src/testing.c
index 748ec46..7543dd8 100644
--- a/src/testing.c
+++ b/src/testing.c
@@ -926,14 +926,12 @@
 }
 #endif
 
-#ifdef FEAT_MOUSE
     void
 f_test_setmouse(typval_T *argvars, typval_T *rettv UNUSED)
 {
     mouse_row = (time_t)tv_get_number(&argvars[0]) - 1;
     mouse_col = (time_t)tv_get_number(&argvars[1]) - 1;
 }
-#endif
 
     void
 f_test_settime(typval_T *argvars, typval_T *rettv UNUSED)
diff --git a/src/version.c b/src/version.c
index b7d9cb7..0dd3677 100644
--- a/src/version.c
+++ b/src/version.c
@@ -359,15 +359,11 @@
 	"-mksession",
 #endif
 	"+modify_fname",
-#ifdef FEAT_MOUSE
 	"+mouse",
-#  ifdef FEAT_MOUSESHAPE
+#ifdef FEAT_MOUSESHAPE
 	"+mouseshape",
-#  else
+#else
 	"-mouseshape",
-#  endif
-# else
-	"-mouse",
 #endif
 
 #if defined(UNIX) || defined(VMS)
@@ -402,11 +398,7 @@
 #endif
 
 #if defined(UNIX) || defined(VMS)
-# ifdef FEAT_MOUSE_XTERM
 	"+mouse_sgr",
-# else
-	"-mouse_sgr",
-# endif
 # ifdef FEAT_SYSMOUSE
 	"+mouse_sysmouse",
 # else
@@ -417,11 +409,7 @@
 # else
 	"-mouse_urxvt",
 # endif
-# ifdef FEAT_MOUSE_XTERM
 	"+mouse_xterm",
-# else
-	"-mouse_xterm",
-# endif
 #endif
 
 #ifdef FEAT_MBYTE_IME
@@ -754,6 +742,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2171,
+/**/
     2170,
 /**/
     2169,
diff --git a/src/vim.h b/src/vim.h
index 5a977a8..d361f8a 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -151,9 +151,6 @@
 # if defined(FEAT_SMALL) && !defined(FEAT_CLIPBOARD)
 #  define FEAT_CLIPBOARD
 # endif
-# if defined(FEAT_SMALL) && !defined(FEAT_MOUSE)
-#  define FEAT_MOUSE
-# endif
 #endif
 
 // +x11 is only enabled when it's both available and wanted.
@@ -1817,80 +1814,78 @@
 #define PROF_YES	1	// profiling busy
 #define PROF_PAUSED	2	// profiling paused
 
-#ifdef FEAT_MOUSE
 
 // Codes for mouse button events in lower three bits:
-# define MOUSE_LEFT	0x00
-# define MOUSE_MIDDLE	0x01
-# define MOUSE_RIGHT	0x02
-# define MOUSE_RELEASE	0x03
+#define MOUSE_LEFT	0x00
+#define MOUSE_MIDDLE	0x01
+#define MOUSE_RIGHT	0x02
+#define MOUSE_RELEASE	0x03
 
 // bit masks for modifiers:
-# define MOUSE_SHIFT	0x04
-# define MOUSE_ALT	0x08
-# define MOUSE_CTRL	0x10
+#define MOUSE_SHIFT	0x04
+#define MOUSE_ALT	0x08
+#define MOUSE_CTRL	0x10
 
 // mouse buttons that are handled like a key press (GUI only)
 // Note that the scroll wheel keys are inverted: MOUSE_5 scrolls lines up but
 // the result of this is that the window moves down, similarly MOUSE_6 scrolls
 // columns left but the window moves right.
-# define MOUSE_4	0x100	// scroll wheel down
-# define MOUSE_5	0x200	// scroll wheel up
+#define MOUSE_4	0x100	// scroll wheel down
+#define MOUSE_5	0x200	// scroll wheel up
 
-# define MOUSE_X1	0x300 // Mouse-button X1 (6th)
-# define MOUSE_X2	0x400 // Mouse-button X2
+#define MOUSE_X1	0x300 // Mouse-button X1 (6th)
+#define MOUSE_X2	0x400 // Mouse-button X2
 
-# define MOUSE_6	0x500	// scroll wheel left
-# define MOUSE_7	0x600	// scroll wheel right
+#define MOUSE_6	0x500	// scroll wheel left
+#define MOUSE_7	0x600	// scroll wheel right
 
 // 0x20 is reserved by xterm
-# define MOUSE_DRAG_XTERM   0x40
+#define MOUSE_DRAG_XTERM   0x40
 
-# define MOUSE_DRAG	(0x40 | MOUSE_RELEASE)
+#define MOUSE_DRAG	(0x40 | MOUSE_RELEASE)
 
 // Lowest button code for using the mouse wheel (xterm only)
-# define MOUSEWHEEL_LOW		0x60
+#define MOUSEWHEEL_LOW		0x60
 
-# define MOUSE_CLICK_MASK	0x03
+#define MOUSE_CLICK_MASK	0x03
 
-# define NUM_MOUSE_CLICKS(code) \
+#define NUM_MOUSE_CLICKS(code) \
     (((unsigned)((code) & 0xC0) >> 6) + 1)
 
-# define SET_NUM_MOUSE_CLICKS(code, num) \
+#define SET_NUM_MOUSE_CLICKS(code, num) \
     (code) = ((code) & 0x3f) | ((((num) - 1) & 3) << 6)
 
 // Added to mouse column for GUI when 'mousefocus' wants to give focus to a
 // window by simulating a click on its status line.  We could use up to 128 *
 // 128 = 16384 columns, now it's reduced to 10000.
-# define MOUSE_COLOFF 10000
+#define MOUSE_COLOFF 10000
 
 /*
  * jump_to_mouse() returns one of first four these values, possibly with
  * some of the other three added.
  */
-# define IN_UNKNOWN		0
-# define IN_BUFFER		1
-# define IN_STATUS_LINE		2	// on status or command line
-# define IN_SEP_LINE		4	// on vertical separator line
-# define IN_OTHER_WIN		8	// in other window but can't go there
-# define CURSOR_MOVED		0x100
-# define MOUSE_FOLD_CLOSE	0x200	// clicked on '-' in fold column
-# define MOUSE_FOLD_OPEN	0x400	// clicked on '+' in fold column
-# define MOUSE_WINBAR		0x800	// in window toolbar
+#define IN_UNKNOWN		0
+#define IN_BUFFER		1
+#define IN_STATUS_LINE		2	// on status or command line
+#define IN_SEP_LINE		4	// on vertical separator line
+#define IN_OTHER_WIN		8	// in other window but can't go there
+#define CURSOR_MOVED		0x100
+#define MOUSE_FOLD_CLOSE	0x200	// clicked on '-' in fold column
+#define MOUSE_FOLD_OPEN		0x400	// clicked on '+' in fold column
+#define MOUSE_WINBAR		0x800	// in window toolbar
 
 // flags for jump_to_mouse()
-# define MOUSE_FOCUS		0x01	// need to stay in this window
-# define MOUSE_MAY_VIS		0x02	// may start Visual mode
-# define MOUSE_DID_MOVE		0x04	// only act when mouse has moved
-# define MOUSE_SETPOS		0x08	// only set current mouse position
-# define MOUSE_MAY_STOP_VIS	0x10	// may stop Visual mode
-# define MOUSE_RELEASED		0x20	// button was released
+#define MOUSE_FOCUS		0x01	// need to stay in this window
+#define MOUSE_MAY_VIS		0x02	// may start Visual mode
+#define MOUSE_DID_MOVE		0x04	// only act when mouse has moved
+#define MOUSE_SETPOS		0x08	// only set current mouse position
+#define MOUSE_MAY_STOP_VIS	0x10	// may stop Visual mode
+#define MOUSE_RELEASED		0x20	// button was released
 
-# if defined(UNIX) && defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
-#  define CHECK_DOUBLE_CLICK 1	// Checking for double clicks ourselves.
-# endif
+#if defined(UNIX) && defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
+# define CHECK_DOUBLE_CLICK 1	// Checking for double clicks ourselves.
+#endif
 
-#endif // FEAT_MOUSE
 
 // defines for eval_vars()
 #define VALID_PATH		1
diff --git a/src/window.c b/src/window.c
index fb8a5a7..8bb3269 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5725,8 +5725,6 @@
     }
 }
 
-#if defined(FEAT_MOUSE) || defined(PROTO)
-
 /*
  * Status line of dragwin is dragged "offset" lines down (negative is up).
  */
@@ -5958,7 +5956,6 @@
     (void)win_comp_pos();
     redraw_all_later(NOT_VALID);
 }
-#endif /* FEAT_MOUSE */
 
 #define FRACTION_MULT	16384L
 
