Patch 8.0.1130
Problem:    The qf_jump() function is still too long.
Solution:   Split of parts to separate functions. (Yegappan Lakshmanan)
Files:      src/quickfix.c


*** ../vim-8.0.1129/src/quickfix.c      2017-09-16 20:54:47.114560316 +0200
--- src/quickfix.c      2017-09-20 22:41:03.407669519 +0200
***************
*** 1954,1961 ****
  
  /*
   * Get the next valid entry in the current quickfix/location list. The search
!  * starts from the current entry. If next_file is TRUE, then return the next
!  * valid entry in the next file in the list. Returns NULL on failure.
   */
      static qfline_T *
  get_next_valid_entry(
--- 1954,1960 ----
  
  /*
   * Get the next valid entry in the current quickfix/location list. The search
!  * starts from the current entry.  Returns NULL on failure.
   */
      static qfline_T *
  get_next_valid_entry(
***************
*** 1987,1995 ****
  
  /*
   * Get the previous valid entry in the current quickfix/location list. The
!  * search starts from the current entry. If prev_file is TRUE, then return the
!  * previous valid entry in the previous file in the list. Returns NULL on
!  * failure.
   */
      static qfline_T *
  get_prev_valid_entry(
--- 1986,1992 ----
  
  /*
   * Get the previous valid entry in the current quickfix/location list. The
!  * search starts from the current entry.  Returns NULL on failure.
   */
      static qfline_T *
  get_prev_valid_entry(
***************
*** 2065,2086 ****
  }
  
  /*
!  * Get n'th quickfix entry
   */
      static qfline_T *
  get_nth_entry(
        qf_info_T       *qi,
        int             errornr,
        qfline_T        *qf_ptr,
!       int             *qf_index)
  {
!     int               qf_idx = *qf_index;
  
      while (errornr < qf_idx && qf_idx > 1 && qf_ptr->qf_prev != NULL)
      {
        --qf_idx;
        qf_ptr = qf_ptr->qf_prev;
      }
      while (errornr > qf_idx &&
            qf_idx < qi->qf_lists[qi->qf_curlist].qf_count &&
            qf_ptr->qf_next != NULL)
--- 2062,2085 ----
  }
  
  /*
!  * Get n'th (errornr) quickfix entry
   */
      static qfline_T *
  get_nth_entry(
        qf_info_T       *qi,
        int             errornr,
        qfline_T        *qf_ptr,
!       int             *cur_qfidx)
  {
!     int               qf_idx = *cur_qfidx;
  
+     /* New error number is less than the current error number */
      while (errornr < qf_idx && qf_idx > 1 && qf_ptr->qf_prev != NULL)
      {
        --qf_idx;
        qf_ptr = qf_ptr->qf_prev;
      }
+     /* New error number is greater than the current error number */
      while (errornr > qf_idx &&
            qf_idx < qi->qf_lists[qi->qf_curlist].qf_count &&
            qf_ptr->qf_next != NULL)
***************
*** 2089,2095 ****
        qf_ptr = qf_ptr->qf_next;
      }
  
!     *qf_index = qf_idx;
      return qf_ptr;
  }
  
--- 2088,2094 ----
        qf_ptr = qf_ptr->qf_next;
      }
  
!     *cur_qfidx = qf_idx;
      return qf_ptr;
  }
  
