Patch 8.1.0213
Problem:    CTRL-W CR does not work properly in a quickfix window.
Solution:   Split the window if needed. (Jason Franklin)
Files:      src/normal.c, src/proto/quickfix.pro, src/quickfix.c,
            src/testdir/test_quickfix.vim, src/window.c


*** ../vim-8.1.0212/src/normal.c        Tue Jun 12 22:05:10 2018
--- src/normal.c        Wed Jul 25 22:14:24 2018
***************
*** 6202,6219 ****
        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
  #endif
      {
  #ifdef FEAT_CMDWIN
        /* In the cmdline window a <CR> executes the command. */
--- 6202,6213 ----
        cap->arg = FORWARD;
        nv_page(cap);
      }
  #if defined(FEAT_QUICKFIX)
!     /* 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. */
*** ../vim-8.1.0212/src/proto/quickfix.pro      Thu May 17 13:52:49 2018
--- src/proto/quickfix.pro      Wed Jul 25 22:14:24 2018
***************
*** 7,12 ****
--- 7,13 ----
  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);
*** ../vim-8.1.0212/src/quickfix.c      Sun Jul  8 18:20:18 2018
--- src/quickfix.c      Wed Jul 25 22:35:13 2018
***************
*** 3490,3495 ****
--- 3490,3531 ----
  }
  
  /*
+  * 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.
   * ":lwindow": open the location list window if we have locations to display,
*** ../vim-8.1.0212/src/testdir/test_quickfix.vim       Sun Jul  8 16:01:04 2018
--- src/testdir/test_quickfix.vim       Wed Jul 25 22:14:24 2018
***************
*** 3504,3506 ****
--- 3504,3524 ----
    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
*** ../vim-8.1.0212/src/window.c        Sun Jun 17 16:23:29 2018
--- src/window.c        Wed Jul 25 22:14:24 2018
***************
*** 520,542 ****
                break;
  #endif
  
      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
                break;
! 
  
  /* CTRL-W g  extended commands */
      case 'g':
--- 520,533 ----
                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 (bt_quickfix(curbuf))
!                   qf_view_result(TRUE);
                break;
! #endif
  
  /* CTRL-W g  extended commands */
      case 'g':
*** ../vim-8.1.0212/src/version.c       Wed Jul 25 22:02:32 2018
--- src/version.c       Wed Jul 25 22:23:40 2018
***************
*** 795,796 ****
--- 795,798 ----
  {   /* Add new patch number below this line */
+ /**/
+     213,
  /**/

-- 
You got to work at a mill?  Lucky!  I got sent back to work in the
acid-mines for my daily crust of stale bread... which not even the
birds would eat.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui