changeset 29765:bc6cf208b1b4 v9.0.0222

patch 9.0.0222: no good reason why text objects are only in larger builds Commit: https://github.com/vim/vim/commit/887748742deae3d6de7aa0fdbb042afe1ccf5e7a Author: Bram Moolenaar <Bram@vim.org> Date: Tue Aug 16 20:24:29 2022 +0100 patch 9.0.0222: no good reason why text objects are only in larger builds Problem: No good reason why text objects are only in larger builds. Solution: Graduate +textobjects.
author Bram Moolenaar <Bram@vim.org>
date Tue, 16 Aug 2022 21:30:04 +0200
parents c99cffeb155d
children da1a76b65cbf
files runtime/doc/motion.txt runtime/doc/various.txt src/buffer.c src/evalfunc.c src/feature.h src/misc2.c src/normal.c src/option.c src/option.h src/optiondefs.h src/optionstr.c src/scriptfile.c src/structs.h src/testdir/test_textobjects.vim src/textobject.c src/version.c
diffstat 16 files changed, 15 insertions(+), 60 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -532,8 +532,6 @@ including white space, the commands star
 without white space, or just the white space.  Thus the "inner" commands
 always select less text than the "a" commands.
 
-These commands are not available when the |+textobjects| feature has been
-disabled at compile time.
 Also see `gn` and `gN`, operating on the last search pattern.
 
 							*v_aw* *aw*
@@ -634,6 +632,7 @@ at			"a tag block", select [count] tag b
 			"</aaa>", including the "<aaa>" and "</aaa>".
 			See |tag-blocks| about the details.
 			When used in Visual mode it is made characterwise.
+			Only available when compiled with the |+eval| feature.
 
 						*v_it* *it*
 it			"inner tag block", select [count] tag blocks, from the
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -470,7 +470,7 @@ m  *+terminal*		Support for terminal win
    *+terminfo*		uses |terminfo| instead of termcap
 N  *+termresponse*	support for |t_RV| and |v:termresponse|
 B  *+termguicolors*	24-bit color in xterm-compatible terminals support
-N  *+textobjects*	|text-objects| selection
+T  *+textobjects*	|text-objects| selection. Always enabled since 9.0.0222.
 N  *+textprop*		|text-properties|
    *+tgetent*		non-Unix only: able to use external termcap
 N  *+timers*		the |timer_start()| function
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2372,9 +2372,7 @@ free_buf_options(
 #endif
     clear_string_option(&buf->b_p_dict);
     clear_string_option(&buf->b_p_tsr);
-#ifdef FEAT_TEXTOBJ
     clear_string_option(&buf->b_p_qe);
-#endif
     buf->b_p_ar = -1;
     buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
     clear_string_option(&buf->b_p_lw);
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -6200,13 +6200,7 @@ f_has(typval_T *argvars, typval_T *rettv
 		0
 #endif
 		},
-	{"textobjects",
-#ifdef FEAT_TEXTOBJ
-		1
-#else
-		0
-#endif
-		},
+	{"textobjects", 1},
 	{"textprop",
 #ifdef FEAT_PROP_POPUP
 		1
--- a/src/feature.h
+++ b/src/feature.h
@@ -114,6 +114,7 @@
  * +lispindent		lisp indenting (From Eric Fischer).
  * +cindent		C code indenting (From Eric Fischer).
  * +smartindent		smart C code indenting when the 'si' option is set.
+ * +textobjects		Text objects: "vaw", "das", etc.
  *
  * Obsolete:
  * +tag_old_static	Old style static tags: "file:tag  file  ..".
@@ -302,13 +303,6 @@
 #endif
 
 /*
- * +textobjects		Text objects: "vaw", "das", etc.
- */
-#if defined(FEAT_NORMAL) && defined(FEAT_EVAL)
-# define FEAT_TEXTOBJ
-#endif
-
-/*
  *			Insert mode completion with 'completefunc'.
  */
 #if defined(FEAT_EVAL)
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -650,7 +650,6 @@ check_visual_pos(void)
     }
 }
 