***************
*** 2146,2151 ****
--- 2145,2486 ----
  }
  
  /*
+  * Find a suitable window for opening a file (qf_fnum) and jump to it.
+  * If the file is already opened in a window, jump to it.
+  */
+     static int
+ qf_jump_to_usable_window(int qf_fnum, int *opened_window)
+ {
+     win_T     *usable_win_ptr = NULL;
+     int               usable_win;
+     qf_info_T *ll_ref;
+     int               flags;
+     win_T     *win;
+     win_T     *altwin;
+ 
+     usable_win = 0;
+ 
+     ll_ref = curwin->w_llist_ref;
+     if (ll_ref != NULL)
+     {
+       /* Find a window using the same location list that is not a
+        * quickfix window. */
+       FOR_ALL_WINDOWS(usable_win_ptr)
+           if (usable_win_ptr->w_llist == ll_ref
+                   && !bt_quickfix(usable_win_ptr->w_buffer))
+           {
+               usable_win = 1;
+               break;
+           }
+     }
+ 
+     if (!usable_win)
+     {
+       /* Locate a window showing a normal buffer */
+       FOR_ALL_WINDOWS(win)
+           if (win->w_buffer->b_p_bt[0] == NUL)
+           {
+               usable_win = 1;
+               break;
+           }
+     }
+ 
+     /*
+      * If no usable window is found and 'switchbuf' contains "usetab"
+      * then search in other tabs.
+      */
+     if (!usable_win && (swb_flags & SWB_USETAB))
+     {
+       tabpage_T       *tp;
+       win_T   *wp;
+ 
+       FOR_ALL_TAB_WINDOWS(tp, wp)
+       {
+           if (wp->w_buffer->b_fnum == qf_fnum)
+           {
+               goto_tabpage_win(tp, wp);
+               usable_win = 1;
+               goto win_found;
+           }
+       }
+     }
+ win_found:
+ 
+     /*
+      * If there is only one window and it is the quickfix window, create a
+      * new one above the quickfix window.
+      */
+     if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win)
+     {
+       flags = WSP_ABOVE;
+       if (ll_ref != NULL)
+           flags |= WSP_NEWLOC;
+       if (win_split(0, flags) == FAIL)
+           return FAIL;                /* not enough room for window */
+       *opened_window = TRUE;  /* close it when fail */
+       p_swb = empty_option;   /* don't split again */
+       swb_flags = 0;
+       RESET_BINDING(curwin);
+       if (ll_ref != NULL)
+       {
+           /* The new window should use the location list from the
+            * location list window */
+           curwin->w_llist = ll_ref;
+           ll_ref->qf_refcount++;
+       }
+     }
+     else
+     {
+       if (curwin->w_llist_ref != NULL)
+       {
+           /* In a location window */
+           win = usable_win_ptr;
+           if (win == NULL)
+           {
+               /* Find the window showing the selected file */
+               FOR_ALL_WINDOWS(win)
+                   if (win->w_buffer->b_fnum == qf_fnum)
+                       break;
+               if (win == NULL)
+               {
+                   /* Find a previous usable window */
+                   win = curwin;
+                   do
+                   {
+                       if (win->w_buffer->b_p_bt[0] == NUL)
+                           break;
+                       if (win->w_prev == NULL)
+                           win = lastwin;      /* wrap around the top */
+                       else
+                           win = win->w_prev; /* go to previous window */
+                   } while (win != curwin);
+               }
+           }
+           win_goto(win);
+ 
+           /* If the location list for the window is not set, then set it
+            * to the location list from the location window */
+           if (win->w_llist == NULL)
+           {
+               win->w_llist = ll_ref;
+               ll_ref->qf_refcount++;
+           }
+       }
+       else
+       {
+ 
+           /*
+            * Try to find a window that shows the right buffer.
+            * Default to the window just above the quickfix buffer.
+            */
+           win = curwin;
+           altwin = NULL;
+           for (;;)
+           {
+               if (win->w_buffer->b_fnum == qf_fnum)
+                   break;
+               if (win->w_prev == NULL)
+                   win = lastwin;      /* wrap around the top */
+               else
+                   win = win->w_prev;  /* go to previous window */
+ 
+               if (IS_QF_WINDOW(win))
+               {
+                   /* Didn't find it, go to the window before the quickfix
+                    * window. */
+                   if (altwin != NULL)
+                       win = altwin;
+                   else if (curwin->w_prev != NULL)
+                       win = curwin->w_prev;
+                   else
+                       win = curwin->w_next;
+                   break;
+               }
+ 
+               /* Remember a usable window. */
+               if (altwin == NULL && !win->w_p_pvw
+                       && win->w_buffer->b_p_bt[0] == NUL)
+                   altwin = win;
+           }
+ 
+           win_goto(win);
+       }
+     }
+ 
+     return OK;
+ }
+ 
+ /*
+  * Edit the selected file or help file.
+  */
+     static int
+ qf_jump_edit_buffer(
+       qf_info_T       *qi,
+       qfline_T        *qf_ptr,
+       int             forceit,
+       win_T           *oldwin,
+       int             *opened_window,
+       int             *abort)
+ {
+     int               retval = OK;
+ 
+     if (qf_ptr->qf_type == 1)
+     {
+       /* Open help file (do_ecmd() will set b_help flag, readfile() will
+        * set b_p_ro flag). */
+       if (!can_abandon(curbuf, forceit))
+       {
+           no_write_message();
+           retval = FALSE;
+       }
+       else
+           retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
+                   ECMD_HIDE + ECMD_SET_HELP,
+                   oldwin == curwin ? curwin : NULL);
+     }
+     else
+     {
+       int old_qf_curlist = qi->qf_curlist;
+ 
+       retval = buflist_getfile(qf_ptr->qf_fnum,
+               (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+       if (qi != &ql_info && !win_valid_any_tab(oldwin))
+       {
+           EMSG(_("E924: Current window was closed"));
+           *abort = TRUE;
+           *opened_window = FALSE;
+       }
+       else if (old_qf_curlist != qi->qf_curlist
+               || !is_qf_entry_present(qi, qf_ptr))
+       {
+           if (qi == &ql_info)
+               EMSG(_("E925: Current quickfix was changed"));
+           else
+               EMSG(_("E926: Current location list was changed"));
+           *abort = TRUE;
+       }
+ 
+       if (*abort)
+           retval = FALSE;
+     }
+ 
+     return retval;
+ }
+ 
+ /*
+  * Goto the error line in the current file using either line/column number or 
a
+  * search pattern.
+  */
+     static void
+ qf_jump_goto_line(
+       linenr_T        qf_lnum,
+       int             qf_col,
+       char_u          qf_viscol,
+       char_u          *qf_pattern)
+ {
+     linenr_T          i;
+     char_u            *line;
+     colnr_T           screen_col;
+     colnr_T           char_col;
+ 
+     if (qf_pattern == NULL)
+     {
+       /*
+        * Go to line with error, unless qf_lnum is 0.
+        */
+       i = qf_lnum;
+       if (i > 0)
+       {
+           if (i > curbuf->b_ml.ml_line_count)
+               i = curbuf->b_ml.ml_line_count;
+           curwin->w_cursor.lnum = i;
+       }
+       if (qf_col > 0)
+       {
+           curwin->w_cursor.col = qf_col - 1;
+ #ifdef FEAT_VIRTUALEDIT
+           curwin->w_cursor.coladd = 0;
+ #endif
+           if (qf_viscol == TRUE)
+           {
+               /*
+                * Check each character from the beginning of the error
+                * line up to the error column.  For each tab character
+                * found, reduce the error column value by the length of
+                * a tab character.
+                */
+               line = ml_get_curline();
+               screen_col = 0;
+               for (char_col = 0; char_col < curwin->w_cursor.col; ++char_col)
+               {
+                   if (*line == NUL)
+                       break;
+                   if (*line++ == '\t')
+                   {
+                       curwin->w_cursor.col -= 7 - (screen_col % 8);
+                       screen_col += 8 - (screen_col % 8);
+                   }
+                   else
+                       ++screen_col;
+               }
+           }
+           check_cursor();
+       }
+       else
+           beginline(BL_WHITE | BL_FIX);
+     }
+     else
+     {
+       pos_T save_cursor;
+ 
+       /* Move the cursor to the first line in the buffer */
+       save_cursor = curwin->w_cursor;
+       curwin->w_cursor.lnum = 0;
+       if (!do_search(NULL, '/', qf_pattern, (long)1,
+                   SEARCH_KEEP, NULL, NULL))
+           curwin->w_cursor = save_cursor;
+     }
+ }
+ 
+ /*
+  * Display quickfix list index and size message
+  */
+     static void
+ qf_jump_print_msg(
+       qf_info_T       *qi,
+       int             qf_index,
+       qfline_T        *qf_ptr,
+       buf_T           *old_curbuf,
+       linenr_T        old_lnum)
+ {
+     linenr_T          i;
+     int                       len;
+ 
+     /* Update the screen before showing the message, unless the screen
+      * scrolled up. */
+     if (!msg_scrolled)
+       update_topline_redraw();
+     sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+           qi->qf_lists[qi->qf_curlist].qf_count,
+           qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+           (char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr));
+     /* Add the message, skipping leading whitespace and newlines. */
+     len = (int)STRLEN(IObuff);
+     qf_fmt_text(skipwhite(qf_ptr->qf_text), IObuff + len, IOSIZE - len);
+ 
+     /* Output the message.  Overwrite to avoid scrolling when the 'O'
+      * flag is present in 'shortmess'; But when not jumping, print the
+      * whole message. */
+     i = msg_scroll;
+     if (curbuf == old_curbuf && curwin->w_cursor.lnum == old_lnum)
+       msg_scroll = TRUE;
+     else if (!msg_scrolled && shortmess(SHM_OVERALL))
+       msg_scroll = FALSE;
+     msg_attr_keep(IObuff, 0, TRUE);
+     msg_scroll = i;
+ }
+ 
+ /*
   * jump to a quickfix line
   * if dir == FORWARD go "errornr" valid entries forward
   * if dir == BACKWARD go "errornr" valid entries backward
***************
*** 2160,2190 ****
        int             errornr,
        int             forceit)
  {
-     qf_info_T         *ll_ref;
      qfline_T          *qf_ptr;
      qfline_T          *old_qf_ptr;
      int                       qf_index;
      int                       old_qf_index;
-     linenr_T          i;
      buf_T             *old_curbuf;
      linenr_T          old_lnum;
-     colnr_T           screen_col;
-     colnr_T           char_col;
-     char_u            *line;
      char_u            *old_swb = p_swb;
      unsigned          old_swb_flags = swb_flags;
      int                       opened_window = FALSE;
-     win_T             *win;
-     win_T             *altwin;
-     int                       flags;
      win_T             *oldwin = curwin;
      int                       print_message = TRUE;
-     int                       len;
  #ifdef FEAT_FOLDING
      int                       old_KeyTyped = KeyTyped; /* getting file may 
reset it */
  #endif
