changeset 724:a35dce0cabc5

updated for version 7.0220
author vimboss
date Fri, 10 Mar 2006 21:42:59 +0000
parents 587ea89ab80c
children 0a9371c70540
files runtime/doc/autocmd.txt runtime/doc/eval.txt runtime/doc/pi_netrw.txt runtime/doc/spell.txt runtime/doc/tags src/edit.c src/structs.h src/version.h
diffstat 8 files changed, 139 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.0aa.  Last change: 2006 Mar 07
+*autocmd.txt*   For Vim version 7.0aa.  Last change: 2006 Mar 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -272,6 +272,9 @@ Name			triggered by ~
 |FileChangedShell|	Vim notices that a file changed since editing started
 |FileChangedRO|		before making the first change to a read-only file
 
+|ShellCmdPost|		after executing a shell command
+|ShellFilterPost|	after filtering with a shell command
+
 |FuncUndefined|		a user function is used but it isn't defined
 |SpellFileMissing|	a spell file is used but it can't be found
 |SourcePre|		before sourcing a Vim script
@@ -667,6 +670,14 @@ RemoteReply			When a reply from a Vim th
 							*SessionLoadPost*
 SessionLoadPost			After loading the session file created using
 				the |:mksession| command.
+							*ShellCmdPost*
+ShellCmdPost			After executing a shell command with |:!cmd|,
+				|:shell|, |:make| and |:grep|.  Can be used to
+				check for any changed files.
+							*ShellFilterPost*
+ShellFilterPost			After executing a shell command with
+				":{range}!cmd", ":w !cmd" or ":r !cmd".
+				Can be used to check for any changed files.
 							*SourcePre*
 SourcePre			Before sourcing a Vim script. |:source|
 							*SpellFileMissing*
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 07
+*eval.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1513,6 +1513,7 @@ call( {func}, {arglist} [, {dict}])
 char2nr( {expr})		Number	ASCII value of first char in {expr}
 cindent( {lnum})		Number	C indent for line {lnum}
 col( {expr})			Number	column nr of cursor or mark
+complete({startcol}, {matches})	String  set Insert mode completion
 complete_add( {expr})		Number	add completion match
 complete_check()		Number  check for key typed during completion
 confirm( {msg} [, {choices} [, {default} [, {type}]]])
@@ -1958,6 +1959,35 @@ col({expr})	The result is a Number, whic
 				\let &ve = save_ve<CR>
 <
 
+complete({startcol}, {matches})			*complete()* *E785*
+		Set the matches for Insert mode completion.
+		Can only be used in Insert mode.  You need to use a mapping
+		with an expression argument |:map-<expr>| or CTRL-R =
+		|i_CTRL-R|.  It does not work after CTRL-O.
+		{startcol} is the byte offset in the line where the completed
+		text start.  The text up to the cursor is the original text
+		that will be replaced by the matches.  Use col('.') for an
+		empty string.  "col('.') - 1" will replace one character by a
+		match.
+		{matches} must be a |List|.  Each |List| item is one match.
+		See |complete-items| for the kind of items that are possible.
+		Note that the after calling this function you need to avoid
+		inserting anything that would completion to stop.
+		The match can be selected with CTRL-N and CTRL-P as usual with
+		Insert mode completion.  The popup menu will appear if
+		specified, see |ins-completion-menu|.
+		Example: >
+	inoremap <expr> <F5> ListMonths()
+
+	func! ListMonths()
+	  call complete(col('.'), ['January', 'February', 'March',
+		\ 'April', 'May', 'June', 'July', 'August', 'September',
+		\ 'October', 'November', 'December'])
+	  return ''
+	endfunc
+<		This isn't very useful, but it shows how it works.  Note that
+		an empty string is returned to avoid a zero being inserted.
+
 complete_add({expr})				*complete_add()*
 		Add {expr} to the list of matches.  Only to be used by the
 		function specified with the 'completefunc' option.
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -881,7 +881,7 @@ Netrw will not work properly with >
 <
 If either of these options are present when browsing is attempted, netrw
 will change them by using noacd and removing the ta suboptions from the
-|formatoptions|.
+|'formatoptions'|.
 
 				*netrw-explore*  *netrw-pexplore*
 				*netrw-hexplore* *netrw-sexplore*
