From a65576059ffd417d98091029f400bc931b4251ca Mon Sep 17 00:00:00 2001
From: Bram Moolenaar <Bram@vim.org>
Date: Sat, 4 Feb 2006 22:43:20 +0000
Subject: [PATCH] updated for version 7.0193

---
 runtime/doc/autocmd.txt                  |  11 +-
 runtime/doc/options.txt                  |   3 +-
 runtime/doc/tags                         |  15 +
 runtime/lang/menu_ja_jp.euc-jp.vim       |  20 +-
 runtime/lang/menu_japanese_japan.932.vim |  20 +-
 runtime/syntax/gnuplot.vim               |   2 +-
 src/edit.c                               | 221 ++++--
 src/globals.h                            |   4 +-
 src/po/ja.sjis.po                        | 834 ++++++++++++++++-------
 src/popupmenu.c                          |   2 +-
 src/quickfix.c                           |  58 +-
 src/version.h                            |   4 +-
 12 files changed, 893 insertions(+), 301 deletions(-)

diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 8735b5cab1..bc55a61a15 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -620,11 +620,12 @@ MenuPopup			Just before showing the popup menu (under the
 					c	Commmand line
 							*QuickFixCmdPre*
 QuickFixCmdPre			Before a quickfix command is run (|:make|,
-				|:grep|, |:grepadd|, |:vimgrep|,
-				|:vimgrepadd|). The pattern is matched against
-				the command being run.  When |:grep| is used
-				but 'grepprg' is set to "internal" it still
-				matches "grep".
+				|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
+				|:lgrepadd|, |:vimgrep|, |:lvimgrep|,
+				|:vimgrepadd|, |:vimgrepadd|). The pattern is
+				matched against the command being run.  When
+				|:grep| is used but 'grepprg' is set to
+				"internal" it still matches "grep".
 				This command cannot be used to set the
 				'makeprg' and 'grepprg' variables.
 				If this command causes an error, the quickfix
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 9bd3660262..2592850211 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -2943,7 +2943,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	also work well with a single file: >
 		:set grepprg=grep\ -nH
 <	Special value: When 'grepprg' is set to "internal" the |:grep| command
-	works like |:vimgrep| and |:grepadd| like |:vimgrepadd|.
+	works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like
+	|:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|.
 	See also the section |:make_makeprg|, since most of the comments there
 	apply equally to 'grepprg'.
 	For Win32, the default is "findstr /n" if "findstr.exe" can be found,
diff --git a/runtime/doc/tags b/runtime/doc/tags
index bbb9190d8a..4d69b877e5 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1788,6 +1788,8 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
 :cabc	map.txt	/*:cabc*
 :cabclear	map.txt	/*:cabclear*
 :cad	quickfix.txt	/*:cad*
+:caddb	quickfix.txt	/*:caddb*
+:caddbuffer	quickfix.txt	/*:caddbuffer*
 :caddexpr	quickfix.txt	/*:caddexpr*
 :caddf	quickfix.txt	/*:caddf*
 :caddfile	quickfix.txt	/*:caddfile*
@@ -2105,6 +2107,8 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
 :lNfile	quickfix.txt	/*:lNfile*
 :la	editing.txt	/*:la*
 :lad	quickfix.txt	/*:lad*
+:laddb	quickfix.txt	/*:laddb*
+:laddbuffer	quickfix.txt	/*:laddbuffer*
 :laddexpr	quickfix.txt	/*:laddexpr*
 :laddf	quickfix.txt	/*:laddf*
 :laddfile	quickfix.txt	/*:laddfile*
@@ -2143,6 +2147,10 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
 :lfirst	quickfix.txt	/*:lfirst*
 :lg	quickfix.txt	/*:lg*
 :lgetfile	quickfix.txt	/*:lgetfile*
+:lgr	quickfix.txt	/*:lgr*
+:lgrep	quickfix.txt	/*:lgrep*
+:lgrepa	quickfix.txt	/*:lgrepa*
+:lgrepadd	quickfix.txt	/*:lgrepadd*
 :list	various.txt	/*:list*
 :ll	quickfix.txt	/*:ll*
 :lla	quickfix.txt	/*:lla*
@@ -2150,6 +2158,8 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
 :lli	quickfix.txt	/*:lli*
 :llist	quickfix.txt	/*:llist*
 :lm	map.txt	/*:lm*
+:lmak	quickfix.txt	/*:lmak*
+:lmake	quickfix.txt	/*:lmake*
 :lmap	map.txt	/*:lmap*
 :lmap_l	map.txt	/*:lmap_l*
 :lmapc	map.txt	/*:lmapc*
@@ -2185,6 +2195,10 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
 :ltag	tagsrch.txt	/*:ltag*
 :lu	map.txt	/*:lu*
 :lunmap	map.txt	/*:lunmap*
+:lv	quickfix.txt	/*:lv*
+:lvimgrep	quickfix.txt	/*:lvimgrep*
+:lvimgrepa	quickfix.txt	/*:lvimgrepa*
+:lvimgrepadd	quickfix.txt	/*:lvimgrepadd*
 :lw	quickfix.txt	/*:lw*
 :lwindow	quickfix.txt	/*:lwindow*
 :m	change.txt	/*:m*
@@ -5406,6 +5420,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*
diff --git a/runtime/lang/menu_ja_jp.euc-jp.vim b/runtime/lang/menu_ja_jp.euc-jp.vim
index 06be3ff427..38a65bfb18 100644
--- a/runtime/lang/menu_ja_jp.euc-jp.vim
+++ b/runtime/lang/menu_ja_jp.euc-jp.vim
@@ -2,7 +2,7 @@
 "
 " Menu Translations:	Japanese (EUC-JP)
 " Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:		29-Apr-2004.
+" Last Change:		04-Feb-2006.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
@@ -142,7 +142,23 @@ menutrans &Open<Tab>:copen		
 menutrans &Close<Tab>:cclose		ハト、ク、�(&C)<Tab>:cclose
 menutrans &Convert\ to\ HEX<Tab>:%!xxd	HEX、リハムエケ(&C)<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r	HEX、ォ、魴ユハムエケ(&R)<Tab>%!xxd\ -r
-menutrans &Set\ Compiler		・ウ・ム・、・鯊゚ト�(&S)
+menutrans Se&T\ Compiler		・ウ・ム・、・鯊゚ト�(&T)
+
+" Tools.Spelling Menu
+menutrans &Spelling			・ケ・レ・�ー(&S)
+menutrans &Spell\ Check\ On		・ケ・レ・�チ・ァ・テ・ッヘュク�(&S)
+menutrans Spell\ Check\ &Off		・ケ・レ・�チ・ァ・テ・ッヘュク�(&O)
+menutrans To\ &Next\ error<Tab>]s	シ。、ホ・ィ・鬘シ(&N)<Tab>]s
+menutrans To\ &Previous\ error<Tab>[s	チー、ホ・ィ・鬘シ(&P)<Tab>[s
+menutrans Suggest\ &Corrections<Tab>z?	ス、タオク�(&C)<Tab>z?
+menutrans &Repeat\ correction<Tab>:spellrepall	ス、タオ、ォ、�ヨ、ケ(&R)<Tab>:spellrepall
+menutrans Set\ language\ to\ "en"	クタク� "en"\ 、ヒタ゚ト熙ケ、�
+menutrans Set\ language\ to\ "en_au"	クタク� "en_au"\ 、ヒタ゚ト熙ケ、�
+menutrans Set\ language\ to\ "en_ca"	クタク� "en_ca"\ 、ヒタ゚ト熙ケ、�
+menutrans Set\ language\ to\ "en_gb"	クタク� "en_gb"\ 、ヒタ゚ト熙ケ、�
+menutrans Set\ language\ to\ "en_nz"	クタク� "en_nz"\ 、ヒタ゚ト熙ケ、�
+menutrans Set\ language\ to\ "en_us"	クタク� "en_us"\ 、ヒタ゚ト熙ケ、�
+menutrans &Find\ More\ Languages	ツセ、ホクタク�。コケ、�(&F)
 
 " Tools.Fold Menu
 menutrans &Folding			ダセ゚(&F)
diff --git a/runtime/lang/menu_japanese_japan.932.vim b/runtime/lang/menu_japanese_japan.932.vim
index 3fa21b6a52..7041f29b61 100644
--- a/runtime/lang/menu_japanese_japan.932.vim
+++ b/runtime/lang/menu_japanese_japan.932.vim
@@ -2,7 +2,7 @@
 "
 " Menu Translations:	Japanese (CP932)
 " Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:		29-Apr-2004.
+" Last Change:		04-Feb-2006.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
@@ -142,7 +142,23 @@ menutrans &Open<Tab>:copen		
 menutrans &Close<Tab>:cclose		閉じる(&C)<Tab>:cclose
 menutrans &Convert\ to\ HEX<Tab>:%!xxd	HEXへ変換(&C)<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r	HEXから逆変換(&R)<Tab>%!xxd\ -r
-menutrans &Set\ Compiler		コンパイラ設定(&S)
+menutrans Se&T\ Compiler		コンパイラ設定(&T)
+
+" Tools.Spelling Menu
+menutrans &Spelling			スペリング(&S)
+menutrans &Spell\ Check\ On		スペルチェック有効(&S)
+menutrans Spell\ Check\ &Off		スペルチェック有効(&O)
+menutrans To\ &Next\ error<Tab>]s	次のエラー(&N)<Tab>]s
+menutrans To\ &Previous\ error<Tab>[s	前のエラー(&P)<Tab>[s
+menutrans Suggest\ &Corrections<Tab>z?	修正候補(&C)<Tab>z?
+menutrans &Repeat\ correction<Tab>:spellrepall	修正を繰り返す(&R)<Tab>:spellrepall
+menutrans Set\ language\ to\ "en"	言語を\ "en"\ に設定する
+menutrans Set\ language\ to\ "en_au"	言語を\ "en_au"\ に設定する
+menutrans Set\ language\ to\ "en_ca"	言語を\ "en_ca"\ に設定する
+menutrans Set\ language\ to\ "en_gb"	言語を\ "en_gb"\ に設定する
+menutrans Set\ language\ to\ "en_nz"	言語を\ "en_nz"\ に設定する
+menutrans Set\ language\ to\ "en_us"	言語を\ "en_us"\ に設定する
+menutrans &Find\ More\ Languages	他の言語を検索する(&F)
 
 " Tools.Fold Menu
 menutrans &Folding			折畳み(&F)
diff --git a/runtime/syntax/gnuplot.vim b/runtime/syntax/gnuplot.vim
index a6fa716e29..5a381c7cd6 100644
--- a/runtime/syntax/gnuplot.vim
+++ b/runtime/syntax/gnuplot.vim
@@ -138,7 +138,7 @@ syn keyword gnuplotType		boxxy[errorbars] csplines dots fsteps histeps impulses
 syn keyword gnuplotType		line[s] linesp[oints] points poiinttype sbezier splines steps
 " w lt lw ls	      = optional
 syn keyword gnuplotType		vectors xerr[orbars] xyerr[orbars] yerr[orbars] financebars candlesticks vector
-syn keyword gnuplotType		errorb[ars surface
+syn keyword gnuplotType		errorb[ars] surface
 syn keyword gnuplotType		filledcurve[s] pm3d   x1 x2 y1 y2 xy closed
 syn keyword gnuplotType		at pi front
 syn keyword gnuplotType		errorlines xerrorlines yerrorlines xyerrorlines
diff --git a/src/edit.c b/src/edit.c
index f384229263..ee574ad6c9 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -87,6 +87,14 @@ static compl_T    *compl_first_match = NULL;
 static compl_T    *compl_curr_match = NULL;
 static compl_T    *compl_shown_match = NULL;
 
+/* When "compl_leader" is not NULL only matches that start with this string
+ * are used. */
+static char_u	  *compl_leader = NULL;
+
+static int	  compl_used_match;	/* Selected one of the matches.  When
+					   FALSE the match was edited or using
+					   the longest common string. */
+
 /* When the first completion is done "compl_started" is set.  When it's
  * FALSE the word to be completed must be located. */
 static int	  compl_started = FALSE;