!     int                       ok = OK;
!     int                       usable_win;
  
      if (qi == NULL)
        qi = &ql_info;
--- 2495,2515 ----
        int             errornr,
        int             forceit)
  {
      qfline_T          *qf_ptr;
      qfline_T          *old_qf_ptr;
      int                       qf_index;
      int                       old_qf_index;
      buf_T             *old_curbuf;
      linenr_T          old_lnum;
      char_u            *old_swb = p_swb;
      unsigned          old_swb_flags = swb_flags;
      int                       opened_window = FALSE;
      win_T             *oldwin = curwin;
      int                       print_message = TRUE;
  #ifdef FEAT_FOLDING
      int                       old_KeyTyped = KeyTyped; /* getting file may 
reset it */
  #endif
!     int                       retval = OK;
  
      if (qi == NULL)
        qi = &ql_info;
***************
*** 2223,2232 ****
       * For ":helpgrep" find a help window or open one.
       */
      if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) || cmdmod.tab != 
0))
-     {
        if (jump_to_help_window(qi, &opened_window) == FAIL)
            goto theend;
-     }
  
      /*
       * If currently in the quickfix window, find another window to show the
--- 2548,2555 ----
***************
*** 2234,2241 ****
       */
      if (bt_quickfix(curbuf) && !opened_window)
      {
-       win_T *usable_win_ptr = NULL;
- 
        /*
         * If there is no file specified, we don't know where to go.
         * But do advance, otherwise ":cn" gets stuck.
--- 2557,2562 ----
***************
*** 2243,2396 ****
        if (qf_ptr->qf_fnum == 0)
            goto theend;
  
!       usable_win = 0;
! 
!       ll_ref = curwin->w_llist_ref;
!       if (ll_ref != NULL)
!       {
!           /* Find a window using the same location list that is not a
!            * quickfix window. */
!           FOR_ALL_WINDOWS(usable_win_ptr)
!               if (usable_win_ptr->w_llist == ll_ref
!                       && !bt_quickfix(usable_win_ptr->w_buffer))
!               {
!                   usable_win = 1;
!                   break;
!               }
!       }
! 
!       if (!usable_win)
!       {
!           /* Locate a window showing a normal buffer */
!           FOR_ALL_WINDOWS(win)
!               if (win->w_buffer->b_p_bt[0] == NUL)
!               {
!                   usable_win = 1;
!                   break;
!               }
!       }
! 
!       /*
!        * If no usable window is found and 'switchbuf' contains "usetab"
!        * then search in other tabs.
!        */
!       if (!usable_win && (swb_flags & SWB_USETAB))
!       {
!           tabpage_T   *tp;
!           win_T       *wp;
! 
!           FOR_ALL_TAB_WINDOWS(tp, wp)
!           {
!               if (wp->w_buffer->b_fnum == qf_ptr->qf_fnum)
!               {
!                   goto_tabpage_win(tp, wp);
!                   usable_win = 1;
!                   goto win_found;
!               }
!           }
!       }
! win_found:
! 
!       /*
!        * If there is only one window and it is the quickfix window, create a
!        * new one above the quickfix window.
!        */
!       if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win)
!       {
!           flags = WSP_ABOVE;
!           if (ll_ref != NULL)
!               flags |= WSP_NEWLOC;
!           if (win_split(0, flags) == FAIL)
!               goto failed;            /* not enough room for window */
!           opened_window = TRUE;       /* close it when fail */
!           p_swb = empty_option;       /* don't split again */
!           swb_flags = 0;
!           RESET_BINDING(curwin);
!           if (ll_ref != NULL)
!           {
!               /* The new window should use the location list from the
!                * location list window */
!               curwin->w_llist = ll_ref;
!               ll_ref->qf_refcount++;
!           }
!       }
!       else
!       {
!           if (curwin->w_llist_ref != NULL)
!           {
!               /* In a location window */
!               win = usable_win_ptr;
!               if (win == NULL)
!               {
!                   /* Find the window showing the selected file */
!                   FOR_ALL_WINDOWS(win)
!                       if (win->w_buffer->b_fnum == qf_ptr->qf_fnum)
!                           break;
!                   if (win == NULL)
!                   {
!                       /* Find a previous usable window */
!                       win = curwin;
!                       do
!                       {
!                           if (win->w_buffer->b_p_bt[0] == NUL)
!                               break;
!                           if (win->w_prev == NULL)
!                               win = lastwin;  /* wrap around the top */
!                           else
!                               win = win->w_prev; /* go to previous window */
!                       } while (win != curwin);
!                   }
!               }
!               win_goto(win);
! 
!               /* If the location list for the window is not set, then set it
!                * to the location list from the location window */
!               if (win->w_llist == NULL)
!               {
!                   win->w_llist = ll_ref;
!                   ll_ref->qf_refcount++;
!               }
!           }
!           else
!           {
! 
!           /*
!            * Try to find a window that shows the right buffer.
!            * Default to the window just above the quickfix buffer.
!            */
!           win = curwin;
!           altwin = NULL;
!           for (;;)
!           {
!               if (win->w_buffer->b_fnum == qf_ptr->qf_fnum)
!                   break;
!               if (win->w_prev == NULL)
!                   win = lastwin;      /* wrap around the top */
!               else
!                   win = win->w_prev;  /* go to previous window */
! 
!               if (IS_QF_WINDOW(win))
!               {
!                   /* Didn't find it, go to the window before the quickfix
!                    * window. */
!                   if (altwin != NULL)
!                       win = altwin;
!                   else if (curwin->w_prev != NULL)
!                       win = curwin->w_prev;
!                   else
!                       win = curwin->w_next;
!                   break;
!               }
! 
!               /* Remember a usable window. */
!               if (altwin == NULL && !win->w_p_pvw
!                                          && win->w_buffer->b_p_bt[0] == NUL)
!                   altwin = win;
!           }
! 
!           win_goto(win);
!           }
!       }
      }
  
      /*
--- 2564,2571 ----
        if (qf_ptr->qf_fnum == 0)
            goto theend;
  
!       if (qf_jump_to_usable_window(qf_ptr->qf_fnum, &opened_window) == FAIL)
!           goto failed;
      }
  
      /*
***************
*** 2402,2546 ****
  
      if (qf_ptr->qf_fnum != 0)
      {
!       if (qf_ptr->qf_type == 1)
!       {
!           /* Open help file (do_ecmd() will set b_help flag, readfile() will
!            * set b_p_ro flag). */
!           if (!can_abandon(curbuf, forceit))
!           {
!               no_write_message();
!               ok = FALSE;
!           }
!           else
!               ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
!                                          ECMD_HIDE + ECMD_SET_HELP,
!                                          oldwin == curwin ? curwin : NULL);
!       }
!       else
!       {
!           int old_qf_curlist = qi->qf_curlist;
!           int is_abort = FALSE;
! 
!           ok = buflist_getfile(qf_ptr->qf_fnum,
!                           (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
!           if (qi != &ql_info && !win_valid_any_tab(oldwin))
!           {
!               EMSG(_("E924: Current window was closed"));
!               is_abort = TRUE;
!               opened_window = FALSE;
!           }
!           else if (old_qf_curlist != qi->qf_curlist
!                   || !is_qf_entry_present(qi, qf_ptr))
!           {
!               if (qi == &ql_info)
!                   EMSG(_("E925: Current quickfix was changed"));
!               else
!                   EMSG(_("E926: Current location list was changed"));
!               is_abort = TRUE;
!           }
  
!           if (is_abort)
!           {
!               ok = FALSE;
!               qi = NULL;
!               qf_ptr = NULL;
!           }
        }
      }
  
!     if (ok == OK)
      {
        /* When not switched to another buffer, still need to set pc mark */
        if (curbuf == old_curbuf)
            setpcmark();
  
!       if (qf_ptr->qf_pattern == NULL)
!       {
!           /*
!            * Go to line with error, unless qf_lnum is 0.
!            */
!           i = qf_ptr->qf_lnum;
!           if (i > 0)
!           {
!               if (i > curbuf->b_ml.ml_line_count)
!                   i = curbuf->b_ml.ml_line_count;
!               curwin->w_cursor.lnum = i;
!           }
!           if (qf_ptr->qf_col > 0)
!           {
!               curwin->w_cursor.col = qf_ptr->qf_col - 1;
! #ifdef FEAT_VIRTUALEDIT
!               curwin->w_cursor.coladd = 0;
! #endif
!               if (qf_ptr->qf_viscol == TRUE)
!               {
!                   /*
!                    * Check each character from the beginning of the error
!                    * line up to the error column.  For each tab character
!                    * found, reduce the error column value by the length of
!                    * a tab character.
!                    */
!                   line = ml_get_curline();
!                   screen_col = 0;
!                   for (char_col = 0; char_col < curwin->w_cursor.col; 
++char_col)
!                   {
!                       if (*line == NUL)
!                           break;
!                       if (*line++ == '\t')
!                       {
!                           curwin->w_cursor.col -= 7 - (screen_col % 8);
!                           screen_col += 8 - (screen_col % 8);
!                       }
!                       else
!                           ++screen_col;
!                   }
!               }
!               check_cursor();
!           }
!           else
!               beginline(BL_WHITE | BL_FIX);
!       }
!       else
!       {
!           pos_T save_cursor;
! 
!           /* Move the cursor to the first line in the buffer */
!           save_cursor = curwin->w_cursor;
!           curwin->w_cursor.lnum = 0;
!           if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1,
!                                                     SEARCH_KEEP, NULL, NULL))
!               curwin->w_cursor = save_cursor;
!       }
  
  #ifdef FEAT_FOLDING
        if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped)
            foldOpenCursor();
  #endif
        if (print_message)