@@ -1134,9 +1134,9 @@ One may use a preview window (currently 
 
 PREVIOUS WINDOW					*netrw-P* *netrw-prvwin*
 
-To edit a file or directory in the previously used window (see :he |ctrl-w_p|),
+To edit a file or directory in the previously used window (see :he |CTRL-W_P|),
 press a "P".  If there's only one window, then the one window will be
-horizontally split (above/below splitting is controlled by |g:netrw-alto|,
+horizontally split (above/below splitting is controlled by |g:netrw_alto|,
 and its initial size is controlled by |g:netrw_winsize|).
 
 If there's more than one window, the previous window will be re-used on
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.0aa.  Last change: 2006 Mar 05
+*spell.txt*	For Vim version 7.0aa.  Last change: 2006 Mar 10
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1536,7 +1536,8 @@ SYLLABLENUM	(Hunspell)				*spell-SYLLABL
 
 TRY		(Myspell, Hunspell, others)		*spell-TRY*
 		Vim does not use the TRY item, it is ignored.  For making
-		suggestions the actual characters in the words are used.
+		suggestions the actual characters in the words are used, that
+		is much more efficient.
 
 WORDCHARS	(Hunspell)				*spell-WORDCHARS*
 		Used to recognize words.  Vim doesn't need it, because there
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -2227,12 +2227,14 @@ 90.5	usr_90.txt	/*90.5*
 :map	map.txt	/*:map*
 :map!	map.txt	/*:map!*
 :map-<buffer>	map.txt	/*:map-<buffer>*
+:map-<expr>	map.txt	/*:map-<expr>*
 :map-<script>	map.txt	/*:map-<script>*
 :map-<silent>	map.txt	/*:map-<silent>*
 :map-<unique>	map.txt	/*:map-<unique>*
 :map-alt-keys	map.txt	/*:map-alt-keys*
 :map-arguments	map.txt	/*:map-arguments*
 :map-commands	map.txt	/*:map-commands*
+:map-expression	map.txt	/*:map-expression*
 :map-local	map.txt	/*:map-local*
 :map-modes	map.txt	/*:map-modes*
 :map-operator	map.txt	/*:map-operator*
@@ -3922,6 +3924,7 @@ E781	spell.txt	/*E781*
 E782	spell.txt	/*E782*
 E783	spell.txt	/*E783*
 E784	tabpage.txt	/*E784*
+E785	eval.txt	/*E785*
 E79	message.txt	/*E79*
 E80	message.txt	/*E80*
 E800	arabic.txt	/*E800*
@@ -4124,6 +4127,8 @@ Select-mode-mapping	visual.txt	/*Select-
 Session	starting.txt	/*Session*
 SessionLoad-variable	starting.txt	/*SessionLoad-variable*
 SessionLoadPost	autocmd.txt	/*SessionLoadPost*
+ShellCmdPost	autocmd.txt	/*ShellCmdPost*
+ShellFilterPost	autocmd.txt	/*ShellFilterPost*
 SourcePre	autocmd.txt	/*SourcePre*
 SpellFileMissing	autocmd.txt	/*SpellFileMissing*
 StdinReadPost	autocmd.txt	/*StdinReadPost*
@@ -4638,7 +4643,9 @@ compl-spelling	insert.txt	/*compl-spelli
 compl-tag	insert.txt	/*compl-tag*
 compl-vim	insert.txt	/*compl-vim*
 compl-whole-line	insert.txt	/*compl-whole-line*
+complete()	eval.txt	/*complete()*
 complete-functions	insert.txt	/*complete-functions*
+complete-items	insert.txt	/*complete-items*
 complete_add()	eval.txt	/*complete_add()*
 complete_check()	eval.txt	/*complete_check()*
 complex-change	change.txt	/*complex-change*
@@ -5491,6 +5498,7 @@ hebrew	hebrew.txt	/*hebrew*
 hebrew.txt	hebrew.txt	/*hebrew.txt*
 help	various.txt	/*help*
 help-context	help.txt	/*help-context*
+help-tags	tags	1
 help-translated	various.txt	/*help-translated*
 help-xterm-window	various.txt	/*help-xterm-window*
 help.txt	help.txt	/*help.txt*
@@ -6207,6 +6215,7 @@ new-items-7	version7.txt	/*new-items-7*
 new-line-continuation	version5.txt	/*new-line-continuation*
 new-location-list	version7.txt	/*new-location-list*
 new-manpage-trans	version7.txt	/*new-manpage-trans*
+new-map-expression	version7.txt	/*new-map-expression*
 new-matchparen	version7.txt	/*new-matchparen*
 new-more-unicode	version7.txt	/*new-more-unicode*
 new-multi-byte	version5.txt	/*new-multi-byte*
--- a/src/edit.c
+++ b/src/edit.c
@@ -141,6 +141,9 @@ static void ins_compl_set_original_text 
 static void ins_compl_addfrommatch __ARGS((void));
 static int  ins_compl_prep __ARGS((int c));
 static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
+#if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+static void ins_compl_add_list __ARGS((list_T *list));
+#endif
 static int  ins_compl_get_exp __ARGS((pos_T *ini));
 static void ins_compl_delete __ARGS((void));
 static void ins_compl_insert __ARGS((void));
@@ -2305,6 +2308,48 @@ ins_compl_make_cyclic()
     return count;
 }
 
+/*
+ * Start completion for the complete() function.
+ * "startcol" is where the matched text starts (1 is first column).
+ * "list" is the list of matches.
+ */
+    void
+set_completion(startcol, list)
+    int	    startcol;
+    list_T  *list;
+{
+    /* If already doing completions stop it. */
+    if (ctrl_x_mode != 0)
+	ins_compl_prep(' ');
+    ins_compl_clear();
+
+    if (stop_arrow() == FAIL)
+	return;
+
+    if (startcol > curwin->w_cursor.col)
+	startcol = curwin->w_cursor.col;
+    compl_col = startcol;
+    compl_length = curwin->w_cursor.col - startcol;
+    /* compl_pattern doesn't need to be set */
+    compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length);
+    if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
+			       -1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT) != OK)
+	return;
+
+    /* Handle like dictionary completion. */
+    ctrl_x_mode = CTRL_X_WHOLE_LINE;
+
+    ins_compl_add_list(list);
+    compl_matches = ins_compl_make_cyclic();
+    compl_started = TRUE;
+    compl_used_match = TRUE;
+
+    compl_curr_match = compl_first_match;
+    ins_complete(Ctrl_N);
+    out_flush();
+}
+
+
 /* "compl_match_array" points the currently displayed list of entries in the
  * popup menu.  It is NULL when there is no popup menu. */
 static pumitem_T *compl_match_array = NULL;