@@ -112,9 +120,12 @@ static int  ins_compl_make_cyclic __ARGS((void));
 static void ins_compl_upd_pum __ARGS((void));
 static void ins_compl_del_pum __ARGS((void));
 static int  pum_wanted __ARGS((void));
+static int  pum_two_or_more __ARGS((void));
 static void ins_compl_dictionaries __ARGS((char_u *dict, char_u *pat, int dir, int flags, int thesaurus));
 static void ins_compl_free __ARGS((void));
 static void ins_compl_clear __ARGS((void));
+static int  ins_compl_bs __ARGS((void));
+static void ins_compl_addleader __ARGS((int c));
 static int  ins_compl_prep __ARGS((int c));
 static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
 static int  ins_compl_get_exp __ARGS((pos_T *ini, int dir));
@@ -673,13 +684,26 @@ edit(cmdchar, startln, count)
 	if (c == K_DOWN && pum_visible())
 	    c = Ctrl_N;
 
-	/* Prepare for or stop CTRL-X mode.  This doesn't do completion, but
-	 * it does fix up the text when finishing completion. */
-	if (c != K_IGNORE)
+	/* When using BS while the popup menu is wanted and still after the
+	 * character where completion started: Change the subset of matches to
+	 * what matches "compl_leader". */
+	if (compl_started && pum_wanted() && curwin->w_cursor.col > compl_col)
 	{
-	    if (ins_compl_prep(c))
+	    if ((c == K_BS || c == Ctrl_H) && ins_compl_bs())
+		continue;
+
+	    /* Editing the word. */
+	    if (!compl_used_match && vim_isprintc(c))
+	    {
+		ins_compl_addleader(c);
 		continue;
+	    }
 	}
+
+	/* Prepare for or stop CTRL-X mode.  This doesn't do completion, but
+	 * it does fix up the text when finishing completion. */
+	if (c != K_IGNORE && ins_compl_prep(c))
+	    continue;
 #endif
 
 	/* CTRL-\ CTRL-N goes to Normal mode,
@@ -2159,9 +2183,6 @@ ins_compl_del_pum()
     static int
 pum_wanted()
 {
-    compl_T     *compl;
-    int		i;
-
     /* 'completeopt' must contain "menu" */
     if (*p_cot == NUL)
 	return FALSE;
@@ -2173,6 +2194,17 @@ pum_wanted()
 #endif
 	    )
 	return FALSE;
+    return TRUE;
+}
+
+/*
+ * Return TRUE if there are two or more matches to be shown in the popup menu.
+ */
+    static int
+pum_two_or_more()
+{
+    compl_T     *compl;
+    int		i;
 
     /* Don't display the popup menu if there are no matches or there is only
      * one (ignoring the original text). */
@@ -2199,8 +2231,9 @@ ins_compl_show_pum()
     int		i;
     int		cur = -1;
     colnr_T	col;
+    int		lead_len = 0;
 
-    if (!pum_wanted())
+    if (!pum_wanted() || !pum_two_or_more())
 	return;
 
     /* Update the screen before drawing the popup menu over it. */
@@ -2211,12 +2244,18 @@ ins_compl_show_pum()
 	/* Need to build the popup menu list. */
 	compl_match_arraysize = 0;
 	compl = compl_first_match;
+	if (compl_leader != NULL)
+	    lead_len = STRLEN(compl_leader);
 	do
 	{
-	    if ((compl->cp_flags & ORIGINAL_TEXT) == 0)
+	    if ((compl->cp_flags & ORIGINAL_TEXT) == 0
+		    && (compl_leader == NULL
+			|| STRNCMP(compl->cp_str, compl_leader, lead_len) == 0))
 		++compl_match_arraysize;
 	    compl = compl->cp_next;
 	} while (compl != NULL && compl != compl_first_match);
+	if (compl_match_arraysize == 0)
+	    return;
 	compl_match_array = (char_u **)alloc((unsigned)(sizeof(char_u **)
 						    * compl_match_arraysize));
 	if (compl_match_array != NULL)
@@ -2225,7 +2264,10 @@ ins_compl_show_pum()
 	    compl = compl_first_match;
 	    do
 	    {
-		if ((compl->cp_flags & ORIGINAL_TEXT) == 0)
+		if ((compl->cp_flags & ORIGINAL_TEXT) == 0
+			&& (compl_leader == NULL
+			    || STRNCMP(compl->cp_str, compl_leader,
+							      lead_len) == 0))
 		{
 		    if (compl == compl_shown_match)
 			cur = i;
@@ -2238,21 +2280,10 @@ ins_compl_show_pum()
     else
     {
 	/* popup menu already exists, only need to find the current item.*/
-	i = 0;
-	compl = compl_first_match;
-	do
-	{
-	    if ((compl->cp_flags & ORIGINAL_TEXT) == 0)
-	    {
-		if (compl == compl_shown_match)
-		{
-		    cur = i;
-		    break;
-		}
-		++i;
-	    }
-	    compl = compl->cp_next;
-	} while (compl != NULL && compl != compl_first_match);
+	for (i = 0; i < compl_match_arraysize; ++i)
+	    if (compl_match_array[i] == compl_shown_match->cp_str)
+		break;
+	cur = i;
     }
 
     if (compl_match_array != NULL)
@@ -2472,6 +2503,8 @@ ins_compl_free()
 
     vim_free(compl_pattern);
     compl_pattern = NULL;
+    vim_free(compl_leader);
+    compl_leader = NULL;
 
     if (compl_first_match == NULL)
 	return;
@@ -2501,10 +2534,101 @@ ins_compl_clear()
     compl_matches = 0;
     vim_free(compl_pattern);
     compl_pattern = NULL;
+    vim_free(compl_leader);
+    compl_leader = NULL;
     save_sm = -1;
     edit_submode_extra = NULL;
 }
 
+/*
+ * Delete one character before the cursor and make a subset of the matches
+ * that match now.
+ * Returns TRUE if the work is done and another char to be got from the user.
+ */
+    static int
+ins_compl_bs()
+{
+    char_u	*line;
+    char_u	*p;
+
+    if (curwin->w_cursor.col <= compl_col + compl_length)
+    {
+	/* Deleted more than what was used to find matches, need to look for
+	 * matches all over again. */
+	ins_compl_free();
+	compl_started = FALSE;
+	compl_matches = 0;
+    }
+
+    line = ml_get_curline();
+    p = line + curwin->w_cursor.col;
+    mb_ptr_back(line, p);
+
+    vim_free(compl_leader);
+    compl_leader = vim_strnsave(line + compl_col, (p - line) - compl_col);
+    if (compl_leader != NULL)
+    {
+	ins_compl_del_pum();
+	ins_compl_delete();
+	ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
+
+	if (!compl_started)
+	{
+	    /* Matches were cleared, need to search for them now. */
+	    if (ins_complete(Ctrl_N) == FAIL)
+		compl_cont_status = 0;
+	    else
+	    {
+		/* Remove the completed word again. */
+		ins_compl_delete();
+		ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
+	    }
+	}
+
+	/* Show the popup menu with a different set of matches. */
+	ins_compl_show_pum();
+	compl_used_match = FALSE;
+
+	return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Append one character to the match leader.  May reduce the number of
+ * matches.
+ */
+    static void
+ins_compl_addleader(c)
+    int		c;
+{
+#ifdef FEAT_MBYTE
+    int		cc;
+
+    if (has_mbyte && (cc = (*mb_char2len)(c)) > 1)
+    {
+	char_u	buf[MB_MAXBYTES + 1];
+
+	(*mb_char2bytes)(c, buf);
+	buf[cc] = NUL;
+	ins_char_bytes(buf, cc);
+    }
+    else
+#endif
+	ins_char(c);
+
+    vim_free(compl_leader);
+    compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+					    curwin->w_cursor.col - compl_col);
+    if (compl_leader != NULL)
+    {
+	/* Show the popup menu with a different set of matches. */
+	ins_compl_del_pum();
+	ins_compl_show_pum();
+	compl_used_match = FALSE;
+    }
+}
+
 /*
  * Prepare for Insert mode completion, or stop it.
  * Called just after typing a character in Insert mode.
@@ -3290,6 +3414,7 @@ ins_compl_delete()
 ins_compl_insert()
 {
     ins_bytes(compl_shown_match->cp_str + curwin->w_cursor.col - compl_col);
+    compl_used_match = TRUE;
 }
 
 /*
@@ -3317,6 +3442,8 @@ ins_compl_next(allow_get_expansion, count)
     int	    num_matches = -1;
     int	    i;
     int	    todo = count;
+    compl_T *found_compl = NULL;
+    int	    found_end = FALSE;
 
     if (allow_get_expansion)
     {
@@ -3332,32 +3459,46 @@ ins_compl_next(allow_get_expansion, count)
 	if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL)
 	{
 	    compl_shown_match = compl_shown_match->cp_next;
-	    if (compl_shown_match->cp_next != NULL
-			   && compl_shown_match->cp_next == compl_first_match)
-		break;
+	    found_end = (compl_first_match != NULL
+			   && (compl_shown_match->cp_next == compl_first_match
+			       || compl_shown_match == compl_first_match));
 	}
 	else if (compl_shows_dir == BACKWARD
 					&& compl_shown_match->cp_prev != NULL)
 	{
+	    found_end = (compl_shown_match == compl_first_match);
 	    compl_shown_match = compl_shown_match->cp_prev;
-	    if (compl_shown_match == compl_first_match)
-		break;
+	    found_end |= (compl_shown_match == compl_first_match);
 	}
 	else
 	{
 	    compl_pending = TRUE;
-	    if (allow_get_expansion)
+	    if (!allow_get_expansion)
+		return -1;
+
+	    num_matches = ins_compl_get_exp(&compl_startpos, compl_direction);
+	    if (compl_pending && compl_direction == compl_shows_dir)
+		compl_shown_match = compl_curr_match;
+	    found_end = FALSE;
+	}
+	if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
+		&& compl_leader != NULL
+		&& STRNCMP(compl_shown_match->cp_str,
+				     compl_leader, STRLEN(compl_leader)) != 0)
+	    ++todo;
+	else
+	    /* Remember a matching item. */
+	    found_compl = compl_shown_match;
+
+	/* Stop at the end of the list when we found a usable match. */
+	if (found_end)
+	{
+	    if (found_compl != NULL)
 	    {
-		num_matches = ins_compl_get_exp(&compl_startpos,
-							     compl_direction);
-		if (compl_pending)
-		{
-		    if (compl_direction == compl_shows_dir)
-			compl_shown_match = compl_curr_match;
-		}
+		compl_shown_match = found_compl;
+		break;
 	    }
-	    else
-		return -1;
+	    todo = 1;	    /* use first usable match after wrapping around */
 	}
     }
 
diff --git a/src/globals.h b/src/globals.h
index 82c42b2b65..83b62674e1 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -105,8 +105,8 @@ EXTERN colnr_T	dollar_vcol INIT(= 0);
  * Variables for Insert mode completion.
  */
 
-/* length of the text being completed (this is deleted to be replaced by the
- * match) */
+/* Length in bytes of the text being completed (this is deleted to be replaced
+ * by the match.) */
 EXTERN int	compl_length INIT(= 0);
 
 /* Set when character typed while looking for matches and it means we should
diff --git a/src/po/ja.sjis.po b/src/po/ja.sjis.po
index e47aee8bb3..56a4a63560 100644
--- a/src/po/ja.sjis.po
+++ b/src/po/ja.sjis.po
@@ -3,14 +3,14 @@
 # Do ":help uganda"  in Vim to read copying and usage conditions.
 # Do ":help credits" in Vim to see a list of people who contributed.
 #
-# MURAOKA Taro <koron@tka.att.ne.jp>, 2001-5.
-# Last Change: 05-Mar-2005.
+# MURAOKA Taro <koron@tka.att.ne.jp>, 2001-6.
+# Last Change: 05-Feb-2006.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Vim 7.0\n"
-"POT-Creation-Date: 2005-03-04 13:11+0900\n"
-"PO-Revision-Date: 2004-03-05 00:50+0900\n"
+"POT-Creation-Date: 2006-02-04 22:44+0900\n"
+"PO-Revision-Date: 2006-02-05 00:10+0900\n"
 "Last-Translator: MURAOKA Taro <koron@tka.att.ne.jp>\n"
 "Language-Team: MURAOKA Taro <koron@tka.att.ne.jp>\n"
 "MIME-Version: 1.0\n"
@@ -152,6 +152,9 @@ msgstr ""
 "\n"
 "# バッファリスト:\n"
 
+msgid "[Location List]"
+msgstr "[場所リスト]"
+
 msgid "[Error List]"
 msgstr "[エラーリスト]"
 
@@ -214,13 +217,8 @@ msgid " Keyword completion (^N^P)"
 msgstr " キーワード補完 (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^U^V^N^P)"
-msgstr " ^X モード (^E^Y^L^]^F^I^K^D^U^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " 局所キーワード補完 (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
+msgstr " ^X モード (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " 行(全体)補完 (^L^N^P)"
@@ -249,15 +247,24 @@ msgstr " 
 msgid " User defined completion (^U^N^P)"
 msgstr " ユーザ定義補完 (^U^N^P)"
 
+msgid " Omni completion (^O^N^P)"
+msgstr " オムニ補完 (^O^N^P)"
+
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " 綴り修正候補 (^S^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " 局所キーワード補完 (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "段落の最後にヒット"
 
-msgid "'thesaurus' option is empty"
-msgstr "'thesaurus' オプションが空です"
-
 msgid "'dictionary' option is empty"
 msgstr "'dictionary' オプションが空です"
 
+msgid "'thesaurus' option is empty"
+msgstr "'thesaurus' オプションが空です"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "辞書をスキャン中: %s"
@@ -321,7 +328,7 @@ msgid "E686: Argument of %s must be a List"
 msgstr "E686: %s の引数はリスト型でなければなりません"
 
 #, c-format
-msgid "E712: Argument of %s must be a List or Dictionaary"
+msgid "E712: Argument of %s must be a List or Dictionary"
 msgstr "E712: %s の引数はリスト型または辞書型でなければなりません"
 
 msgid "E713: Cannot use empty key for Dictionary"
@@ -362,6 +369,10 @@ msgstr "E734: 
 msgid "E130: Unknown function: %s"
 msgstr "E130: 未知の関数です: %s"
 
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: 不正な変数名です: %s"
+
 msgid "E687: Less targets than List items"
 msgstr "E687: ターゲットがリスト型内の要素よりも少ないです"
 
@@ -460,8 +471,9 @@ msgstr "E697: 
 msgid "E720: Missing colon in Dictionary: %s"
 msgstr "E720: 辞書型にコロンがありません: %s"
 
-msgid "E721: Duplicate key in Dictionary"
-msgstr "E721: 辞書型に重複キーがそんざいします"
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: 辞書型に重複キーがあります: \"%s\""
 
 #, c-format
 msgid "E722: Missing comma in Dictionary: %s"
@@ -571,12 +583,8 @@ msgid "E704: Funcref variable name must start with a capital: %s"
 msgstr "E704: 関数参照型変数名は大文字で始まらなければなりません: %s"
 
 #, c-format
-msgid "705: Variable name conflicts with existing function: %s"
-msgstr "705: 変数名が既存の関数名と衝突します: %s"
-
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: 不正な変数名です: %s"
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: 変数名が既存の関数名と衝突します: %s"
 
 #, c-format
 msgid "E706: Variable type mismatch for: %s"
@@ -625,7 +633,6 @@ msgstr "E131: 
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr "E132: 関数呼出の入れ子数が 'maxfuncdepth' を超えました"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "calling %s"
 msgstr "%s を実行中です"
@@ -642,7 +649,6 @@ msgstr "%s 
 msgid "%s returning %s"
 msgstr "%s が %s を返しました"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "continuing in %s"
 msgstr "%s の実行を継続中です"
@@ -657,6 +663,13 @@ msgstr ""
 "\n"
 "# グローバル変数:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tLast set from "
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  16進数 %02x,  8進数 %03o"
@@ -742,11 +755,6 @@ msgstr "
 msgid "Save As"
 msgstr "別名で保存"
 
-#. Overwriting a file that is loaded in another buffer is not a
-#. * good idea.
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: 同じ名前のファイルが他のバッファで読込まれています"
-
 msgid "Write partial file?"
 msgstr "ファイルを部分的に保存しますか?"
 
@@ -754,8 +762,16 @@ msgid "E140: Use ! to write partial buffer"
 msgstr "E140: バッファを部分的に保存するには ! を使ってください"
 
 #, c-format
-msgid "Overwrite existing file \"%.*s\"?"
-msgstr "既存のファイル \"%.*s\" を上書きしますか?"
+msgid "Overwrite existing file \"%s\"?"
+msgstr "既存のファイル \"%s\" を上書きしますか?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "スワップファイル \"%s\" が存在します. 上書きを強制しますか?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: スワップファイルが存在します: %s (:silent! を追加で上書)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -766,11 +782,11 @@ msgstr "E142: 
 
 #, c-format
 msgid ""
-"'readonly' option is set for \"%.*s\".\n"
+"'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"\"%.*s\" には 'readonly' オプションが設定されています\n"
-"強制的に上書きしますか?"
+"\"%s\" には 'readonly' オプションが設定されています.\n"
+"上書き強制をしますか?"
 
 msgid "Edit File"
 msgstr "ファイルを編集"
@@ -940,8 +956,8 @@ msgid "E750: First use :profile start <fname>"
 msgstr "E750: 初めに :profile start <fname> を実行してください"
 
 #, c-format
-msgid "Save changes to \"%.*s\"?"
-msgstr "変更を \"%.*s\" に保存しますか?"
+msgid "Save changes to \"%s\"?"
+msgstr "変更を \"%s\" に保存しますか?"
 
 msgid "Untitled"
 msgstr "無題"
@@ -1014,90 +1030,6 @@ msgstr "E167: :scriptencoding 
 msgid "E168: :finish used outside of a sourced file"
 msgstr "E168: :finish が取込スクリプト以外で使用されました"
 
-#, c-format
-msgid "Page %d"
-msgstr "%d ページ"
-
-msgid "No text to be printed"
-msgstr "印刷するテキストがありません"
-
-msgid "Printing page %d (%d%%)"
-msgstr "印刷中: ページ %d (%d%%)"
-
-#, c-format
-msgid " Copy %d of %d"
-msgstr " コピー %d (全 %d 中)"
-
-#, c-format
-msgid "Printed: %s"
-msgstr "印刷しました: %s"
-
-msgid "Printing aborted"
-msgstr "印刷が中止されました"
-
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: PostScript出力ファイルの書込みエラーです"
-
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: ファイル \"%s\" を開けません"
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: PostScriptのリソ\ースファイル \"%s\" を読込めません"
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: ファイル \"%s\" は PostScript リソ\ースファイルではありません"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: ファイル \"%s\" は対応していない PostScript リソ\ースファイルです"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: リソ\ースファイル \"%s\" はバージョンが異なります"
-
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: 互換性の無いマルチバイトエンコーディングと文字セットです"
-
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: マルチバイトエンコーディングでは printmbcharset を空にできません"
-
-msgid "E675: No default font specfifed for multi-byte printing."
-msgstr ""
-"E675: マルチバイト文字を印刷するためのデフォルトフォントが指定されていません"
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: PostScript出力用のファイルを開けません"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: ファイル \"%s\" を開けません"
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: PostScriptのリソ\ースファイル \"prolog.ps\" がみつかりません"
-
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: PostScriptのリソ\ースファイル \"cidfont.ps\" がみつかりません"
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: PostScriptのリソ\ースファイル \"%s.ps\" がみつかりません"
-
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: 印刷エンコード \"%s\" へ変換できません"
-
-msgid "Sending to printer..."
-msgstr "プリンタに送信中..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: PostScriptファイルの印刷に失敗しました"
-
-msgid "Print job sent."
-msgstr "印刷ジョブを送信しました."
-
 #, c-format
 msgid "Current %slanguage: \"%s\""
 msgstr "現在の %s言語: \"%s\""
@@ -1185,18 +1117,8 @@ msgstr "E177: 
 msgid "E178: Invalid default value for count"
 msgstr "E178: カウントの省略値が無効です"
 
-msgid "E179: argument required for complete"
-msgstr "E179: 補完のための引数が必要です"
-
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: 無効な補完指定です: %s"
-
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: 補完引数はカスタム補完でしか使用できません"
-
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: カスタム補完には引数として関数が必要です"
+msgid "E179: argument required for -complete"
+msgstr "E179: -補完のための引数が必要です"
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
@@ -1212,6 +1134,16 @@ msgstr "E183: 
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: そのユーザ定義コマンドはありません: %s"
 
+#, c-format
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: 無効な補完指定です: %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr "E468: 補完引数はカスタム補完でしか使用できません"
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: カスタム補完には引数として関数が必要です"
+
 #, c-format
 msgid "E185: Cannot find color scheme %s"
 msgstr "E185: カラースキーム %s がみつかりません"
@@ -1467,6 +1399,12 @@ msgstr " 
 msgid "[New File]"
 msgstr "[新ファイル]"
 
+msgid "[New DIRECTORY]"
+msgstr "[新規ディレクトリ]"
+
+msgid "[File too big]"
+msgstr "[ファイル過大]"
+
 msgid "[Permission Denied]"
 msgstr "[認可がありません]"
 
@@ -1516,8 +1454,9 @@ msgstr "[
 msgid "[crypted]"
 msgstr "[暗号化]"
 
-msgid "[CONVERSION ERROR]"
-msgstr "[変換エラー]"
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[%ld 行目で変換エラー]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
@@ -1703,8 +1642,8 @@ msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246: autocommand の FileChangedShell がバッファを削除しました"
 
 #, c-format
-msgid "E211: Warning: File \"%s\" no longer available"
-msgstr "E211: 警告: ファイル \"%s\" は既に存在しません"
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: ファイル \"%s\" は既に存在しません"
 
 #, c-format
 msgid ""
@@ -1712,21 +1651,27 @@ msgid ""
 "well"
 msgstr "W12: 警告: ファイル \"%s\" が変更されVimのバッファも変更されました"
 
+msgid "See \":help W12\" for more info."
+msgstr "詳細は \":help W12\" を参照してください"
+
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr "W11: 警告: ファイル \"%s\" は編集開始後に変更されました"
 
+msgid "See \":help W11\" for more info."
+msgstr "詳細は \":help W11\" を参照してください"
+
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr "W16: 警告: ファイル \"%s\" のモードが編集開始後に変更されました"
 
+msgid "See \":help W16\" for more info."
+msgstr "詳細は \":help W16\" を参照してください"
+
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr "W13: 警告: ファイル \"%s\" は編集開始後に作成されました"
 
-msgid "See \":help W11\" for more info."
-msgstr "詳細は \":help W11\" を参照してください"
-
 msgid "Warning"
 msgstr "警告"
 
@@ -1798,7 +1743,6 @@ msgstr "%s Auto commands for \"%s\""
 msgid "Executing %s"
 msgstr "%s を実行しています"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "autocommand %s"
 msgstr "autocommand %s"
@@ -2130,6 +2074,99 @@ msgstr "
 msgid "E256: Hangul automata ERROR"
 msgstr "E256: ハングルオートマトンエラー"
 
+msgid "E550: Missing colon"
+msgstr "E550: コロンがありません"
+
+msgid "E551: Illegal component"
+msgstr "E551: 不正な構\文要素です"
+
+msgid "E552: digit expected"
+msgstr "E552: 数値が必要です"
+
+#, c-format
+msgid "Page %d"
+msgstr "%d ページ"
+
+msgid "No text to be printed"
+msgstr "印刷するテキストがありません"
+
+msgid "Printing page %d (%d%%)"
+msgstr "印刷中: ページ %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " コピー %d (全 %d 中)"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "印刷しました: %s"
+
+msgid "Printing aborted"
+msgstr "印刷が中止されました"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: PostScript出力ファイルの書込みエラーです"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: ファイル \"%s\" を開けません"
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: PostScriptのリソ\ースファイル \"%s\" を読込めません"
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: ファイル \"%s\" は PostScript リソ\ースファイルではありません"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: ファイル \"%s\" は対応していない PostScript リソ\ースファイルです"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: リソ\ースファイル \"%s\" はバージョンが異なります"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: 互換性の無いマルチバイトエンコーディングと文字セットです"
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: マルチバイトエンコーディングでは printmbcharset を空にできません"
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr ""
+"E675: マルチバイト文字を印刷するためのデフォルトフォントが指定されていません"
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: PostScript出力用のファイルを開けません"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: ファイル \"%s\" を開けません"
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: PostScriptのリソ\ースファイル \"prolog.ps\" がみつかりません"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: PostScriptのリソ\ースファイル \"cidfont.ps\" がみつかりません"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: PostScriptのリソ\ースファイル \"%s.ps\" がみつかりません"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: 印刷エンコード \"%s\" へ変換できません"
+
+msgid "Sending to printer..."
+msgstr "プリンタに送信中..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: PostScriptファイルの印刷に失敗しました"
+
+msgid "Print job sent."
+msgstr "印刷ジョブを送信しました."
+
 msgid "Add a new database"
 msgstr "新データベースを追加"
 
@@ -2326,6 +2363,9 @@ msgstr "
 msgid "linenr out of range"
 msgstr "範囲外の行番号です"
 
+msgid "not allowed in the Vim sandbox"
+msgstr "サンドボックスでは許されません"
+
 #, c-format
 msgid "E370: Could not load library %s"
 msgstr "E370: ライブラリ %s をロードできませんでした"
@@ -2570,6 +2610,10 @@ msgstr ""
 "E281: TCL エラー: 終了コードが整数値ではありません!? vim-dev@vim.org "
 "に報告してください"
 
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: 終了コード %d"
+
 msgid "cannot get line"
 msgstr "行を取得できません"
 
@@ -2586,8 +2630,8 @@ msgstr "E573: 
 msgid "E251: VIM instance registry property is badly formed.  Deleted!"
 msgstr "E251: VIM 実体の登録プロパティが不正です. 消去しました!"
 
-msgid "Unknown option"
-msgstr "未知のオプションです"
+msgid "Unknown option argument"
+msgstr "未知のオプション引数です"
 
 msgid "Too many edit arguments"
 msgstr "編集引数が多過ぎます"
@@ -2595,8 +2639,8 @@ msgstr "
 msgid "Argument missing after"
 msgstr "引数がありません"
 
-msgid "Garbage after option"
-msgstr "オプションの後にゴミがあります"
+msgid "Garbage after option argument"
+msgstr "オプション引数の後にゴミがあります"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr "\"+command\", \"-c command\", \"--cmd command\" の引数が多過ぎます"
@@ -2604,6 +2648,10 @@ msgstr "\"+command\", \"-c command\", \"--cmd command\" 
 msgid "Invalid argument for"
 msgstr "無効な引数です: "
 
+#, c-format
+msgid "%d files to edit\n"
+msgstr "%d 個のファイルが編集を控えています\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "このVimにはdiff機能\がありません(コンパイル時設定)."
 
@@ -2627,10 +2675,6 @@ msgstr "Vim: 
 msgid "Vim: Warning: Input is not from a terminal\n"
 msgstr "Vim: 警告: 端末からの入力ではありません\n"
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d 個のファイルが編集を控えています\n"
-
 #. just in case..
 msgid "pre-vimrc command line"
 msgstr "vimrc前のコマンドライン"
@@ -2964,25 +3008,6 @@ msgstr "--role <role>\t
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\t異なるGTK widgetでVimを開く"
 
-msgid ""
-"\n"
-"Arguments recognised by kvim (KDE version):\n"
-msgstr ""
-"\n"
-"kvimによって解釈される引数(KDEバージョン):\n"
-
-msgid "-black\t\tUse reverse video"
-msgstr "-black\t\t反転画面を使用する"
-
-msgid "-tip\t\t\tDisplay the tip dialog on startup"
-msgstr "-tip\t\t\t起動時にチップダイアログを表\示する"
-
-msgid "-notip\t\tDisable the tip dialog"
-msgstr "-notip\t\tチップダイアログを無効にする"
-
-msgid "--display <display>\tRun vim on <display>"
-msgstr "--display <display>\t<display> でvimを実行する"
-
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <親のタイトル>\tVimを親アプリケーションの中で起動する"
 
@@ -3404,6 +3429,10 @@ msgstr "
 msgid "E317: pointer block id wrong 2"
 msgstr "E317: ポインタブロックのIDが間違っています 2"
 
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: \"%s\" のシンボリックリンクがループになっています"
+
 msgid "E325: ATTENTION"
 msgstr "E325: 注意"
 
@@ -3492,16 +3521,16 @@ msgid ""
 "&Open Read-Only\n"
 "&Edit anyway\n"
 "&Recover\n"
+"&Delete it\n"
 "&Quit\n"
-"&Abort\n"
-"&Delete it"
+"&Abort"
 msgstr ""
 "読込専用で開く(&O)\n"
 "とにかく編集する(&E)\n"
 "復活させる(&R)ecover\n"
+"削除する(&D)\n"
 "終了する(&Q)\n"
-"中止する(&A)\n"
-"消去する(&D)"
+"中止する(&A)"
 
 msgid "E326: Too many swap files found"
 msgstr "E326: スワップファイルが多数見つかりました"
@@ -3512,8 +3541,9 @@ msgstr "E327: 
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: メニューは他のモードにだけあります"
 
-msgid "E329: No menu of that name"
-msgstr "E329: その名前のメニューはありません"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: \"%s\" というメニューはありません"
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: メニューパスはサブメニューを生じるべきではありません"
@@ -3561,9 +3591,6 @@ msgstr "%s 
 msgid "line %4ld:"
 msgstr "行 %4ld:"
 
-msgid "[string too long]"
-msgstr "[文字列が長過ぎます]"
-
 #, c-format
 msgid "E354: Invalid register name: '%s'"
 msgstr "E354: 無効なレジスタ名: '%s'"
@@ -3574,20 +3601,18 @@ msgstr "
 msgid "Interrupt: "
 msgstr "割込み: "
 
-msgid "Hit ENTER to continue"
-msgstr "続けるにはENTERを押してください"
-
-msgid "Hit ENTER or type command to continue"
+msgid "Press ENTER or type command to continue"
 msgstr "続けるにはENTERを押すかコマンドを入力してください"
 
+#, c-format
+msgid "%s line %ld"
+msgstr "%s 行 %ld"
+
 msgid "-- More --"
 msgstr "-- 継続 --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: 行送り, SPACE/b: ページ送り, d/u: 半ページ送り, q: 終了)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: 行送り, SPACE: ページ送り, d: 半ページ送り, q: 終了)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: 画面/ページ/行 下, b/uk: 上, q: 終了"
 
 msgid "Question"
 msgstr "質問"
@@ -3625,9 +3650,21 @@ msgstr "
 msgid "E338: Sorry, no file browser in console mode"
 msgstr "E338: コンソ\ールモードではファイルブラウザを使えません, ごめんなさい"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: printf() の引数が不十\分です"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: pirntf() の引数が多過ぎます"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: 警告: 読込専用ファイルを変更します"
 
+msgid "Type number or click with mouse (<Enter> cancels): "
+msgstr "数値を入力するかマウスをクリックしてください (<Enter> でキャンセル): "
+
+msgid "Choice number (<Enter> cancels): "
+msgstr "番号を選択してください (<Enter> でキャンセル): "
+
 msgid "1 more line"
 msgstr "1 行 追加しました"
 
@@ -3737,15 +3774,6 @@ msgstr "E346: cdpath
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: パスにはこれ以上 \"%s\" というファイルがありません"
 
-msgid "E550: Missing colon"
-msgstr "E550: コロンがありません"
-
-msgid "E551: Illegal component"
-msgstr "E551: 不正な構\文要素です"
-
-msgid "E552: digit expected"
-msgstr "E552: 数値が必要です"
-
 #. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
 msgstr "Netbeans #2 に接続できません"
@@ -3768,6 +3796,12 @@ msgstr "E658: 
 msgid "E505: "
 msgstr "E505: "
 
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: 'operatorfunc' オプションが空です"
+
+msgid "E775: Eval feature not available"
+msgstr "E775: 式評価機能\が無効になっています"
+
 msgid "Warning: terminal cannot highlight"
 msgstr "警告: 使用している端末はハイライトできません"
 
@@ -3837,9 +3871,16 @@ msgstr "%ld 
 msgid "freeing %ld lines"
 msgstr "%ld 行を開放中"
 
+msgid "block of 1 line yanked"
+msgstr "1 行のブロックがヤンクされました"
+
 msgid "1 line yanked"
 msgstr "1 行がヤンクされました"
 
+#, c-format
+msgid "block of %ld lines yanked"
+msgstr "%ld 行のブロックがヤンクされました"
+
 #, c-format
 msgid "%ld lines yanked"
 msgstr "%ld 行がヤンクされました"
@@ -3914,13 +3955,6 @@ msgstr "E519: 
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: modeline では許可されません"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tLast set from "
-
 msgid "E521: Number required after ="
 msgstr "E521: = の後には数字が必要です"
 
@@ -4159,14 +4193,6 @@ msgstr "Vim: 
 msgid "Opening the X display took %ld msec"
 msgstr "Xサーバへの接続に %ld ミリ秒かかりました"
 
-#. KDE sometimes produces X error that we want to ignore
-msgid ""
-"\n"
-"Vim: Got X error but we continue...\n"
-msgstr ""
-"\n"
-"Vim: X のエラーを検出しましたが続行します...\n"
-
 msgid ""
 "\n"
 "Vim: Got X error\n"
@@ -4336,10 +4362,6 @@ msgstr "
 msgid "E382: Cannot write, 'buftype' option is set"
 msgstr "E382: 'buftype' オプションが設定されているので書込みません"
 
-#
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: 検索パターンか区切り記号が不正です"
-
 msgid "E683: File name missing or invalid pattern"
 msgstr "E683: ファイル名が無いか無効なパターンです"
 
@@ -4350,6 +4372,9 @@ msgstr "
 msgid "E681: Buffer is not loaded"
 msgstr "E681: バッファは読み込まれませんでした"
 
+msgid "E777: String or List expected"
+msgstr "E777: 文字列かリストが必要です"
+
 msgid "E339: Pattern too long"
 msgstr "E339: パターンが長過ぎます"
 
@@ -4429,6 +4454,11 @@ msgstr "E678: %s%%[dxouU] 
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: %s%% の後に不正な文字がありました"
 
+#
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: %s[ の後に ] がありません"
+
 #, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: %s{...} 内に文法エラーがあります"
@@ -4494,12 +4524,6 @@ msgstr " 
 msgid "recording"
 msgstr "記録中"
 
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "上まで検索したので下に戻ります"
-
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "下まで検索したので上に戻ります"
-
 #, c-format
 msgid "E383: Invalid search string: %s"
 msgstr "E383: 無効な検索文字列です: %s"
@@ -4553,6 +4577,339 @@ msgstr "E388: 
 msgid "E389: Couldn't find pattern"
 msgstr "E389: パターンをみつけられません"
 
+msgid "E759: Format error in spell file"
+msgstr "E759: スペルファイルの書式エラーです"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: スペルファイルが切取られているようです"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "%s (%d 行目) に続くテキスト: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "%s (%d 行目) の affix 名が長過ぎます: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr ""
+"E761: affixファイルの FOL, LOW もしくは UPP のフォーマットにエラーがあります"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: FOL, LOW もしくは UPP の文字が範囲外です"
+
+msgid "Compressing word tree..."
+msgstr "単語ツリーを圧縮しています..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: すぺくチェックは無効化されています"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"警告: 単語リスト \"%s.%s.spl\" および \"%s.ascii.spl\" は見つかりません"
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "スペルファイル \"%s\" を読込中"
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: スペルファイルではないようです"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: 古いスペルファイルなので, アップデートしてください"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: より新しいバージョンの Vim 用のスペルファイルです"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: スペルファイルにサポートしていないセクションがあります"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "警告9: %s という範囲はサポートされていません"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "affix ファイル %s を読込中..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "%s (%d 行目) の単語を変換できませんでした: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "%s 内の次の変換はサポートされていません: %s から %s へ"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "%s 内の変換はサポートされていません"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "%s 内の %d 行目の FLAG に無効な値があります: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "%s 内の %d 行目にフラグの二重使用があります: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMAX value in %s line %d: %s"
+msgstr "%s の %d 行目の COMPOUNDMAX の値に誤りがあります: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "%s の %d 行目の COMPOUNDMIN の値に誤りがあります: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "%s の %d 行目の COMPOUNDSYLMAX の値に誤りがあります: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"%s の %d 行目の 連続 affix ブロックのフラグの組合せに違いがあります: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "%s の %d 行目に 重複した affix を検出しました: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND in %s line %d: "
+"%s"
+msgstr ""
+"%s の %d 行目の affix は BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND "
+"に使用してください: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "%s の %d 行目では Y か N が必要です: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "%s の %d 行目の 条件は壊れています: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "%s の %d 行目には REP(SAL) の回数が必要です"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "%s の %d 行目には MAP の回数が必要です"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "%s の %d 行目の MAP に重複した文字があります"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "%s の %d 行目に 認識できないか重複した項目があります: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "%d 行目に FOL/LOW/UPP がありません"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "SYLLABLE が指定されない COMPOUNDSYLMAX"
+
+msgid "Too many postponed prefixes"
+msgstr "遅延後置子が多すぎます"
+
+msgid "Too many compound flags"
+msgstr "複合フラグが多過ぎます"
+
+msgid "Too many posponed prefixes and/or compound flags"
+msgstr "遅延後置子 と/もしくは 複合フラグが多すぎます"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "SOFO%s 行が %s にありません"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "SAL行 と SOFO行 が %s で両方指定されています"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "%s の %d 行の フラグが数値ではありません: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "%s の %d 行目の フラグが不正です: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "値 %s は他の .aff ファイルで使用されたのと異なります"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "辞書ファイル %s をスキャン中..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: %s には単語数がありません"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr "行 %6d, 単語 %6d - %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "%s の %d 行目で 重複単語がみつかりました: %s"
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "重複のうち最初の単語は %s の %d 行目です: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d 個の単語が見つかりました (%s 内)"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "非ASCII文字を含む %d 個の単語を無視しました (%s 内)"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "標準入力から読込み中..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "%s の %d 行目の 重複した /encoding= 行を無視しました: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "%s の %d 行目の 単語の後の /encoding= 行を無視しました: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "%s の %d 行目の 重複した /regions= 行を無視しました: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "%s の %d 行目, 範囲指定が多すぎます: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "%s の %d 行目の 重複した / 行を無視しました: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "%s の %d 行目 無効な nr 領域です: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "%s の %d 行目 認識不能\なフラグです: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "非ASCII文字を含む %d 個の単語を無視しました"
+
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "ノード %d 個(全 %d 個中) を圧縮しました; 残り %d (%d%%)"
+
+msgid "Reading back spell file..."
+msgstr "スペルファイルを逆読込中"
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "音声畳込みを実行中..."
+
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "音声畳込み後の総単語数: %ld"
+
+#, c-format
+msgid "Total number of words: %d"
+msgstr "総単語数: %d"
+
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "修正候補ファイル \"%s\" を書込み中..."
+
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "推定メモリ使用量: %d バイト"
+
+msgid "E751: Output file name must not have region name"
+msgstr "E751: 出力ファイル名には範囲名を含められません"
+
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: 範囲は 8 個までしかサポートされていません"
+
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: 無効な範囲です: %s"
+
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "警告: 複合フラグと NOBREAK が両方とも指定されました"
+
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "スペルファイル %s を書込み中..."
+
+msgid "Done!"
+msgstr "実行しました!"
+
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' には %ld 個のエントリはありません"
+
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: 単語の文字がスペルファイルと異なります"
+
+msgid "Sorry, no suggestions"
+msgstr "残念ですが, 修正候補はありません"
+
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "残念ですが, 修正候補は %ld 個しかありません"
+
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "\"%.*s\" を次へ変換:"
+
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
+
+msgid "E752: No previous spell replacement"
+msgstr "E752: スペル置換がまだ実行されていません"
+
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: みつかりません: %s"
+
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: .sug ファイルではないようです: %s"
+
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: 古い .sug ファイルなので, アップデートしてください"
+
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: より新しいバージョンの Vim 用の .sug ファイルです: %s"
+
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: .sug ファイルが .spl ファイルと一致しません: %s"
+
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: .sug ファイルの読込中にエラーが発生しました: %s"
+
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: MAP エントリに重複文字が存在します"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
 msgstr "E390: 不正な引数です: %s"
@@ -4763,13 +5120,6 @@ msgstr "  # pri kind tag"
 msgid "file\n"
 msgstr "ファイル\n"
 
-#.
-#. * Ask to select a tag from the list.
-#. * When using ":silent" assume that <CR> was entered.
-#.
-msgid "Enter nr of choice (<CR> to abort): "
-msgstr "選択する番号を入力してください (<CR>で中止): "
-
 msgid "E427: There is only one matching tag"
 msgstr "E427: 該当タグが1つだけしかありません"
 
@@ -5060,9 +5410,6 @@ msgstr "with Cocoa GUI."
 msgid "with (classic) GUI."
 msgstr "with (クラシック) GUI."
 
-msgid "with KDE GUI."
-msgstr "with KDE GUI."
-
 msgid "  Features included (+) or not (-):\n"
 msgstr "  機能\の一覧 有効(+)/無効(-)\n"
 
@@ -5439,6 +5786,9 @@ msgstr "E459: 
 msgid "E42: No Errors"
 msgstr "E42: エラーはありません"
 
+msgid "E776: No location list"
+msgstr "E776: 場所リストはありません"
+
 msgid "E43: Damaged match string"
 msgstr "E43: 該当文字列が破損しています"
 
@@ -5532,11 +5882,25 @@ msgstr "E744: NetBeans 
 msgid "E685: Internal error: %s"
 msgstr "E685: 内部エラーです: %s"
 
-msgid "E361: Crash intercepted; regexp too complex?"
-msgstr "E361: クラッシュにより中断; 正規表\現が複雑過ぎるかも?"
-
-msgid "E363: pattern caused out-of-stack error"
-msgstr "E363: パターンによるスタック不足エラーです"
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: パターンが 'maxmempattern' 以上のメモリを使用します"
 
 msgid "E749: empty buffer"
 msgstr "E749: バッファが空です"
+
+#
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: 検索パターンか区切り記号が不正です"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: 同じ名前のファイルが他のバッファで読込まれています"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: オプション '%s' は設定されていません"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "上まで検索したので下に戻ります"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "下まで検索したので上に戻ります"
diff --git a/src/popupmenu.c b/src/popupmenu.c
index a129d146ab..7024e55560 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -84,7 +84,7 @@ pum_display(array, size, selected, row, height, col)
     }
 
     /* don't display when we only have room for one line */
-    if (pum_height <= 1)
+    if (pum_height < 1 || (pum_height == 1 && size > 1))
 	return;
 
     /* Compute the width of the widest match. */
diff --git a/src/quickfix.c b/src/quickfix.c
index ca6cc40801..7136b7eff1 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2566,13 +2566,14 @@ buf_hide(buf)
 grep_internal(cmdidx)
     cmdidx_T	cmdidx;
 {
-    return ((cmdidx == CMD_grep || cmdidx == CMD_grepadd)
+    return ((cmdidx == CMD_grep || cmdidx == CMD_lgrep
+	     || cmdidx == CMD_grepadd || cmdidx == CMD_lgrepadd)
 	    && STRCMP("internal",
 			*curbuf->b_p_gp == NUL ? p_gp : curbuf->b_p_gp) == 0);
 }
 
 /*
- * Used for ":make", ":grep" and ":grepadd".
+ * Used for ":make", ":lmake", ":grep", ":lgrep", ":grepadd", and ":lgrepadd"
  */
     void
 ex_make(eap)
@@ -2581,14 +2582,19 @@ ex_make(eap)
     char_u	*fname;
     char_u	*cmd;
     unsigned	len;
+    win_T	*wp = NULL;
+    qf_info_T	*qi;
 #ifdef FEAT_AUTOCMD
     char_u	*au_name = NULL;
 
     switch (eap->cmdidx)
     {
 	case CMD_make: au_name = (char_u *)"make"; break;
+	case CMD_lmake: au_name = (char_u *)"lmake"; break;
 	case CMD_grep: au_name = (char_u *)"grep"; break;
+	case CMD_lgrep: au_name = (char_u *)"lgrep"; break;
 	case CMD_grepadd: au_name = (char_u *)"grepadd"; break;
+	case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
 	default: break;
     }
     if (au_name != NULL)
@@ -2609,6 +2615,15 @@ ex_make(eap)
 	return;
     }
 
+    if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
+	|| eap->cmdidx == CMD_lgrepadd)
+    {
+	qi = ll_get_or_alloc_list(curwin);
+	if (qi == NULL)
+	    return;
+	wp = curwin;
+    }
+
     autowrite_all();
     fname = get_mef_name();
     if (fname == NULL)
@@ -2647,10 +2662,12 @@ ex_make(eap)
     (void)char_avail();
 #endif
 
-    if (qf_init(NULL, fname, eap->cmdidx != CMD_make ? p_gefm : p_efm,
-					       eap->cmdidx != CMD_grepadd) > 0
+    if (qf_init(wp, fname, (eap->cmdidx != CMD_make
+			    && eap->cmdidx != CMD_lmake) ? p_gefm : p_efm,
+					   (eap->cmdidx != CMD_grepadd
+					    && eap->cmdidx != CMD_lgrepadd)) > 0
 	    && !eap->forceit)
-	qf_jump(NULL, 0, 0, FALSE);		/* display first error */
+	qf_jump(wp, 0, 0, FALSE);		/* display first error */
 
     mch_remove(fname);
     vim_free(fname);
@@ -2832,6 +2849,9 @@ ex_cfile(eap)
 
 /*
  * ":vimgrep {pattern} file(s)"
+ * ":vimgrepadd {pattern} file(s)"
+ * ":lvimgrep {pattern} file(s)"
+ * ":lvimgrepadd {pattern} file(s)"
  */
     void
 ex_vimgrep(eap)
@@ -2843,7 +2863,9 @@ ex_vimgrep(eap)
     char_u	*s;
     char_u	*p;
     int		fi;
+    qf_info_T	*qi = &ql_info;
     qfline_T	*prevp = NULL;
+    win_T	*wp = NULL;
     long	lnum;
     buf_T	*buf;
     int		duplicate_name = FALSE;
@@ -2859,12 +2881,13 @@ ex_vimgrep(eap)
     char_u	*au_name =  NULL;
     int		flags = 0;
     colnr_T	col;
-    qf_info_T	*qi = &ql_info;
 
     switch (eap->cmdidx)
     {
 	case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
+	case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
 	case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
+	case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
 	default: break;
     }
     if (au_name != NULL)
@@ -2876,6 +2899,15 @@ ex_vimgrep(eap)
     }
 #endif
 
+    if (eap->cmdidx == CMD_grep || eap->cmdidx == CMD_lvimgrep
+	|| eap->cmdidx == CMD_lgrepadd || eap->cmdidx == CMD_lvimgrepadd)
+    {
+	qi = ll_get_or_alloc_list(curwin);
+	if (qi == NULL)
+	    return;
+	wp = curwin;
+    }
+
     /* Get the search pattern: either white-separated or enclosed in // */
     regmatch.regprog = NULL;
     p = skip_vimgrep_pat(eap->arg, &s, &flags);
@@ -2897,7 +2929,8 @@ ex_vimgrep(eap)
 	goto theend;
     }
 