-#if defined(FEAT_TEXTOBJ) || defined(PROTO)
 /*
  * Make sure curwin->w_cursor is not on the NUL at the end of the line.
  * Allow it when in Visual mode and 'selection' is not "old".
@@ -663,7 +662,6 @@ adjust_cursor_col(void)
 	    && gchar_cursor() == NUL)
 	--curwin->w_cursor.col;
 }
-#endif
 
 /*
  * When curwin->w_leftcol has changed, adjust the cursor position.
--- a/src/normal.c
+++ b/src/normal.c
@@ -109,9 +109,7 @@ static void	nv_normal(cmdarg_T *cap);
 static void	nv_esc(cmdarg_T *oap);
 static void	nv_edit(cmdarg_T *cap);
 static void	invoke_edit(cmdarg_T *cap, int repl, int cmd, int startln);
-#ifdef FEAT_TEXTOBJ
 static void	nv_object(cmdarg_T *cap);
-#endif
 static void	nv_record(cmdarg_T *cap);
 static void	nv_at(cmdarg_T *cap);
 static void	nv_halfpage(cmdarg_T *cap);
@@ -6888,11 +6886,7 @@ nv_edit(cmdarg_T *cap)
     else if ((cap->cmdchar == 'a' || cap->cmdchar == 'i')
 	    && (cap->oap->op_type != OP_NOP || VIsual_active))
     {
-#ifdef FEAT_TEXTOBJ
 	nv_object(cap);
-#else
-	clearopbeep(cap->oap);
-#endif
     }
 #ifdef FEAT_TERMINAL
     else if (term_in_normal_mode())
@@ -7044,7 +7038,6 @@ invoke_edit(
 	restart_edit = restart_edit_save;
 }
 
-#ifdef FEAT_TEXTOBJ
 /*
  * "a" or "i" while an operator is pending or in Visual mode: object motion.
  */
