updated for version 7.0043
diff --git a/src/quickfix.c b/src/quickfix.c
index 8bb2bbe..0c5a050 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2269,7 +2269,12 @@
     int		duplicate_name = FALSE;
     int		using_dummy;
     int		found_match;
-    int		first_match = TRUE;
+    buf_T	*first_match_buf = NULL;
+    time_t	seconds = 0;
+#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+    char_u	*save_ei = NULL;
+    aco_save_T	aco;
+#endif
 
     /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
     save_cpo = p_cpo;
@@ -2330,24 +2335,59 @@
 	goto theend;
     }
 
+    seconds = (time_t)0;
     for (fi = 0; fi < fcount && !got_int; ++fi)
     {
+	if (time(NULL) > seconds)
+	{
+	    /* Display the file name every second or so. */
+	    seconds = time(NULL);
+	    msg_start();
+	    p = msg_strtrunc(fnames[fi]);
+	    if (p == NULL)
+		msg_outtrans(fnames[fi]);
+	    else
+	    {
+		msg_outtrans(p);
+		vim_free(p);
+	    }
+	    msg_clr_eos();
+	    msg_didout = FALSE;	    /* overwrite this message */
+	    msg_nowait = TRUE;	    /* don't wait for this message */
+	    msg_col = 0;
+	    out_flush();
+	}
+
 	buf = buflist_findname_exp(fnames[fi]);
 	if (buf == NULL || buf->b_ml.ml_mfp == NULL)
 	{
 	    /* Remember that a buffer with this name already exists. */
 	    duplicate_name = (buf != NULL);
+	    using_dummy = TRUE;
+
+#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+	    /* Don't do Filetype autocommands to avoid loading syntax and
+	     * indent scripts, a great speed improvement. */
+	    save_ei = au_event_disable(",Filetype");
+#endif
 
 	    /* Load file into a buffer, so that 'fileencoding' is detected,
 	     * autocommands applied, etc. */
 	    buf = load_dummy_buffer(fnames[fi]);
-	    using_dummy = TRUE;
+
+#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+	    au_event_restore(save_ei);
+#endif
 	}
 	else
 	    /* Use existing, loaded buffer. */
 	    using_dummy = FALSE;
+
 	if (buf == NULL)
-	    smsg((char_u *)_("Cannot open file \"%s\""), fnames[fi]);
+	{
+	    if (!got_int)
+		smsg((char_u *)_("Cannot open file \"%s\""), fnames[fi]);
+	}
 	else
 	{
 	    found_match = FALSE;
@@ -2382,10 +2422,15 @@
 
 	    if (using_dummy)
 	    {
+		if (found_match && first_match_buf == NULL)
+		    first_match_buf = buf;
 		if (duplicate_name)
+		{
 		    /* Never keep a dummy buffer if there is another buffer
 		     * with the same name. */
 		    wipe_dummy_buffer(buf);
+		    buf = NULL;
+		}
 		else if (!buf_hide(buf))
 		{
 		    /* When not hiding the buffer and no match was found we
@@ -2393,13 +2438,29 @@
 		     * there was a match and it wasn't the first one: only
 		     * unload the buffer. */
 		    if (!found_match)
+		    {
 			wipe_dummy_buffer(buf);
-		    else if (!first_match)
+			buf = NULL;
+		    }
+		    else if (buf != first_match_buf)
+		    {
 			unload_dummy_buffer(buf);
+			buf = NULL;
+		    }
 		}
+
+#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+		if (buf != NULL)
+		{
+		    /* The buffer is still loaded, the Filetype autocommands
+		     * need to be done now, in that buffer. */
+		    aucmd_prepbuf(&aco, buf);
+		    apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
+						     buf->b_fname, TRUE, buf);
+		    aucmd_restbuf(&aco);
+		}
+#endif
 	    }
-	    if (found_match)
-		first_match = FALSE;
 	}
     }