-    if ((eap->cmdidx != CMD_grepadd && eap->cmdidx != CMD_vimgrepadd)
+    if ((eap->cmdidx != CMD_grepadd && eap->cmdidx != CMD_lgrepadd && 
+	 eap->cmdidx != CMD_vimgrepadd && eap->cmdidx != CMD_lvimgrepadd)
 					|| qi->qf_curlist == qi->qf_listcount)
 	/* make place for a new list */
 	qf_new_list(qi);
@@ -3072,7 +3105,7 @@ ex_vimgrep(eap)
     if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
     {
 	if ((flags & VGR_NOJUMP) == 0)
-	    qf_jump(NULL, 0, 0, eap->forceit);
+	    qf_jump(wp, 0, 0, eap->forceit);
     }
     else
 	EMSG2(_(e_nomatch2), s);
@@ -3396,7 +3429,9 @@ set_errorlist(wp, list, action)
 
 /*
  * ":[range]cbuffer [bufnr]" command.
+ * ":[range]caddbuffer [bufnr]" command.
  * ":[range]lbuffer [bufnr]" command.
+ * ":[range]laddbuffer [bufnr]" command.
  */
     void
 ex_cbuffer(eap)
@@ -3405,7 +3440,7 @@ ex_cbuffer(eap)
     buf_T	*buf = NULL;
     qf_info_T	*qi = &ql_info;
 
-    if (eap->cmdidx == CMD_lbuffer)
+    if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_laddbuffer)
     {
 	qi = ll_get_or_alloc_list(curwin);
 	if (qi == NULL)
@@ -3431,7 +3466,10 @@ ex_cbuffer(eap)
 		|| eap->line2 < 1 || eap->line2 > buf->b_ml.ml_line_count)
 	    EMSG(_(e_invrange));
 	else
-	    qf_init_ext(qi, NULL, buf, NULL, p_efm, TRUE, eap->line1, eap->line2);
+	    qf_init_ext(qi, NULL, buf, NULL, p_efm,
+			(eap->cmdidx == CMD_cbuffer
+			 || eap->cmdidx == CMD_lbuffer),
+			eap->line1, eap->line2);
     }
 }
 
diff --git a/src/version.h b/src/version.h
index 48ae412a16..5d6c7f962d 100644
--- 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 Feb 3)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Feb 3, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Feb 4)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Feb 4, compiled "
-- 
GitLab