@@ -2837,6 +2882,8 @@ ins_compl_clear()
     vim_free(compl_leader);
     compl_leader = NULL;
     edit_submode_extra = NULL;
+    vim_free(compl_orig_text);
+    compl_orig_text = NULL;
 }
 
 /*
@@ -3283,7 +3330,6 @@ static void expand_by_function __ARGS((i
 /*
  * Execute user defined complete function 'completefunc' or 'omnifunc', and
  * get matches in "matches".
- * Return value is number of matches.
  */
     static void
 expand_by_function(type, base)
@@ -3292,13 +3338,8 @@ expand_by_function(type, base)
 {
     list_T      *matchlist;
     char_u	*args[2];
-    listitem_T	*li;
-    char_u	*p;
     char_u	*funcname;
     pos_T	pos;
-    int		dir = compl_direction;
-    char_u	*x;
-    int		icase;
 
     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
     if (*funcname == NUL)
@@ -3314,8 +3355,28 @@ expand_by_function(type, base)
     if (matchlist == NULL)
 	return;
 
+    ins_compl_add_list(matchlist);
+    list_unref(matchlist);
+}
+#endif /* FEAT_COMPL_FUNC */
+
+#if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+/*
+ * Add completions from a list.
+ * Unreferences the list.
+ */
+    static void
+ins_compl_add_list(list)
+    list_T	*list;
+{
+    listitem_T	*li;
+    int		icase;
+    char_u	*p;
+    char_u	*x;
+    int		dir = compl_direction;
+
     /* Go through the List with matches and add each of them. */
-    for (li = matchlist->lv_first; li != NULL; li = li->li_next)
+    for (li = list->lv_first; li != NULL; li = li->li_next)
     {
 	icase = p_ic;
 	if (li->li_tv.v_type == VAR_DICT && li->li_tv.vval.v_dict != NULL)
@@ -3341,10 +3402,8 @@ expand_by_function(type, base)
 	else if (did_emsg)
 	    break;
     }
-
-    list_unref(matchlist);
-}
-#endif /* FEAT_COMPL_FUNC */
+}
+#endif
 
 /*
  * Get the next expansion(s), using "compl_pattern".
@@ -3765,7 +3824,8 @@ ins_compl_get_exp(ini)
     /* If several matches were added (FORWARD) or the search failed and has
      * just been made cyclic then we have to move compl_curr_match to the next
      * or previous entry (if any) -- Acevedo */
-    compl_curr_match = compl_direction == FORWARD ? old_match->cp_next : old_match->cp_prev;
+    compl_curr_match = compl_direction == FORWARD ? old_match->cp_next
+							 : old_match->cp_prev;
     if (compl_curr_match == NULL)
 	compl_curr_match = old_match;
     return i;
@@ -4596,7 +4656,12 @@ ins_complete(c)
     else
 	msg_clr_cmdline();	/* necessary for "noshowmode" */
 
+    /* RedrawingDisabled may be set when invoked through complete(). */
+    n = RedrawingDisabled;
+    RedrawingDisabled = 0;
     ins_compl_show_pum();
+    setcursor();
+    RedrawingDisabled = n;
 
     return OK;
 }
@@ -8082,7 +8147,7 @@ ins_mousescroll(up)
 #endif
 
 #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
-    void
+    static void
 ins_tabline(c)
     int		c;
 {
--- a/src/structs.h
+++ b/src/structs.h
@@ -928,6 +928,7 @@ struct mapblock
     int		m_noremap;	/* if non-zero no re-mapping for m_str */
     char	m_silent;	/* <silent> used, don't echo commands */
 #ifdef FEAT_EVAL
+    char	m_expr;		/* <expr> used, m_str is an expression */
     scid_T	m_script_ID;	/* ID of script where map was defined */
 #endif
 };
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 9)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 9, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 10)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 10, compiled "