@@ -7091,6 +7084,7 @@ nv_object(
 	case '>':
 		flag = current_block(cap->oap, cap->count1, include, '<', '>');
 		break;
+#ifdef FEAT_EVAL
 	case 't': // "at" = a tag block (xml and html)
 		// Do not adjust oap->end in do_pending_operator()
 		// otherwise there are different results for 'dit'
@@ -7101,6 +7095,7 @@ nv_object(
 		cap->retval |= CA_NO_ADJ_OP_END;
 		flag = current_tagblock(cap->oap, cap->count1, include);
 		break;
+#endif
 	case 'p': // "ap" = a paragraph
 		flag = current_par(cap->oap, cap->count1, include, 'p');
 		break;
@@ -7129,7 +7124,6 @@ nv_object(
     adjust_cursor_col();
     curwin->w_set_curswant = TRUE;
 }
-#endif
 
 /*
  * "q" command: Start/stop recording.
--- a/src/option.c
+++ b/src/option.c
@@ -5514,9 +5514,7 @@ get_varp(struct vimoption *p)
 	case PV_MOD:	return (char_u *)&(curbuf->b_changed);
 	case PV_NF:	return (char_u *)&(curbuf->b_p_nf);
 	case PV_PI:	return (char_u *)&(curbuf->b_p_pi);
-#ifdef FEAT_TEXTOBJ
 	case PV_QE:	return (char_u *)&(curbuf->b_p_qe);
-#endif
 	case PV_RO:	return (char_u *)&(curbuf->b_p_ro);
 	case PV_SI:	return (char_u *)&(curbuf->b_p_si);
 	case PV_SN:	return (char_u *)&(curbuf->b_p_sn);
@@ -6132,10 +6130,8 @@ buf_copy_options(buf_T *buf, int flags)
 #ifdef FEAT_COMPL_FUNC
 	    buf->b_p_tsrfu = empty_option;
 #endif
-#ifdef FEAT_TEXTOBJ
 	    buf->b_p_qe = vim_strsave(p_qe);
 	    COPY_OPT_SCTX(buf, BV_QE);
-#endif
 #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
 	    buf->b_p_bexpr = empty_option;
 #endif
--- a/src/option.h
+++ b/src/option.h
@@ -802,9 +802,7 @@ EXTERN char_u	*p_pyhome;	// 'pythonhome'
 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
 EXTERN long	p_pyx;		// 'pyxversion'
 #endif
-#ifdef FEAT_TEXTOBJ
 EXTERN char_u	*p_qe;		// 'quoteescape'
-#endif
 EXTERN int	p_ro;		// 'readonly'
 #ifdef FEAT_RELTIME
 EXTERN long	p_rdt;		// 'redrawtime'
@@ -1183,9 +1181,7 @@ enum
 #endif
     , BV_PATH
     , BV_PI
-#ifdef FEAT_TEXTOBJ
     , BV_QE
-#endif
     , BV_RO
     , BV_SI
     , BV_SN
--- a/src/optiondefs.h
+++ b/src/optiondefs.h
@@ -108,9 +108,7 @@
 #endif
 #define PV_PATH		OPT_BOTH(OPT_BUF(BV_PATH))
 #define PV_PI		OPT_BUF(BV_PI)
-#ifdef FEAT_TEXTOBJ
-# define PV_QE		OPT_BUF(BV_QE)
-#endif
+#define PV_QE		OPT_BUF(BV_QE)
 #define PV_RO		OPT_BUF(BV_RO)
 #define PV_SI		OPT_BUF(BV_SI)
 #define PV_SN		OPT_BUF(BV_SN)
@@ -2009,14 +2007,8 @@ static struct vimoption options[] =
 #endif
 			    SCTX_INIT},
     {"quoteescape", "qe",   P_STRING|P_ALLOCED|P_VI_DEF,
-#ifdef FEAT_TEXTOBJ
 			    (char_u *)&p_qe, PV_QE,
-			    {(char_u *)"\\", (char_u *)0L}
-#else
-			    (char_u *)NULL, PV_NONE,
-			    {(char_u *)NULL, (char_u *)0L}
-#endif
-			    SCTX_INIT},
+			    {(char_u *)"\\", (char_u *)0L} SCTX_INIT},
     {"readonly",    "ro",   P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB,
 			    (char_u *)&p_ro, PV_RO,
 			    {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -242,9 +242,7 @@ check_buf_options(buf_T *buf)
     check_string_option(&buf->b_p_cms);
 #endif
     check_string_option(&buf->b_p_nf);
-#ifdef FEAT_TEXTOBJ
     check_string_option(&buf->b_p_qe);
-#endif
 #ifdef FEAT_SYN_HL
     check_string_option(&buf->b_p_syn);
     check_string_option(&buf->b_s.b_syn_isk);
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -1378,6 +1378,7 @@ do_source_ext(
     int			    sid;
     scriptitem_T	    *si = NULL;
     int			    save_estack_compiling = estack_compiling;
+    ESTACK_CHECK_DECLARATION
 #endif
 #ifdef STARTUPTIME
     struct timeval	    tv_rel;
@@ -1388,7 +1389,6 @@ do_source_ext(
 #endif
     int			    save_sticky_cmdmod_flags = sticky_cmdmod_flags;
     int			    trigger_source_post = FALSE;
-    ESTACK_CHECK_DECLARATION
 
     CLEAR_FIELD(cookie);
     if (fname == NULL)
@@ -1693,7 +1693,9 @@ do_source_ext(
 
     if (got_int)
 	emsg(_(e_interrupted));
+#ifdef FEAT_EVAL
     ESTACK_CHECK_NOW
+#endif
     estack_pop();
     if (p_verbose > 1)
     {
--- a/src/structs.h
+++ b/src/structs.h
@@ -2959,9 +2959,7 @@ struct file_buffer
     int		b_p_ma;		// 'modifiable'
     char_u	*b_p_nf;	// 'nrformats'
     int		b_p_pi;		// 'preserveindent'
-#ifdef FEAT_TEXTOBJ
     char_u	*b_p_qe;	// 'quoteescape'
-#endif
     int		b_p_ro;		// 'readonly'
     long	b_p_sw;		// 'shiftwidth'
     int		b_p_sn;		// 'shortname'
--- a/src/testdir/test_textobjects.vim
+++ b/src/testdir/test_textobjects.vim
@@ -1,7 +1,6 @@
 " Test for textobjects
 
 source check.vim
-CheckFeature textobjects
 
 func CpoM(line, useM, expected)
   new
--- a/src/textobject.c
+++ b/src/textobject.c
@@ -614,7 +614,6 @@ skip_chars(int cclass, int dir)
     return FALSE;
 }
 
-#if defined(FEAT_TEXTOBJ) || defined(PROTO)
 /*
  * Go back to the start of the word or the start of white space
  */
@@ -1189,6 +1188,7 @@ current_block(
     return OK;
 }
 
+#if defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Return TRUE if the cursor is on a "<aaa>" tag.  Ignore "<aaa/>".
  * When "end_tag" is TRUE return TRUE if the cursor is on "</aaa>".
@@ -1470,6 +1470,7 @@ theend:
     p_ws = save_p_ws;
     return retval;
 }
+#endif
 
     int
 current_par(
@@ -2001,5 +2002,3 @@ abort_search:
     }
     return FALSE;
 }
-
-#endif // FEAT_TEXTOBJ
--- a/src/version.c
+++ b/src/version.c
@@ -614,11 +614,7 @@ static char *(features[]) =
 #else
 	"-termresponse",
 #endif
-#ifdef FEAT_TEXTOBJ
 	"+textobjects",
-#else
-	"-textobjects",
-#endif
 #ifdef FEAT_PROP_POPUP
 	"+textprop",
 #else
@@ -736,6 +732,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    222,
+/**/
     221,
 /**/
     220,