]> granicus.if.org Git - vim/commitdiff
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window v8.1.0213
authorBram Moolenaar <Bram@vim.org>
Wed, 25 Jul 2018 20:36:52 +0000 (22:36 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 25 Jul 2018 20:36:52 +0000 (22:36 +0200)
Problem:    CTRL-W CR does not work properly in a quickfix window.
Solution:   Split the window if needed. (Jason Franklin)

src/normal.c
src/proto/quickfix.pro
src/quickfix.c
src/testdir/test_quickfix.vim
src/version.c
src/window.c

index 4d51c33206b579759510daee37084308ac505c82..4e36d56074792598f33e3d7dd7d22e6ef9cb1201 100644 (file)
@@ -6202,18 +6202,12 @@ nv_down(cmdarg_T *cap)
        cap->arg = FORWARD;
        nv_page(cap);
     }
-    else
 #if defined(FEAT_QUICKFIX)
-    /* In a quickfix window a <CR> jumps to the error under the cursor. */
-    if (bt_quickfix(curbuf) && cap->cmdchar == CAR)
-    {
-       if (curwin->w_llist_ref == NULL)
-           do_cmdline_cmd((char_u *)".cc");    /* quickfix window */
-       else
-           do_cmdline_cmd((char_u *)".ll");    /* location list window */
-    }
-    else
+    /* Quickfix window only: view the result under the cursor. */
+    else if (bt_quickfix(curbuf) && cap->cmdchar == CAR)
+       qf_view_result(FALSE);
 #endif
+    else
     {
 #ifdef FEAT_CMDWIN
        /* In the cmdline window a <CR> executes the command. */
index d32655f0785d139b420464a489061e00041d1d7e..26a5de0bf65fb863afc3f4c25ed9b57e2c496854 100644 (file)
@@ -7,6 +7,7 @@ void qf_list(exarg_T *eap);
 void qf_age(exarg_T *eap);
 void qf_history(exarg_T *eap);
 void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after);
+void qf_view_result(int split);
 void ex_cwindow(exarg_T *eap);
 void ex_cclose(exarg_T *eap);
 void ex_copen(exarg_T *eap);
index f758980b483eb28b80fb452d9f92d2eb2851ac7c..aac1e3414f29ae8c6b7455865568892aa71dbb8f 100644 (file)
@@ -3489,6 +3489,42 @@ qf_types(int c, int nr)
     return buf;
 }
 
+/*
+ * When "split" is FALSE: Open the entry/result under the cursor.
+ * When "split" is TRUE: Open the entry/result under the cursor in a new window.
+ */
+    void
+qf_view_result(int split)
+{
+    qf_info_T   *qi = &ql_info;
+
+    if (!bt_quickfix(curbuf))
+       return;
+
+    if (IS_LL_WINDOW(curwin))
+       qi = GET_LOC_LIST(curwin);
+
+    if (qi == NULL || qi->qf_lists[qi->qf_curlist].qf_count == 0)
+    {
+       EMSG(_(e_quickfix));
+       return;
+    }
+
+    if (split)
+    {
+       char_u      cmd[32];
+
+       vim_snprintf((char *)cmd, sizeof(cmd), "split +%ld%s",
+               (long)curwin->w_cursor.lnum,
+               IS_LL_WINDOW(curwin) ? "ll" : "cc");
+       if (do_cmdline_cmd(cmd) == OK)
+           do_cmdline_cmd((char_u *) "clearjumps");
+       return;
+    }
+
+    do_cmdline_cmd((char_u *)(IS_LL_WINDOW(curwin) ? ".ll" : ".cc"));
+}
+
 /*
  * ":cwindow": open the quickfix window if we have errors to display,
  *            close it if not.
index c8f0984b0a10ff8ff0c778fbd6a6ed7b94c64583..d41815f3ce8b0204e8d563c2ba20a935f192fea6 100644 (file)
@@ -3504,3 +3504,21 @@ func Test_filter_clist()
   call assert_equal([' 1 abc:pat1:  '],
                        \ split(execute('filter /pat1/ clist'), "\n"))
 endfunc
+
+" Tests for the "CTRL-W <CR>" command.
+func Xview_result_split_tests(cchar)
+  call s:setup_commands(a:cchar)
+
+  " Test that "CTRL-W <CR>" in a qf/ll window fails with empty list.
+  call g:Xsetlist([])
+  Xopen
+  let l:win_count = winnr('$')
+  call assert_fails('execute "normal! \<C-W>\<CR>"', 'E42')
+  call assert_equal(l:win_count, winnr('$'))
+  Xclose
+endfunc
+
+func Test_view_result_split()
+  call Xview_result_split_tests('c')
+  call Xview_result_split_tests('l')
+endfunc
index 81ed54446b194b287ce8cd0a5b4cf96a82aa5147..830de26fcf9069c596c21583c1423b24058f07c8 100644 (file)
@@ -793,6 +793,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    213,
 /**/
     212,
 /**/
index f059b376632124fd0b3a12540facbeeb5c5a041b..e1781d3f46340c941cdc9c113917949b5d81428e 100644 (file)
@@ -520,23 +520,14 @@ wingotofile:
                break;
 #endif
 
+/* Quickfix window only: view the result under the cursor in a new split. */
+#if defined(FEAT_QUICKFIX)
     case K_KENTER:
     case CAR:
-#if defined(FEAT_QUICKFIX)
-               /*
-                * In a quickfix window a <CR> jumps to the error under the
-                * cursor in a new window.
-                */
                if (bt_quickfix(curbuf))
-               {
-                   sprintf((char *)cbuf, "split +%ld%s",
-                               (long)curwin->w_cursor.lnum,
-                               (curwin->w_llist_ref == NULL) ? "cc" : "ll");
-                   do_cmdline_cmd(cbuf);
-               }
-#endif
+                   qf_view_result(TRUE);
                break;
-
+#endif
 
 /* CTRL-W g  extended commands */
     case 'g':