diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 37e849c..a1a76f9 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -4616,6 +4616,11 @@
 			nr	get information for this quickfix list; zero
 				means the current quickfix list and '$' means
 				the last quickfix list
+			text	use 'errorformat' to extract items from the
+				text and return the resulting entries. The
+				value can be a string with one line or a list
+				with multiple lines. The current quickfix list
+				is not modified.
 			title	get the list title
 			winid	get the |window-ID| (if opened)
 			all	all of the above quickfix properties
@@ -4624,6 +4629,9 @@
 		To get the number of lists in the quickfix stack, set 'nr' to
 		'$' in {what}. The 'nr' value in the returned dictionary
 		contains the quickfix stack size.
+		When 'text' is specified, all the other items are ignored. The
+		returned dictionary contains the entry 'items' with the list
+		of entries.
 		In case of error processing {what}, an empty dictionary is
 		returned.
 
diff --git a/src/evalfunc.c b/src/evalfunc.c
index c900b53..d11d96d 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -4810,7 +4810,7 @@
     {
 	if (rettv_list_alloc(rettv) == OK)
 	    if (is_qf || wp != NULL)
-		(void)get_errorlist(wp, -1, rettv->vval.v_list);
+		(void)get_errorlist(NULL, wp, -1, rettv->vval.v_list);
     }
     else
     {
diff --git a/src/proto/quickfix.pro b/src/proto/quickfix.pro
index 4418cc4..ad6ad34 100644
--- a/src/proto/quickfix.pro
+++ b/src/proto/quickfix.pro
@@ -21,7 +21,7 @@
 void ex_cnext(exarg_T *eap);
 void ex_cfile(exarg_T *eap);
 void ex_vimgrep(exarg_T *eap);
-int get_errorlist(win_T *wp, int qf_idx, list_T *list);
+int get_errorlist(qf_info_T *qi, win_T *wp, int qf_idx, list_T *list);
 int get_errorlist_properties(win_T *wp, dict_T *what, dict_T *retdict);
 int set_errorlist(win_T *wp, list_T *list, int action, char_u *title, dict_T *what);
 int set_ref_in_quickfix(int copyID);
diff --git a/src/quickfix.c b/src/quickfix.c
index 42077c2..71270d9 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2762,7 +2762,7 @@
     {
 	qfp = qfl->qf_start;
 	qfpnext = qfp->qf_next;
-	if (qfl->qf_title != NULL && !stop)
+	if (!stop)
 	{
 	    vim_free(qfp->qf_text);
 	    stop = (qfp == qfpnext);
@@ -4556,20 +4556,24 @@
  * If qf_idx is -1, use the current list. Otherwise, use the specified list.
  */
     int
-get_errorlist(win_T *wp, int qf_idx, list_T *list)
+get_errorlist(qf_info_T *qi_arg, win_T *wp, int qf_idx, list_T *list)
 {
-    qf_info_T	*qi = &ql_info;
+    qf_info_T	*qi = qi_arg;
     dict_T	*dict;
     char_u	buf[2];
     qfline_T	*qfp;
     int		i;
     int		bufnum;
 
-    if (wp != NULL)
+    if (qi == NULL)
     {
-	qi = GET_LOC_LIST(wp);
-	if (qi == NULL)
-	    return FAIL;
+	qi = &ql_info;
+	if (wp != NULL)
+	{
+	    qi = GET_LOC_LIST(wp);
+	    if (qi == NULL)
+		return FAIL;
+	}
     }
 
     if (qf_idx == -1)
@@ -4628,6 +4632,45 @@
 };
 
 /*
+ * Parse text from 'di' and return the quickfix list items
+ */
+    static int
+qf_get_list_from_text(dictitem_T *di, dict_T *retdict)
+{
+    int		status = FAIL;
+    qf_info_T	*qi;
+
+    /* Only string and list values are supported */
+    if ((di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL)
+	    || (di->di_tv.v_type == VAR_LIST
+		&& di->di_tv.vval.v_list != NULL))
+    {
+	qi = (qf_info_T *)alloc((unsigned)sizeof(qf_info_T));
+	if (qi != NULL)
+	{
+	    vim_memset(qi, 0, (size_t)(sizeof(qf_info_T)));
+	    qi->qf_refcount++;
+
+	    if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, p_efm,
+			TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
+	    {
+		list_T	*l = list_alloc();
+		if (l != NULL)
+		{
+		    (void)get_errorlist(qi, NULL, 0, l);
+		    dict_add_list(retdict, "items", l);
+		    status = OK;
+		}
+		qf_free(qi, 0);
+	    }
+	    free(qi);
+	}
+    }
+
+    return status;
+}
+
+/*
  * Return quickfix/location list details (title) as a
  * dictionary. 'what' contains the details to return. If 'list_idx' is -1,
  * then current list is used. Otherwise the specified list is used.
@@ -4641,6 +4684,9 @@
     dictitem_T	*di;
     int		flags = QF_GETLIST_NONE;
 
+    if ((di = dict_find(what, (char_u *)"text", -1)) != NULL)
+	return qf_get_list_from_text(di, retdict);
+
     if (wp != NULL)
     {
 	qi = GET_LOC_LIST(wp);
@@ -4726,7 +4772,7 @@
 	list_T	*l = list_alloc();
 	if (l != NULL)
 	{
-	    (void)get_errorlist(wp, qf_idx, l);
+	    (void)get_errorlist(qi, NULL, qf_idx, l);
 	    dict_add_list(retdict, "items", l);
 	}
 	else
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index 8fa7153..32b04c3 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -2519,3 +2519,29 @@
   call XaddQf_tests('c')
   call XaddQf_tests('l')
 endfunc
+
+" Test for getting the quickfix list items from some text without modifying
+" the quickfix stack
+func XgetListFromText(cchar)
+  call s:setup_commands(a:cchar)
+  call g:Xsetlist([], 'f')
+
+  let l = g:Xgetlist({'text' : "File1:10:Line10"}).items
+  call assert_equal(1, len(l))
+  call assert_equal('Line10', l[0].text)
+
+  let l = g:Xgetlist({'text' : ["File2:20:Line20", "File2:30:Line30"]}).items
+  call assert_equal(2, len(l))
+  call assert_equal(30, l[1].lnum)
+
+  call assert_equal({}, g:Xgetlist({'text' : 10}))
+  call assert_equal({}, g:Xgetlist({'text' : []}))
+
+  " Make sure that the quickfix stack is not modified
+  call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr)
+endfunc
+
+func Test_get_list_from_text()
+  call XgetListFromText('c')
+  call XgetListFromText('l')
+endfunc
diff --git a/src/version.c b/src/version.c
index 68f3534..5df1fc3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1006,
+/**/
     1005,
 /**/
     1004,