!       {
!           /* Update the screen before showing the message, unless the screen
!            * scrolled up. */
!           if (!msg_scrolled)
!               update_topline_redraw();
!           sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
!                   qi->qf_lists[qi->qf_curlist].qf_count,
!                   qf_ptr->qf_cleared ? _(" (line deleted)") : "",
!                   (char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr));
!           /* Add the message, skipping leading whitespace and newlines. */
!           len = (int)STRLEN(IObuff);
!           qf_fmt_text(skipwhite(qf_ptr->qf_text), IObuff + len, IOSIZE - len);
! 
!           /* Output the message.  Overwrite to avoid scrolling when the 'O'
!            * flag is present in 'shortmess'; But when not jumping, print the
!            * whole message. */
!           i = msg_scroll;
!           if (curbuf == old_curbuf && curwin->w_cursor.lnum == old_lnum)
!               msg_scroll = TRUE;
!           else if (!msg_scrolled && shortmess(SHM_OVERALL))
!               msg_scroll = FALSE;
!           msg_attr_keep(IObuff, 0, TRUE);
!           msg_scroll = i;
!       }
      }
      else
      {
--- 2577,2608 ----
  
      if (qf_ptr->qf_fnum != 0)
      {
!       int abort = FALSE;
  
!       retval = qf_jump_edit_buffer(qi, qf_ptr, forceit, oldwin,
!                                               &opened_window, &abort);
!       if (abort)
!       {
!           qi = NULL;
!           qf_ptr = NULL;
        }
      }
  
!     if (retval == OK)
      {
        /* When not switched to another buffer, still need to set pc mark */
        if (curbuf == old_curbuf)
            setpcmark();
  
!       qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col, qf_ptr->qf_viscol,
!                                                       qf_ptr->qf_pattern);
  
  #ifdef FEAT_FOLDING
        if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped)
            foldOpenCursor();
  #endif
        if (print_message)
!           qf_jump_print_msg(qi, qf_index, qf_ptr, old_curbuf, old_lnum);
      }
      else
      {
*** ../vim-8.0.1129/src/version.c       2017-09-19 22:07:59.547740631 +0200
--- src/version.c       2017-09-20 22:40:54.123727431 +0200
***************
*** 763,764 ****
--- 763,766 ----
  {   /* Add new patch number below this line */
+ /**/
+     1130,
  /**/

-- 
Apathy Error: Don't bother striking any key.

 /// 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