diff options
Diffstat (limited to 'data/vim/patches/8.1.0461')
-rw-r--r-- | data/vim/patches/8.1.0461 | 4568 |
1 files changed, 0 insertions, 4568 deletions
diff --git a/data/vim/patches/8.1.0461 b/data/vim/patches/8.1.0461 deleted file mode 100644 index bf1088431..000000000 --- a/data/vim/patches/8.1.0461 +++ /dev/null @@ -1,4568 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0461 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0461 -Problem: Quickfix code uses too many /* */ comments. -Solution: Change to // comments. (Yegappan Lakshmanan) -Files: src/quickfix.c - - -*** ../vim-8.1.0460/src/quickfix.c 2018-10-07 14:38:43.714247899 +0200 ---- src/quickfix.c 2018-10-07 20:20:56.652633675 +0200 -*************** -*** 27,46 **** - typedef struct qfline_S qfline_T; - struct qfline_S - { -! qfline_T *qf_next; /* pointer to next error in the list */ -! qfline_T *qf_prev; /* pointer to previous error in the list */ -! linenr_T qf_lnum; /* line number where the error occurred */ -! int qf_fnum; /* file number for the line */ -! int qf_col; /* column where the error occurred */ -! int qf_nr; /* error number */ -! char_u *qf_module; /* module name for this error */ -! char_u *qf_pattern; /* search pattern for the error */ -! char_u *qf_text; /* description of the error */ -! char_u qf_viscol; /* set to TRUE if qf_col is screen column */ -! char_u qf_cleared; /* set to TRUE if line has been deleted */ -! char_u qf_type; /* type of the error (mostly 'E'); 1 for -! :helpgrep */ -! char_u qf_valid; /* valid error message detected */ - }; - - /* ---- 27,46 ---- - typedef struct qfline_S qfline_T; - struct qfline_S - { -! qfline_T *qf_next; // pointer to next error in the list -! qfline_T *qf_prev; // pointer to previous error in the list -! linenr_T qf_lnum; // line number where the error occurred -! int qf_fnum; // file number for the line -! int qf_col; // column where the error occurred -! int qf_nr; // error number -! char_u *qf_module; // module name for this error -! char_u *qf_pattern; // search pattern for the error -! char_u *qf_text; // description of the error -! char_u qf_viscol; // set to TRUE if qf_col is screen column -! char_u qf_cleared; // set to TRUE if line has been deleted -! char_u qf_type; // type of the error (mostly 'E'); 1 for -! // :helpgrep -! char_u qf_valid; // valid error message detected - }; - - /* -*************** -*** 60,75 **** - */ - typedef struct qf_list_S - { -! int_u qf_id; /* Unique identifier for this list */ -! qfline_T *qf_start; /* pointer to the first error */ -! qfline_T *qf_last; /* pointer to the last error */ -! qfline_T *qf_ptr; /* pointer to the current error */ -! int qf_count; /* number of errors (0 means empty list) */ -! int qf_index; /* current index in the error list */ -! int qf_nonevalid; /* TRUE if not a single valid entry found */ -! char_u *qf_title; /* title derived from the command that created -! * the error list or set by setqflist */ -! typval_T *qf_ctx; /* context set by setqflist/setloclist */ - - struct dir_stack_T *qf_dir_stack; - char_u *qf_directory; ---- 60,75 ---- - */ - typedef struct qf_list_S - { -! int_u qf_id; // Unique identifier for this list -! qfline_T *qf_start; // pointer to the first error -! qfline_T *qf_last; // pointer to the last error -! qfline_T *qf_ptr; // pointer to the current error -! int qf_count; // number of errors (0 means empty list) -! int qf_index; // current index in the error list -! int qf_nonevalid; // TRUE if not a single valid entry found -! char_u *qf_title; // title derived from the command that created -! // the error list or set by setqflist -! typval_T *qf_ctx; // context set by setqflist/setloclist - - struct dir_stack_T *qf_dir_stack; - char_u *qf_directory; -*************** -*** 87,108 **** - */ - struct qf_info_S - { -! /* -! * Count of references to this list. Used only for location lists. -! * When a location list window reference this list, qf_refcount -! * will be 2. Otherwise, qf_refcount will be 1. When qf_refcount -! * reaches 0, the list is freed. -! */ - int qf_refcount; -! int qf_listcount; /* current number of lists */ -! int qf_curlist; /* current error list */ - qf_list_T qf_lists[LISTCOUNT]; - }; - -! static qf_info_T ql_info; /* global quickfix list */ -! static int_u last_qf_id = 0; /* Last used quickfix list id */ - -! #define FMT_PATTERNS 11 /* maximum number of % recognized */ - - /* - * Structure used to hold the info of one part of 'errorformat' ---- 87,106 ---- - */ - struct qf_info_S - { -! // Count of references to this list. Used only for location lists. -! // When a location list window reference this list, qf_refcount -! // will be 2. Otherwise, qf_refcount will be 1. When qf_refcount -! // reaches 0, the list is freed. - int qf_refcount; -! int qf_listcount; // current number of lists -! int qf_curlist; // current error list - qf_list_T qf_lists[LISTCOUNT]; - }; - -! static qf_info_T ql_info; // global quickfix list -! static int_u last_qf_id = 0; // Last used quickfix list id - -! #define FMT_PATTERNS 11 // maximum number of % recognized - - /* - * Structure used to hold the info of one part of 'errorformat' -*************** -*** 110,138 **** - typedef struct efm_S efm_T; - struct efm_S - { -! regprog_T *prog; /* pre-formatted part of 'errorformat' */ -! efm_T *next; /* pointer to next (NULL if last) */ -! char_u addr[FMT_PATTERNS]; /* indices of used % patterns */ -! char_u prefix; /* prefix of this format line: */ -! /* 'D' enter directory */ -! /* 'X' leave directory */ -! /* 'A' start of multi-line message */ -! /* 'E' error message */ -! /* 'W' warning message */ -! /* 'I' informational message */ -! /* 'C' continuation line */ -! /* 'Z' end of multi-line message */ -! /* 'G' general, unspecific message */ -! /* 'P' push file (partial) message */ -! /* 'Q' pop/quit file (partial) message */ -! /* 'O' overread (partial) message */ -! char_u flags; /* additional flags given in prefix */ -! /* '-' do not include this line */ -! /* '+' include whole line in message */ -! int conthere; /* %> used */ - }; - -! static efm_T *fmt_start = NULL; /* cached across qf_parse_line() calls */ - - static void qf_new_list(qf_info_T *qi, char_u *qf_title); - static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid); ---- 108,136 ---- - typedef struct efm_S efm_T; - struct efm_S - { -! regprog_T *prog; // pre-formatted part of 'errorformat' -! efm_T *next; // pointer to next (NULL if last) -! char_u addr[FMT_PATTERNS]; // indices of used % patterns -! char_u prefix; // prefix of this format line: -! // 'D' enter directory -! // 'X' leave directory -! // 'A' start of multi-line message -! // 'E' error message -! // 'W' warning message -! // 'I' informational message -! // 'C' continuation line -! // 'Z' end of multi-line message -! // 'G' general, unspecific message -! // 'P' push file (partial) message -! // 'Q' pop/quit file (partial) message -! // 'O' overread (partial) message -! char_u flags; // additional flags given in prefix -! // '-' do not include this line -! // '+' include whole line in message -! int conthere; // %> used - }; - -! static efm_T *fmt_start = NULL; // cached across qf_parse_line() calls - - static void qf_new_list(qf_info_T *qi, char_u *qf_title); - static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid); -*************** -*** 153,161 **** - static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start); - static qf_info_T *ll_get_or_alloc_list(win_T *); - -! /* Quickfix window check helper macro */ - #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL) -! /* Location list window check helper macro */ - #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL) - - // Quickfix and location list stack check helper macros ---- 151,159 ---- - static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start); - static qf_info_T *ll_get_or_alloc_list(win_T *); - -! // Quickfix window check helper macro - #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL) -! // Location list window check helper macro - #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL) - - // Quickfix and location list stack check helper macros -*************** -*** 189,195 **** - char *pattern; - } fmt_pat[FMT_PATTERNS] = - { -! {'f', ".\\+"}, /* only used when at end */ - {'n', "\\d\\+"}, - {'l', "\\d\\+"}, - {'c', "\\d\\+"}, ---- 187,193 ---- - char *pattern; - } fmt_pat[FMT_PATTERNS] = - { -! {'f', ".\\+"}, // only used when at end - {'n', "\\d\\+"}, - {'l', "\\d\\+"}, - {'c', "\\d\\+"}, -*************** -*** 221,227 **** - - if (efminfo->addr[idx]) - { -! /* Each errorformat pattern can occur only once */ - sprintf((char *)errmsg, - _("E372: Too many %%%c in format string"), *efmpat); - EMSG(errmsg); ---- 219,225 ---- - - if (efminfo->addr[idx]) - { -! // Each errorformat pattern can occur only once - sprintf((char *)errmsg, - _("E372: Too many %%%c in format string"), *efmpat); - EMSG(errmsg); -*************** -*** 243,251 **** - #ifdef BACKSLASH_IN_FILENAME - if (*efmpat == 'f') - { -! /* Also match "c:" in the file name, even when -! * checking for a colon next: "%f:". -! * "\%(\a:\)\=" */ - STRCPY(regpat, "\\%(\\a:\\)\\="); - regpat += 10; - } ---- 241,249 ---- - #ifdef BACKSLASH_IN_FILENAME - if (*efmpat == 'f') - { -! // Also match "c:" in the file name, even when -! // checking for a colon next: "%f:". -! // "\%(\a:\)\=" - STRCPY(regpat, "\\%(\\a:\\)\\="); - regpat += 10; - } -*************** -*** 254,271 **** - { - if (efmpat[1] != '\\' && efmpat[1] != '%') - { -! /* A file name may contain spaces, but this isn't -! * in "\f". For "%f:%l:%m" there may be a ":" in -! * the file name. Use ".\{-1,}x" instead (x is -! * the next character), the requirement that :999: -! * follows should work. */ - STRCPY(regpat, ".\\{-1,}"); - regpat += 7; - } - else - { -! /* File name followed by '\\' or '%': include as -! * many file name chars as possible. */ - STRCPY(regpat, "\\f\\+"); - regpat += 4; - } ---- 252,269 ---- - { - if (efmpat[1] != '\\' && efmpat[1] != '%') - { -! // A file name may contain spaces, but this isn't -! // in "\f". For "%f:%l:%m" there may be a ":" in -! // the file name. Use ".\{-1,}x" instead (x is -! // the next character), the requirement that :999: -! // follows should work. - STRCPY(regpat, ".\\{-1,}"); - regpat += 7; - } - else - { -! // File name followed by '\\' or '%': include as -! // many file name chars as possible. - STRCPY(regpat, "\\f\\+"); - regpat += 4; - } -*************** -*** 298,313 **** - - if (*efmp == '[' || *efmp == '\\') - { -! if ((*regpat++ = *efmp) == '[') /* %*[^a-z0-9] etc. */ - { - if (efmp[1] == '^') - *regpat++ = *++efmp; - if (efmp < efm + len) - { -! *regpat++ = *++efmp; /* could be ']' */ - while (efmp < efm + len - && (*regpat++ = *++efmp) != ']') -! /* skip */; - if (efmp == efm + len) - { - EMSG(_("E374: Missing ] in format string")); ---- 296,311 ---- - - if (*efmp == '[' || *efmp == '\\') - { -! if ((*regpat++ = *efmp) == '[') // %*[^a-z0-9] etc. - { - if (efmp[1] == '^') - *regpat++ = *++efmp; - if (efmp < efm + len) - { -! *regpat++ = *++efmp; // could be ']' - while (efmp < efm + len - && (*regpat++ = *++efmp) != ']') -! // skip ; - if (efmp == efm + len) - { - EMSG(_("E374: Missing ] in format string")); -*************** -*** 315,328 **** - } - } - } -! else if (efmp < efm + len) /* %*\D, %*\s etc. */ - *regpat++ = *++efmp; - *regpat++ = '\\'; - *regpat++ = '+'; - } - else - { -! /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */ - sprintf((char *)errmsg, - _("E375: Unsupported %%%c in format string"), *efmp); - EMSG(errmsg); ---- 313,326 ---- - } - } - } -! else if (efmp < efm + len) // %*\D, %*\s etc. - *regpat++ = *++efmp; - *regpat++ = '\\'; - *regpat++ = '+'; - } - else - { -! // TODO: scanf()-like: %*ud, %*3c, %*f, ... ? - sprintf((char *)errmsg, - _("E375: Unsupported %%%c in format string"), *efmp); - EMSG(errmsg); -*************** -*** 374,382 **** - int round; - int idx = 0; - -! /* -! * Build a regexp pattern for a 'errorformat' option part -! */ - ptr = regpat; - *ptr++ = '^'; - round = 0; ---- 372,378 ---- - int round; - int idx = 0; - -! // Build a regexp pattern for a 'errorformat' option part - ptr = regpat; - *ptr++ = '^'; - round = 0; -*************** -*** 404,420 **** - return FAIL; - } - else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL) -! *ptr++ = *efmp; /* regexp magic characters */ - else if (*efmp == '#') - *ptr++ = '*'; - else if (*efmp == '>') - fmt_ptr->conthere = TRUE; -! else if (efmp == efm + 1) /* analyse prefix */ - { -! /* -! * prefix is allowed only at the beginning of the errorformat -! * option part -! */ - efmp = efm_analyze_prefix(efmp, fmt_ptr, errmsg); - if (efmp == NULL) - return FAIL; ---- 400,414 ---- - return FAIL; - } - else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL) -! *ptr++ = *efmp; // regexp magic characters - else if (*efmp == '#') - *ptr++ = '*'; - else if (*efmp == '>') - fmt_ptr->conthere = TRUE; -! else if (efmp == efm + 1) // analyse prefix - { -! // prefix is allowed only at the beginning of the errorformat -! // option part - efmp = efm_analyze_prefix(efmp, fmt_ptr, errmsg); - if (efmp == NULL) - return FAIL; -*************** -*** 427,438 **** - return FAIL; - } - } -! else /* copy normal character */ - { - if (*efmp == '\\' && efmp + 1 < efm + len) - ++efmp; - else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL) -! *ptr++ = '\\'; /* escape regexp atoms */ - if (*efmp) - *ptr++ = *efmp; - } ---- 421,432 ---- - return FAIL; - } - } -! else // copy normal character - { - if (*efmp == '\\' && efmp + 1 < efm + len) - ++efmp; - else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL) -! *ptr++ = '\\'; // escape regexp atoms - if (*efmp) - *ptr++ = *efmp; - } -*************** -*** 474,482 **** - for (i = FMT_PATTERNS; i > 0; ) - sz += (int)STRLEN(fmt_pat[--i].pattern); - #ifdef BACKSLASH_IN_FILENAME -! sz += 12; /* "%f" can become twelve chars longer (see efm_to_regpat) */ - #else -! sz += 2; /* "%f" can become two chars longer */ - #endif - - return sz; ---- 468,476 ---- - for (i = FMT_PATTERNS; i > 0; ) - sz += (int)STRLEN(fmt_pat[--i].pattern); - #ifdef BACKSLASH_IN_FILENAME -! sz += 12; // "%f" can become twelve chars longer (see efm_to_regpat) - #else -! sz += 2; // "%f" can become two chars longer - #endif - - return sz; -*************** -*** 519,566 **** - if (errmsg == NULL) - goto parse_efm_end; - -! /* -! * Each part of the format string is copied and modified from errorformat -! * to regex prog. Only a few % characters are allowed. -! */ -! -! /* -! * Get some space to modify the format string into. -! */ - sz = efm_regpat_bufsz(efm); - if ((fmtstr = alloc(sz)) == NULL) - goto parse_efm_error; - - while (efm[0] != NUL) - { -! /* -! * Allocate a new eformat structure and put it at the end of the list -! */ - fmt_ptr = (efm_T *)alloc_clear((unsigned)sizeof(efm_T)); - if (fmt_ptr == NULL) - goto parse_efm_error; -! if (fmt_first == NULL) /* first one */ - fmt_first = fmt_ptr; - else - fmt_last->next = fmt_ptr; - fmt_last = fmt_ptr; - -! /* -! * Isolate one part in the 'errorformat' option -! */ - len = efm_option_part_len(efm); - - if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == FAIL) - goto parse_efm_error; - if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL) - goto parse_efm_error; -! /* -! * Advance to next part -! */ -! efm = skip_to_option_part(efm + len); /* skip comma and spaces */ - } - -! if (fmt_first == NULL) /* nothing found */ - EMSG(_("E378: 'errorformat' contains no pattern")); - - goto parse_efm_end; ---- 513,550 ---- - if (errmsg == NULL) - goto parse_efm_end; - -! // Each part of the format string is copied and modified from errorformat -! // to regex prog. Only a few % characters are allowed. -! -! // Get some space to modify the format string into. - sz = efm_regpat_bufsz(efm); - if ((fmtstr = alloc(sz)) == NULL) - goto parse_efm_error; - - while (efm[0] != NUL) - { -! // Allocate a new eformat structure and put it at the end of the list - fmt_ptr = (efm_T *)alloc_clear((unsigned)sizeof(efm_T)); - if (fmt_ptr == NULL) - goto parse_efm_error; -! if (fmt_first == NULL) // first one - fmt_first = fmt_ptr; - else - fmt_last->next = fmt_ptr; - fmt_last = fmt_ptr; - -! // Isolate one part in the 'errorformat' option - len = efm_option_part_len(efm); - - if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == FAIL) - goto parse_efm_error; - if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL) - goto parse_efm_error; -! // Advance to next part -! efm = skip_to_option_part(efm + len); // skip comma and spaces - } - -! if (fmt_first == NULL) // nothing found - EMSG(_("E378: 'errorformat' contains no pattern")); - - goto parse_efm_end; -*************** -*** 611,620 **** - { - char_u *p; - -! /* -! * If the line exceeds LINE_MAXLEN exclude the last -! * byte since it's not a NL character. -! */ - state->linelen = newsz > LINE_MAXLEN ? LINE_MAXLEN - 1 : newsz; - if (state->growbuf == NULL) - { ---- 595,602 ---- - { - char_u *p; - -! // If the line exceeds LINE_MAXLEN exclude the last -! // byte since it's not a NL character. - state->linelen = newsz > LINE_MAXLEN ? LINE_MAXLEN - 1 : newsz; - if (state->growbuf == NULL) - { -*************** -*** 639,650 **** - static int - qf_get_next_str_line(qfstate_T *state) - { -! /* Get the next line from the supplied string */ - char_u *p_str = state->p_str; - char_u *p; - int len; - -! if (*p_str == NUL) /* Reached the end of the string */ - return QF_END_OF_INPUT; - - p = vim_strchr(p_str, '\n'); ---- 621,632 ---- - static int - qf_get_next_str_line(qfstate_T *state) - { -! // Get the next line from the supplied string - char_u *p_str = state->p_str; - char_u *p; - int len; - -! if (*p_str == NUL) // Reached the end of the string - return QF_END_OF_INPUT; - - p = vim_strchr(p_str, '\n'); -*************** -*** 666,675 **** - } - vim_strncpy(state->linebuf, p_str, state->linelen); - -! /* -! * Increment using len in order to discard the rest of the -! * line if it exceeds LINE_MAXLEN. -! */ - p_str += len; - state->p_str = p_str; - ---- 648,655 ---- - } - vim_strncpy(state->linebuf, p_str, state->linelen); - -! // Increment using len in order to discard the rest of the -! // line if it exceeds LINE_MAXLEN. - p_str += len; - state->p_str = p_str; - -*************** -*** 688,696 **** - while (p_li != NULL - && (p_li->li_tv.v_type != VAR_STRING - || p_li->li_tv.vval.v_string == NULL)) -! p_li = p_li->li_next; /* Skip non-string items */ - -! if (p_li == NULL) /* End of the list */ - { - state->p_li = NULL; - return QF_END_OF_INPUT; ---- 668,676 ---- - while (p_li != NULL - && (p_li->li_tv.v_type != VAR_STRING - || p_li->li_tv.vval.v_string == NULL)) -! p_li = p_li->li_next; // Skip non-string items - -! if (p_li == NULL) // End of the list - { - state->p_li = NULL; - return QF_END_OF_INPUT; -*************** -*** 711,717 **** - - vim_strncpy(state->linebuf, p_li->li_tv.vval.v_string, state->linelen); - -! state->p_li = p_li->li_next; /* next item */ - return QF_OK; - } - ---- 691,697 ---- - - vim_strncpy(state->linebuf, p_li->li_tv.vval.v_string, state->linelen); - -! state->p_li = p_li->li_next; // next item - return QF_OK; - } - -*************** -*** 724,730 **** - char_u *p_buf = NULL; - int len; - -! /* Get the next line from the supplied buffer */ - if (state->buflnum > state->lnumlast) - return QF_END_OF_INPUT; - ---- 704,710 ---- - char_u *p_buf = NULL; - int len; - -! // Get the next line from the supplied buffer - if (state->buflnum > state->lnumlast) - return QF_END_OF_INPUT; - -*************** -*** 764,773 **** - state->linelen = (int)STRLEN(IObuff); - if (state->linelen == IOSIZE - 1 && !(IObuff[state->linelen - 1] == '\n')) - { -! /* -! * The current line exceeds IObuff, continue reading using -! * growbuf until EOL or LINE_MAXLEN bytes is read. -! */ - if (state->growbuf == NULL) - { - state->growbufsiz = 2 * (IOSIZE - 1); ---- 744,751 ---- - state->linelen = (int)STRLEN(IObuff); - if (state->linelen == IOSIZE - 1 && !(IObuff[state->linelen - 1] == '\n')) - { -! // The current line exceeds IObuff, continue reading using -! // growbuf until EOL or LINE_MAXLEN bytes is read. - if (state->growbuf == NULL) - { - state->growbufsiz = 2 * (IOSIZE - 1); -*************** -*** 776,782 **** - return QF_NOMEM; - } - -! /* Copy the read part of the line, excluding null-terminator */ - memcpy(state->growbuf, IObuff, IOSIZE - 1); - growbuflen = state->linelen; - ---- 754,760 ---- - return QF_NOMEM; - } - -! // Copy the read part of the line, excluding null-terminator - memcpy(state->growbuf, IObuff, IOSIZE - 1); - growbuflen = state->linelen; - -*************** -*** 806,816 **** - - while (discard) - { -! /* -! * The current line is longer than LINE_MAXLEN, continue -! * reading but discard everything until EOL or EOF is -! * reached. -! */ - if (fgets((char *)IObuff, IOSIZE, state->fd) == NULL - || (int)STRLEN(IObuff) < IOSIZE - 1 - || IObuff[IOSIZE - 1] == '\n') ---- 784,792 ---- - - while (discard) - { -! // The current line is longer than LINE_MAXLEN, continue -! // reading but discard everything until EOL or EOF is -! // reached. - if (fgets((char *)IObuff, IOSIZE, state->fd) == NULL - || (int)STRLEN(IObuff) < IOSIZE - 1 - || IObuff[IOSIZE - 1] == '\n') -*************** -*** 824,830 **** - state->linebuf = IObuff; - - #ifdef FEAT_MBYTE -! /* Convert a line if it contains a non-ASCII character. */ - if (state->vc.vc_type != CONV_NONE && has_non_ascii(state->linebuf)) - { - char_u *line; ---- 800,806 ---- - state->linebuf = IObuff; - - #ifdef FEAT_MBYTE -! // Convert a line if it contains a non-ASCII character. - if (state->vc.vc_type != CONV_NONE && has_non_ascii(state->linebuf)) - { - char_u *line; -*************** -*** 864,887 **** - if (state->tv != NULL) - { - if (state->tv->v_type == VAR_STRING) -! /* Get the next line from the supplied string */ - status = qf_get_next_str_line(state); - else if (state->tv->v_type == VAR_LIST) -! /* Get the next line from the supplied list */ - status = qf_get_next_list_line(state); - } - else -! /* Get the next line from the supplied buffer */ - status = qf_get_next_buf_line(state); - } - else -! /* Get the next line from the supplied file */ - status = qf_get_next_file_line(state); - - if (status != QF_OK) - return status; - -! /* remove newline/CR from the line */ - if (state->linelen > 0 && state->linebuf[state->linelen - 1] == '\n') - { - state->linebuf[state->linelen - 1] = NUL; ---- 840,863 ---- - if (state->tv != NULL) - { - if (state->tv->v_type == VAR_STRING) -! // Get the next line from the supplied string - status = qf_get_next_str_line(state); - else if (state->tv->v_type == VAR_LIST) -! // Get the next line from the supplied list - status = qf_get_next_list_line(state); - } - else -! // Get the next line from the supplied buffer - status = qf_get_next_buf_line(state); - } - else -! // Get the next line from the supplied file - status = qf_get_next_file_line(state); - - if (status != QF_OK) - return status; - -! // remove newline/CR from the line - if (state->linelen > 0 && state->linebuf[state->linelen - 1] == '\n') - { - state->linebuf[state->linelen - 1] = NUL; -*************** -*** 924,939 **** - if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL) - return QF_FAIL; - -! /* Expand ~/file and $HOME/file to full path. */ - c = *rmp->endp[midx]; - *rmp->endp[midx] = NUL; - expand_env(rmp->startp[midx], fields->namebuf, CMDBUFFSIZE); - *rmp->endp[midx] = c; - -! /* -! * For separate filename patterns (%O, %P and %Q), the specified file -! * should exist. -! */ - if (vim_strchr((char_u *)"OPQ", prefix) != NULL - && mch_getperm(fields->namebuf) == -1) - return QF_FAIL; ---- 900,913 ---- - if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL) - return QF_FAIL; - -! // Expand ~/file and $HOME/file to full path. - c = *rmp->endp[midx]; - *rmp->endp[midx] = NUL; - expand_env(rmp->startp[midx], fields->namebuf, CMDBUFFSIZE); - *rmp->endp[midx] = c; - -! // For separate filename patterns (%O, %P and %Q), the specified file -! // should exist. - if (vim_strchr((char_u *)"OPQ", prefix) != NULL - && mch_getperm(fields->namebuf) == -1) - return QF_FAIL; -*************** -*** 1004,1010 **** - - if (linelen >= fields->errmsglen) - { -! /* linelen + null terminator */ - if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL) - return QF_NOMEM; - fields->errmsg = p; ---- 978,984 ---- - - if (linelen >= fields->errmsglen) - { -! // linelen + null terminator - if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL) - return QF_NOMEM; - fields->errmsg = p; -*************** -*** 1029,1035 **** - len = (int)(rmp->endp[midx] - rmp->startp[midx]); - if (len >= fields->errmsglen) - { -! /* len + null terminator */ - if ((p = vim_realloc(fields->errmsg, len + 1)) == NULL) - return QF_NOMEM; - fields->errmsg = p; ---- 1003,1009 ---- - len = (int)(rmp->endp[midx] - rmp->startp[midx]); - if (len >= fields->errmsglen) - { -! // len + null terminator - if ((p = vim_realloc(fields->errmsg, len + 1)) == NULL) - return QF_NOMEM; - fields->errmsg = p; -*************** -*** 1181,1207 **** - fields->type = idx; - else - fields->type = 0; -! /* -! * Extract error message data from matched line. -! * We check for an actual submatch, because "\[" and "\]" in -! * the 'errorformat' may cause the wrong submatch to be used. -! */ - for (i = 0; i < FMT_PATTERNS; i++) - { - status = QF_OK; - midx = (int)fmt_ptr->addr[i]; -! if (i == 0 && midx > 0) /* %f */ - status = qf_parse_fmt_f(regmatch, midx, fields, idx); - else if (i == 5) - { -! if (fmt_ptr->flags == '+' && !qf_multiscan) /* %+ */ - status = qf_parse_fmt_plus(linebuf, linelen, fields); -! else if (midx > 0) /* %m */ - status = qf_parse_fmt_m(regmatch, midx, fields); - } -! else if (i == 6 && midx > 0) /* %r */ - status = qf_parse_fmt_r(regmatch, midx, tail); -! else if (midx > 0) /* others */ - status = (qf_parse_fmt[i])(regmatch, midx, fields); - - if (status != QF_OK) ---- 1155,1180 ---- - fields->type = idx; - else - fields->type = 0; -! -! // Extract error message data from matched line. -! // We check for an actual submatch, because "\[" and "\]" in -! // the 'errorformat' may cause the wrong submatch to be used. - for (i = 0; i < FMT_PATTERNS; i++) - { - status = QF_OK; - midx = (int)fmt_ptr->addr[i]; -! if (i == 0 && midx > 0) // %f - status = qf_parse_fmt_f(regmatch, midx, fields, idx); - else if (i == 5) - { -! if (fmt_ptr->flags == '+' && !qf_multiscan) // %+ - status = qf_parse_fmt_plus(linebuf, linelen, fields); -! else if (midx > 0) // %m - status = qf_parse_fmt_m(regmatch, midx, fields); - } -! else if (i == 6 && midx > 0) // %r - status = qf_parse_fmt_r(regmatch, midx, tail); -! else if (midx > 0) // others - status = (qf_parse_fmt[i])(regmatch, midx, fields); - - if (status != QF_OK) -*************** -*** 1247,1253 **** - fields->type = 0; - *tail = NULL; - -! /* Always ignore case when looking for a matching error. */ - regmatch.rm_ic = TRUE; - regmatch.regprog = fmt_ptr->prog; - r = vim_regexec(®match, linebuf, (colnr_T)0); ---- 1220,1226 ---- - fields->type = 0; - *tail = NULL; - -! // Always ignore case when looking for a matching error. - regmatch.rm_ic = TRUE; - regmatch.regprog = fmt_ptr->prog; - r = vim_regexec(®match, linebuf, (colnr_T)0); -*************** -*** 1267,1273 **** - static int - qf_parse_dir_pfx(int idx, qffields_T *fields, qf_list_T *qfl) - { -! if (idx == 'D') /* enter directory */ - { - if (*fields->namebuf == NUL) - { ---- 1240,1246 ---- - static int - qf_parse_dir_pfx(int idx, qffields_T *fields, qf_list_T *qfl) - { -! if (idx == 'D') // enter directory - { - if (*fields->namebuf == NUL) - { -*************** -*** 1279,1285 **** - if (qfl->qf_directory == NULL) - return QF_FAIL; - } -! else if (idx == 'X') /* leave directory */ - qfl->qf_directory = qf_pop_dir(&qfl->qf_dir_stack); - - return QF_OK; ---- 1252,1258 ---- - if (qfl->qf_directory == NULL) - return QF_FAIL; - } -! else if (idx == 'X') // leave directory - qfl->qf_directory = qf_pop_dir(&qfl->qf_dir_stack); - - return QF_OK; -*************** -*** 1324,1341 **** - { - char_u *p; - -! fields->namebuf[0] = NUL; /* no match found, remove file name */ -! fields->lnum = 0; /* don't jump to this line */ - fields->valid = FALSE; - if (linelen >= fields->errmsglen) - { -! /* linelen + null terminator */ - if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL) - return QF_NOMEM; - fields->errmsg = p; - fields->errmsglen = linelen + 1; - } -! /* copy whole line to error message */ - vim_strncpy(fields->errmsg, linebuf, linelen); - - return QF_OK; ---- 1297,1314 ---- - { - char_u *p; - -! fields->namebuf[0] = NUL; // no match found, remove file name -! fields->lnum = 0; // don't jump to this line - fields->valid = FALSE; - if (linelen >= fields->errmsglen) - { -! // linelen + null terminator - if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL) - return QF_NOMEM; - fields->errmsg = p; - fields->errmsglen = linelen + 1; - } -! // copy whole line to error message - vim_strncpy(fields->errmsg, linebuf, linelen); - - return QF_OK; -*************** -*** 1376,1382 **** - if (qfprev->qf_nr == -1) - qfprev->qf_nr = fields->enr; - if (vim_isprintc(fields->type) && !qfprev->qf_type) -! /* only printable chars allowed */ - qfprev->qf_type = fields->type; - - if (!qfprev->qf_lnum) ---- 1349,1355 ---- - if (qfprev->qf_nr == -1) - qfprev->qf_nr = fields->enr; - if (vim_isprintc(fields->type) && !qfprev->qf_type) -! // only printable chars allowed - qfprev->qf_type = fields->type; - - if (!qfprev->qf_lnum) -*************** -*** 1419,1438 **** - int status; - - restofline: -! /* If there was no %> item start at the first pattern */ - if (fmt_start == NULL) - fmt_ptr = fmt_first; - else - { -! /* Otherwise start from the last used pattern */ - fmt_ptr = fmt_start; - fmt_start = NULL; - } - -! /* -! * Try to match each part of 'errorformat' until we find a complete -! * match or no match. -! */ - fields->valid = TRUE; - for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next) - { ---- 1392,1409 ---- - int status; - - restofline: -! // If there was no %> item start at the first pattern - if (fmt_start == NULL) - fmt_ptr = fmt_first; - else - { -! // Otherwise start from the last used pattern - fmt_ptr = fmt_start; - fmt_start = NULL; - } - -! // Try to match each part of 'errorformat' until we find a complete -! // match or no match. - fields->valid = TRUE; - for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next) - { -*************** -*** 1450,1456 **** - { - if (fmt_ptr != NULL) - { -! /* 'D' and 'X' directory specifiers */ - status = qf_parse_dir_pfx(idx, fields, qfl); - if (status != QF_OK) - return status; ---- 1421,1427 ---- - { - if (fmt_ptr != NULL) - { -! // 'D' and 'X' directory specifiers - status = qf_parse_dir_pfx(idx, fields, qfl); - if (status != QF_OK) - return status; -*************** -*** 1465,1495 **** - } - else if (fmt_ptr != NULL) - { -! /* honor %> item */ - if (fmt_ptr->conthere) - fmt_start = fmt_ptr; - - if (vim_strchr((char_u *)"AEWI", idx) != NULL) - { -! qfl->qf_multiline = TRUE; /* start of a multi-line message */ -! qfl->qf_multiignore = FALSE;/* reset continuation */ - } - else if (vim_strchr((char_u *)"CZ", idx) != NULL) -! { /* continuation of multi-line msg */ - status = qf_parse_multiline_pfx(qi, qf_idx, idx, qfl, fields); - if (status != QF_OK) - return status; - } - else if (vim_strchr((char_u *)"OPQ", idx) != NULL) -! { /* global file names */ - status = qf_parse_file_pfx(idx, fields, qfl, tail); - if (status == QF_MULTISCAN) - goto restofline; - } -! if (fmt_ptr->flags == '-') /* generally exclude this line */ - { - if (qfl->qf_multiline) -! /* also exclude continuation lines */ - qfl->qf_multiignore = TRUE; - return QF_IGNORE_LINE; - } ---- 1436,1466 ---- - } - else if (fmt_ptr != NULL) - { -! // honor %> item - if (fmt_ptr->conthere) - fmt_start = fmt_ptr; - - if (vim_strchr((char_u *)"AEWI", idx) != NULL) - { -! qfl->qf_multiline = TRUE; // start of a multi-line message -! qfl->qf_multiignore = FALSE;// reset continuation - } - else if (vim_strchr((char_u *)"CZ", idx) != NULL) -! { // continuation of multi-line msg - status = qf_parse_multiline_pfx(qi, qf_idx, idx, qfl, fields); - if (status != QF_OK) - return status; - } - else if (vim_strchr((char_u *)"OPQ", idx) != NULL) -! { // global file names - status = qf_parse_file_pfx(idx, fields, qfl, tail); - if (status == QF_MULTISCAN) - goto restofline; - } -! if (fmt_ptr->flags == '-') // generally exclude this line - { - if (qfl->qf_multiline) -! // also exclude continuation lines - qfl->qf_multiignore = TRUE; - return QF_IGNORE_LINE; - } -*************** -*** 1624,1632 **** - buf_T *buf, - typval_T *tv, - char_u *errorformat, -! int newlist, /* TRUE: start a new error list */ -! linenr_T lnumfirst, /* first line number to use */ -! linenr_T lnumlast, /* last line number to use */ - char_u *qf_title, - char_u *enc) - { ---- 1595,1603 ---- - buf_T *buf, - typval_T *tv, - char_u *errorformat, -! int newlist, // TRUE: start a new error list -! linenr_T lnumfirst, // first line number to use -! linenr_T lnumlast, // last line number to use - char_u *qf_title, - char_u *enc) - { -*************** -*** 1638,1647 **** - static efm_T *fmt_first = NULL; - char_u *efm; - static char_u *last_efm = NULL; -! int retval = -1; /* default: return error flag */ - int status; - -! /* Do not used the cached buffer, it may have been wiped out. */ - VIM_CLEAR(qf_last_bufname); - - vim_memset(&state, 0, sizeof(state)); ---- 1609,1618 ---- - static efm_T *fmt_first = NULL; - char_u *efm; - static char_u *last_efm = NULL; -! int retval = -1; // default: return error flag - int status; - -! // Do not used the cached buffer, it may have been wiped out. - VIM_CLEAR(qf_last_bufname); - - vim_memset(&state, 0, sizeof(state)); -*************** -*** 1653,1665 **** - - if (newlist || qf_idx == qi->qf_listcount) - { -! /* make place for a new list */ - qf_new_list(qi, qf_title); - qf_idx = qi->qf_curlist; - } - else - { -! /* Adding to existing list, use last entry. */ - adding = TRUE; - if (!qf_list_empty(qi, qf_idx)) - old_last = qi->qf_lists[qf_idx].qf_last; ---- 1624,1636 ---- - - if (newlist || qf_idx == qi->qf_listcount) - { -! // make place for a new list - qf_new_list(qi, qf_title); - qf_idx = qi->qf_curlist; - } - else - { -! // Adding to existing list, use last entry. - adding = TRUE; - if (!qf_list_empty(qi, qf_idx)) - old_last = qi->qf_lists[qf_idx].qf_last; -*************** -*** 1667,1714 **** - - qfl = &qi->qf_lists[qf_idx]; - -! /* Use the local value of 'errorformat' if it's set. */ - if (errorformat == p_efm && tv == NULL && *buf->b_p_efm != NUL) - efm = buf->b_p_efm; - else - efm = errorformat; - -! /* -! * If the errorformat didn't change between calls, then reuse the -! * previously parsed values. -! */ - if (last_efm == NULL || (STRCMP(last_efm, efm) != 0)) - { -! /* free the previously parsed data */ - VIM_CLEAR(last_efm); - free_efm_list(&fmt_first); - -! /* parse the current 'efm' */ - fmt_first = parse_efm_option(efm); - if (fmt_first != NULL) - last_efm = vim_strsave(efm); - } - -! if (fmt_first == NULL) /* nothing found */ - goto error2; - -! /* -! * got_int is reset here, because it was probably set when killing the -! * ":make" command, but we still want to read the errorfile then. -! */ - got_int = FALSE; - -! /* -! * Read the lines in the error file one by one. -! * Try to recognize one of the error formats in each line. -! */ - while (!got_int) - { -! /* Get the next line from a file/buffer/list/string */ - status = qf_get_nextline(&state); -! if (status == QF_NOMEM) /* memory alloc failure */ - goto qf_init_end; -! if (status == QF_END_OF_INPUT) /* end of input */ - break; - - status = qf_parse_line(qi, qf_idx, state.linebuf, state.linelen, ---- 1638,1679 ---- - - qfl = &qi->qf_lists[qf_idx]; - -! // Use the local value of 'errorformat' if it's set. - if (errorformat == p_efm && tv == NULL && *buf->b_p_efm != NUL) - efm = buf->b_p_efm; - else - efm = errorformat; - -! // If the errorformat didn't change between calls, then reuse the -! // previously parsed values. - if (last_efm == NULL || (STRCMP(last_efm, efm) != 0)) - { -! // free the previously parsed data - VIM_CLEAR(last_efm); - free_efm_list(&fmt_first); - -! // parse the current 'efm' - fmt_first = parse_efm_option(efm); - if (fmt_first != NULL) - last_efm = vim_strsave(efm); - } - -! if (fmt_first == NULL) // nothing found - goto error2; - -! // got_int is reset here, because it was probably set when killing the -! // ":make" command, but we still want to read the errorfile then. - got_int = FALSE; - -! // Read the lines in the error file one by one. -! // Try to recognize one of the error formats in each line. - while (!got_int) - { -! // Get the next line from a file/buffer/list/string - status = qf_get_nextline(&state); -! if (status == QF_NOMEM) // memory alloc failure - goto qf_init_end; -! if (status == QF_END_OF_INPUT) // end of input - break; - - status = qf_parse_line(qi, qf_idx, state.linebuf, state.linelen, -*************** -*** 1744,1750 **** - { - if (qfl->qf_index == 0) - { -! /* no valid entry found */ - qfl->qf_ptr = qfl->qf_start; - qfl->qf_index = 1; - qfl->qf_nonevalid = TRUE; ---- 1709,1715 ---- - { - if (qfl->qf_index == 0) - { -! // no valid entry found - qfl->qf_ptr = qfl->qf_start; - qfl->qf_index = 1; - qfl->qf_nonevalid = TRUE; -*************** -*** 1755,1761 **** - if (qfl->qf_ptr == NULL) - qfl->qf_ptr = qfl->qf_start; - } -! /* return number of matches */ - retval = qfl->qf_count; - goto qf_init_end; - } ---- 1720,1726 ---- - if (qfl->qf_ptr == NULL) - qfl->qf_ptr = qfl->qf_start; - } -! // return number of matches - retval = qfl->qf_count; - goto qf_init_end; - } -*************** -*** 1763,1769 **** - error2: - if (!adding) - { -! /* Error when creating a new list. Free the new list */ - qf_free(&qi->qf_lists[qi->qf_curlist]); - qi->qf_listcount--; - if (qi->qf_curlist > 0) ---- 1728,1734 ---- - error2: - if (!adding) - { -! // Error when creating a new list. Free the new list - qf_free(&qi->qf_lists[qi->qf_curlist]); - qi->qf_listcount--; - if (qi->qf_curlist > 0) -*************** -*** 1787,1793 **** - qf_init(win_T *wp, - char_u *efile, - char_u *errorformat, -! int newlist, /* TRUE: start a new error list */ - char_u *qf_title, - char_u *enc) - { ---- 1752,1758 ---- - qf_init(win_T *wp, - char_u *efile, - char_u *errorformat, -! int newlist, // TRUE: start a new error list - char_u *qf_title, - char_u *enc) - { -*************** -*** 1848,1865 **** - { - int i; - -! /* -! * If the current entry is not the last entry, delete entries beyond -! * the current entry. This makes it possible to browse in a tree-like -! * way with ":grep'. -! */ - while (qi->qf_listcount > qi->qf_curlist + 1) - qf_free(&qi->qf_lists[--qi->qf_listcount]); - -! /* -! * When the stack is full, remove to oldest entry -! * Otherwise, add a new entry. -! */ - if (qi->qf_listcount == LISTCOUNT) - { - qf_free(&qi->qf_lists[0]); ---- 1813,1826 ---- - { - int i; - -! // If the current entry is not the last entry, delete entries beyond -! // the current entry. This makes it possible to browse in a tree-like -! // way with ":grep'. - while (qi->qf_listcount > qi->qf_curlist + 1) - qf_free(&qi->qf_lists[--qi->qf_listcount]); - -! // When the stack is full, remove to oldest entry -! // Otherwise, add a new entry. - if (qi->qf_listcount == LISTCOUNT) - { - qf_free(&qi->qf_lists[0]); -*************** -*** 1886,1897 **** - qi = *pqi; - if (qi == NULL) - return; -! *pqi = NULL; /* Remove reference to this list */ - - qi->qf_refcount--; - if (qi->qf_refcount < 1) - { -! /* No references to this location list */ - for (i = 0; i < qi->qf_listcount; ++i) - qf_free(&qi->qf_lists[i]); - vim_free(qi); ---- 1847,1858 ---- - qi = *pqi; - if (qi == NULL) - return; -! *pqi = NULL; // Remove reference to this list - - qi->qf_refcount--; - if (qi->qf_refcount < 1) - { -! // No references to this location list - for (i = 0; i < qi->qf_listcount; ++i) - qf_free(&qi->qf_lists[i]); - vim_free(qi); -*************** -*** 1909,1920 **** - - if (wp != NULL) - { -! /* location list */ - ll_free_all(&wp->w_llist); - ll_free_all(&wp->w_llist_ref); - } - else -! /* quickfix list */ - for (i = 0; i < qi->qf_listcount; ++i) - qf_free(&qi->qf_lists[i]); - } ---- 1870,1881 ---- - - if (wp != NULL) - { -! // location list - ll_free_all(&wp->w_llist); - ll_free_all(&wp->w_llist_ref); - } - else -! // quickfix list - for (i = 0; i < qi->qf_listcount; ++i) - qf_free(&qi->qf_lists[i]); - } -*************** -*** 1925,1948 **** - */ - static int - qf_add_entry( -! qf_info_T *qi, /* quickfix list */ -! int qf_idx, /* list index */ -! char_u *dir, /* optional directory name */ -! char_u *fname, /* file name or NULL */ -! char_u *module, /* module name or NULL */ -! int bufnum, /* buffer number or zero */ -! char_u *mesg, /* message */ -! long lnum, /* line number */ -! int col, /* column */ -! int vis_col, /* using visual column */ -! char_u *pattern, /* search pattern */ -! int nr, /* error number */ -! int type, /* type character */ -! int valid) /* valid entry */ - { - qf_list_T *qfl = &qi->qf_lists[qf_idx]; - qfline_T *qfp; -! qfline_T **lastp; /* pointer to qf_last or NULL */ - - if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL) - return FAIL; ---- 1886,1909 ---- - */ - static int - qf_add_entry( -! qf_info_T *qi, // quickfix list -! int qf_idx, // list index -! char_u *dir, // optional directory name -! char_u *fname, // file name or NULL -! char_u *module, // module name or NULL -! int bufnum, // buffer number or zero -! char_u *mesg, // message -! long lnum, // line number -! int col, // column -! int vis_col, // using visual column -! char_u *pattern, // search pattern -! int nr, // error number -! int type, // type character -! int valid) // valid entry - { - qf_list_T *qfl = &qi->qf_lists[qf_idx]; - qfline_T *qfp; -! qfline_T **lastp; // pointer to qf_last or NULL - - if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL) - return FAIL; -*************** -*** 1983,1995 **** - return FAIL; - } - qfp->qf_nr = nr; -! if (type != 1 && !vim_isprintc(type)) /* only printable chars allowed */ - type = 0; - qfp->qf_type = type; - qfp->qf_valid = valid; - - lastp = &qfl->qf_last; -! if (qf_list_empty(qi, qf_idx)) /* first element in the list */ - { - qfl->qf_start = qfp; - qfl->qf_ptr = qfp; ---- 1944,1956 ---- - return FAIL; - } - qfp->qf_nr = nr; -! if (type != 1 && !vim_isprintc(type)) // only printable chars allowed - type = 0; - qfp->qf_type = type; - qfp->qf_valid = valid; - - lastp = &qfl->qf_last; -! if (qf_list_empty(qi, qf_idx)) // first element in the list - { - qfl->qf_start = qfp; - qfl->qf_ptr = qfp; -*************** -*** 2005,2012 **** - qfp->qf_cleared = FALSE; - *lastp = qfp; - ++qfl->qf_count; -! if (qfl->qf_index == 0 && qfp->qf_valid) -! /* first valid entry */ - { - qfl->qf_index = qfl->qf_count; - qfl->qf_ptr = qfp; ---- 1966,1972 ---- - qfp->qf_cleared = FALSE; - *lastp = qfp; - ++qfl->qf_count; -! if (qfl->qf_index == 0 && qfp->qf_valid) // first valid entry - { - qfl->qf_index = qfl->qf_count; - qfl->qf_ptr = qfp; -*************** -*** 2037,2053 **** - ll_get_or_alloc_list(win_T *wp) - { - if (IS_LL_WINDOW(wp)) -! /* For a location list window, use the referenced location list */ - return wp->w_llist_ref; - -! /* -! * For a non-location list window, w_llist_ref should not point to a -! * location list. -! */ - ll_free_all(&wp->w_llist_ref); - - if (wp->w_llist == NULL) -! wp->w_llist = ll_new_list(); /* new location list */ - return wp->w_llist; - } - ---- 1997,2011 ---- - ll_get_or_alloc_list(win_T *wp) - { - if (IS_LL_WINDOW(wp)) -! // For a location list window, use the referenced location list - return wp->w_llist_ref; - -! // For a non-location list window, w_llist_ref should not point to a -! // location list. - ll_free_all(&wp->w_llist_ref); - - if (wp->w_llist == NULL) -! wp->w_llist = ll_new_list(); // new location list - return wp->w_llist; - } - -*************** -*** 2195,2201 **** - buf_T *buf; - char_u *bufname; - -! if (fname == NULL || *fname == NUL) /* no file name */ - return 0; - - #ifdef VMS ---- 2153,2159 ---- - buf_T *buf; - char_u *bufname; - -! if (fname == NULL || *fname == NUL) // no file name - return 0; - - #ifdef VMS -*************** -*** 2209,2220 **** - if (directory != NULL && !vim_isAbsName(fname) - && (ptr = concat_fnames(directory, fname, TRUE)) != NULL) - { -! /* -! * Here we check if the file really exists. -! * This should normally be true, but if make works without -! * "leaving directory"-messages we might have missed a -! * directory change. -! */ - if (mch_getperm(ptr) < 0) - { - vim_free(ptr); ---- 2167,2176 ---- - if (directory != NULL && !vim_isAbsName(fname) - && (ptr = concat_fnames(directory, fname, TRUE)) != NULL) - { -! // Here we check if the file really exists. -! // This should normally be true, but if make works without -! // "leaving directory"-messages we might have missed a -! // directory change. - if (mch_getperm(ptr) < 0) - { - vim_free(ptr); -*************** -*** 2224,2230 **** - else - ptr = vim_strsave(fname); - } -! /* Use concatenated directory name and file name */ - bufname = ptr; - } - else ---- 2180,2186 ---- - else - ptr = vim_strsave(fname); - } -! // Use concatenated directory name and file name - bufname = ptr; - } - else -*************** -*** 2264,2270 **** - struct dir_stack_T *ds_new; - struct dir_stack_T *ds_ptr; - -! /* allocate new stack element and hook it in */ - ds_new = (struct dir_stack_T *)alloc((unsigned)sizeof(struct dir_stack_T)); - if (ds_new == NULL) - return NULL; ---- 2220,2226 ---- - struct dir_stack_T *ds_new; - struct dir_stack_T *ds_ptr; - -! // allocate new stack element and hook it in - ds_new = (struct dir_stack_T *)alloc((unsigned)sizeof(struct dir_stack_T)); - if (ds_new == NULL) - return NULL; -*************** -*** 2272,2288 **** - ds_new->next = *stackptr; - *stackptr = ds_new; - -! /* store directory on the stack */ - if (vim_isAbsName(dirbuf) - || (*stackptr)->next == NULL - || (*stackptr && is_file_stack)) - (*stackptr)->dirname = vim_strsave(dirbuf); - else - { -! /* Okay we don't have an absolute path. -! * dirbuf must be a subdir of one of the directories on the stack. -! * Let's search... -! */ - ds_new = (*stackptr)->next; - (*stackptr)->dirname = NULL; - while (ds_new) ---- 2228,2243 ---- - ds_new->next = *stackptr; - *stackptr = ds_new; - -! // store directory on the stack - if (vim_isAbsName(dirbuf) - || (*stackptr)->next == NULL - || (*stackptr && is_file_stack)) - (*stackptr)->dirname = vim_strsave(dirbuf); - else - { -! // Okay we don't have an absolute path. -! // dirbuf must be a subdir of one of the directories on the stack. -! // Let's search... - ds_new = (*stackptr)->next; - (*stackptr)->dirname = NULL; - while (ds_new) -*************** -*** 2296,2302 **** - ds_new = ds_new->next; - } - -! /* clean up all dirs we already left */ - while ((*stackptr)->next != ds_new) - { - ds_ptr = (*stackptr)->next; ---- 2251,2257 ---- - ds_new = ds_new->next; - } - -! // clean up all dirs we already left - while ((*stackptr)->next != ds_new) - { - ds_ptr = (*stackptr)->next; -*************** -*** 2305,2311 **** - vim_free(ds_ptr); - } - -! /* Nothing found -> it must be on top level */ - if (ds_new == NULL) - { - vim_free((*stackptr)->dirname); ---- 2260,2266 ---- - vim_free(ds_ptr); - } - -! // Nothing found -> it must be on top level - if (ds_new == NULL) - { - vim_free((*stackptr)->dirname); -*************** -*** 2333,2342 **** - { - struct dir_stack_T *ds_ptr; - -! /* TODO: Should we check if dirbuf is the directory on top of the stack? -! * What to do if it isn't? */ - -! /* pop top element and free it */ - if (*stackptr != NULL) - { - ds_ptr = *stackptr; ---- 2288,2297 ---- - { - struct dir_stack_T *ds_ptr; - -! // TODO: Should we check if dirbuf is the directory on top of the stack? -! // What to do if it isn't? - -! // pop top element and free it - if (*stackptr != NULL) - { - ds_ptr = *stackptr; -*************** -*** 2345,2351 **** - vim_free(ds_ptr); - } - -! /* return NEW top element as current dir or NULL if stack is empty*/ - return *stackptr ? (*stackptr)->dirname : NULL; - } - ---- 2300,2306 ---- - vim_free(ds_ptr); - } - -! // return NEW top element as current dir or NULL if stack is empty - return *stackptr ? (*stackptr)->dirname : NULL; - } - -*************** -*** 2392,2398 **** - struct dir_stack_T *ds_tmp; - char_u *fullname; - -! /* no dirs on the stack - there's nothing we can do */ - if (qfl->qf_dir_stack == NULL) - return NULL; - ---- 2347,2353 ---- - struct dir_stack_T *ds_tmp; - char_u *fullname; - -! // no dirs on the stack - there's nothing we can do - if (qfl->qf_dir_stack == NULL) - return NULL; - -*************** -*** 2403,2411 **** - vim_free(fullname); - fullname = concat_fnames(ds_ptr->dirname, filename, TRUE); - -! /* If concat_fnames failed, just go on. The worst thing that can happen -! * is that we delete the entire stack. -! */ - if ((fullname != NULL) && (mch_getperm(fullname) >= 0)) - break; - ---- 2358,2365 ---- - vim_free(fullname); - fullname = concat_fnames(ds_ptr->dirname, filename, TRUE); - -! // If concat_fnames failed, just go on. The worst thing that can happen -! // is that we delete the entire stack. - if ((fullname != NULL) && (mch_getperm(fullname) >= 0)) - break; - -*************** -*** 2414,2420 **** - - vim_free(fullname); - -! /* clean up all dirs we already left */ - while (qfl->qf_dir_stack->next != ds_ptr) - { - ds_tmp = qfl->qf_dir_stack->next; ---- 2368,2374 ---- - - vim_free(fullname); - -! // clean up all dirs we already left - while (qfl->qf_dir_stack->next != ds_ptr) - { - ds_tmp = qfl->qf_dir_stack->next; -*************** -*** 2437,2443 **** - - if (wp != NULL) - { -! qi = GET_LOC_LIST(wp); /* Location list */ - if (qi == NULL) - return FALSE; - } ---- 2391,2397 ---- - - if (wp != NULL) - { -! qi = GET_LOC_LIST(wp); // Location list - if (qi == NULL) - return FALSE; - } -*************** -*** 2461,2473 **** - qfline_T *qfp; - int i; - -! /* Search for the entry in the current list */ - for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count; - ++i, qfp = qfp->qf_next) - if (qfp == NULL || qfp == qf_ptr) - break; - -! if (i == qfl->qf_count) /* Entry is not found */ - return FALSE; - - return TRUE; ---- 2415,2427 ---- - qfline_T *qfp; - int i; - -! // Search for the entry in the current list - for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count; - ++i, qfp = qfp->qf_next) - if (qfp == NULL || qfp == qf_ptr) - break; - -! if (i == qfl->qf_count) // Entry is not found - return FALSE; - - return TRUE; -*************** -*** 2667,2682 **** - win_enter(wp, TRUE); - else - { -! /* -! * Split off help window; put it at far top if no position -! * specified, the current window is vertically split and narrow. -! */ - flags = WSP_HELP; - if (cmdmod.split == 0 && curwin->w_width != Columns - && curwin->w_width < 80) - flags |= WSP_TOP; - if (IS_LL_STACK(qi)) -! flags |= WSP_NEWLOC; /* don't copy the location list */ - - if (win_split(0, flags) == FAIL) - return FAIL; ---- 2621,2634 ---- - win_enter(wp, TRUE); - else - { -! // Split off help window; put it at far top if no position -! // specified, the current window is vertically split and narrow. - flags = WSP_HELP; - if (cmdmod.split == 0 && curwin->w_width != Columns - && curwin->w_width < 80) - flags |= WSP_TOP; - if (IS_LL_STACK(qi)) -! flags |= WSP_NEWLOC; // don't copy the location list - - if (win_split(0, flags) == FAIL) - return FAIL; -*************** -*** 2688,2701 **** - - if (IS_LL_STACK(qi)) // not a quickfix list - { -! /* The new window should use the supplied location list */ - curwin->w_llist = qi; - qi->qf_refcount++; - } - } - - if (!p_im) -! restart_edit = 0; /* don't want insert mode in help file */ - - return OK; - } ---- 2640,2653 ---- - - if (IS_LL_STACK(qi)) // not a quickfix list - { -! // The new window should use the supplied location list - curwin->w_llist = qi; - qi->qf_refcount++; - } - } - - if (!p_im) -! restart_edit = 0; // don't want insert mode in help file - - return OK; - } -*************** -*** 2764,2777 **** - if (ll_ref != NULL) - flags |= WSP_NEWLOC; - if (win_split(0, flags) == FAIL) -! return FAIL; /* not enough room for window */ -! 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++; - } ---- 2716,2729 ---- - if (ll_ref != NULL) - flags |= WSP_NEWLOC; - if (win_split(0, flags) == FAIL) -! return FAIL; // not enough room for window -! 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++; - } -*************** -*** 2791,2819 **** - - 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 (bt_normal(win->w_buffer)) - 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; ---- 2743,2771 ---- - - 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 (bt_normal(win->w_buffer)) - 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; -*************** -*** 2841,2854 **** - 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) ---- 2793,2806 ---- - 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) -*************** -*** 2858,2864 **** - break; - } - -! /* Remember a usable window. */ - if (altwin == NULL && !win->w_p_pvw && bt_normal(win->w_buffer)) - altwin = win; - } ---- 2810,2816 ---- - break; - } - -! // Remember a usable window. - if (altwin == NULL && !win->w_p_pvw && bt_normal(win->w_buffer)) - altwin = win; - } -*************** -*** 2885,2891 **** - ll_ref = curwin->w_llist_ref; - if (ll_ref != NULL) - { -! /* Find a non-quickfix window with this location list */ - usable_win_ptr = qf_find_win_with_loclist(ll_ref); - if (usable_win_ptr != NULL) - usable_win = 1; ---- 2837,2843 ---- - ll_ref = curwin->w_llist_ref; - if (ll_ref != NULL) - { -! // Find a non-quickfix window with this location list - usable_win_ptr = qf_find_win_with_loclist(ll_ref); - if (usable_win_ptr != NULL) - usable_win = 1; -*************** -*** 2893,2926 **** - - if (!usable_win) - { -! /* Locate a window showing a normal buffer */ - win = qf_find_win_with_normal_buf(); - if (win != NULL) - usable_win = 1; - } - -! /* -! * If no usable window is found and 'switchbuf' contains "usetab" -! * then search in other tabs. -! */ - if (!usable_win && (swb_flags & SWB_USETAB)) - usable_win = qf_goto_tabwin_with_file(qf_fnum); - -! /* -! * 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) - { - if (qf_open_new_file_win(ll_ref) != OK) - return FAIL; -! *opened_window = TRUE; /* close it when fail */ - } - else - { -! if (curwin->w_llist_ref != NULL) /* In a location window */ - qf_goto_win_with_ll_file(usable_win_ptr, qf_fnum, ll_ref); -! else /* In a quickfix window */ - qf_goto_win_with_qfl_file(qf_fnum); - } - ---- 2845,2874 ---- - - if (!usable_win) - { -! // Locate a window showing a normal buffer - win = qf_find_win_with_normal_buf(); - if (win != NULL) - usable_win = 1; - } - -! // If no usable window is found and 'switchbuf' contains "usetab" -! // then search in other tabs. - if (!usable_win && (swb_flags & SWB_USETAB)) - usable_win = qf_goto_tabwin_with_file(qf_fnum); - -! // 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) - { - if (qf_open_new_file_win(ll_ref) != OK) - return FAIL; -! *opened_window = TRUE; // close it when fail - } - else - { -! if (curwin->w_llist_ref != NULL) // In a location window - qf_goto_win_with_ll_file(usable_win_ptr, qf_fnum, ll_ref); -! else // In a quickfix window - qf_goto_win_with_qfl_file(qf_fnum); - } - -*************** -*** 2946,2953 **** - - 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(); ---- 2894,2901 ---- - - 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(); -*************** -*** 2968,2977 **** - - if (IS_LL_STACK(qi)) - { -! /* -! * Location list. Check whether the associated window is still -! * present and the list is still valid. -! */ - if (!win_valid_any_tab(oldwin)) - { - EMSG(_("E924: Current window was closed")); ---- 2916,2923 ---- - - if (IS_LL_STACK(qi)) - { -! // Location list. Check whether the associated window is still -! // present and the list is still valid. - if (!win_valid_any_tab(oldwin)) - { - EMSG(_("E924: Current window was closed")); -*************** -*** 3016,3024 **** - - if (qf_pattern == NULL) - { -! /* -! * Go to line with error, unless qf_lnum is 0. -! */ - i = qf_lnum; - if (i > 0) - { ---- 2962,2968 ---- - - if (qf_pattern == NULL) - { -! // Go to line with error, unless qf_lnum is 0. - i = qf_lnum; - if (i > 0) - { -*************** -*** 3034,3045 **** - #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) ---- 2978,2987 ---- - #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) -*************** -*** 3065,3071 **** - { - 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, ---- 3007,3013 ---- - { - 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, -*************** -*** 3088,3108 **** - 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; ---- 3030,3050 ---- - 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; -*************** -*** 3304,3312 **** - } - } - -! /* -! * Highlight attributes used for displaying entries from the quickfix list. -! */ - static int qfFileAttr; - static int qfSepAttr; - static int qfLineAttr; ---- 3246,3252 ---- - } - } - -! // Highlight attributes used for displaying entries from the quickfix list. - static int qfFileAttr; - static int qfSepAttr; - static int qfLineAttr; -*************** -*** 3333,3339 **** - && (buf = buflist_findnr(qfp->qf_fnum)) != NULL) - { - fname = buf->b_fname; -! if (qfp->qf_type == 1) /* :helpgrep */ - fname = gettail(fname); - } - if (fname == NULL) ---- 3273,3279 ---- - && (buf = buflist_findnr(qfp->qf_fnum)) != NULL) - { - fname = buf->b_fname; -! if (qfp->qf_type == 1) // :helpgrep - fname = gettail(fname); - } - if (fname == NULL) -*************** -*** 3382,3395 **** - } - msg_puts((char_u *)" "); - -! /* Remove newlines and leading whitespace from the text. For an -! * unrecognized line keep the indent, the compiler may mark a word -! * with ^^^^. */ - qf_fmt_text((fname != NULL || qfp->qf_lnum != 0) - ? skipwhite(qfp->qf_text) : qfp->qf_text, - IObuff, IOSIZE); - msg_prt_line(IObuff, FALSE); -! out_flush(); /* show one line at a time */ - } - - /* ---- 3322,3335 ---- - } - msg_puts((char_u *)" "); - -! // Remove newlines and leading whitespace from the text. For an -! // unrecognized line keep the indent, the compiler may mark a word -! // with ^^^^. - qf_fmt_text((fname != NULL || qfp->qf_lnum != 0) - ? skipwhite(qfp->qf_text) : qfp->qf_text, - IObuff, IOSIZE); - msg_prt_line(IObuff, FALSE); -! out_flush(); // show one line at a time - } - - /* -*************** -*** 3406,3413 **** - int idx2 = -1; - char_u *arg = eap->arg; - int plus = FALSE; -! int all = eap->forceit; /* if not :cl!, only show -! recognised errors */ - qf_info_T *qi = &ql_info; - - if (is_loclist_cmd(eap->cmdidx)) ---- 3346,3353 ---- - int idx2 = -1; - char_u *arg = eap->arg; - int plus = FALSE; -! int all = eap->forceit; // if not :cl!, only show -! // recognised errors - qf_info_T *qi = &ql_info; - - if (is_loclist_cmd(eap->cmdidx)) -*************** -*** 3451,3463 **** - idx2 = (-idx2 > i) ? 0 : idx2 + i + 1; - } - -! /* Shorten all the file names, so that it is easy to read */ - shorten_fnames(FALSE); - -! /* -! * Get the attributes for the different quickfix highlight items. Note -! * that this depends on syntax items defined in the qf.vim syntax file -! */ - qfFileAttr = syn_name2attr((char_u *)"qfFileName"); - if (qfFileAttr == 0) - qfFileAttr = HL_ATTR(HLF_D); ---- 3391,3401 ---- - idx2 = (-idx2 > i) ? 0 : idx2 + i + 1; - } - -! // Shorten all the file names, so that it is easy to read - shorten_fnames(FALSE); - -! // Get the attributes for the different quickfix highlight items. Note -! // that this depends on syntax items defined in the qf.vim syntax file - qfFileAttr = syn_name2attr((char_u *)"qfFileName"); - if (qfFileAttr == 0) - qfFileAttr = HL_ATTR(HLF_D); -*************** -*** 3638,3646 **** - stop = (qfp == qfpnext); - vim_free(qfp); - if (stop) -! /* Somehow qf_count may have an incorrect value, set it to 1 -! * to avoid crashing when it's wrong. -! * TODO: Avoid qf_count being incorrect. */ - qfl->qf_count = 1; - } - qfl->qf_start = qfpnext; ---- 3576,3584 ---- - stop = (qfp == qfpnext); - vim_free(qfp); - if (stop) -! // Somehow qf_count may have an incorrect value, set it to 1 -! // to avoid crashing when it's wrong. -! // TODO: Avoid qf_count being incorrect. - qfl->qf_count = 1; - } - qfl->qf_start = qfpnext; -*************** -*** 3828,3841 **** - return; - } - -! /* Look for an existing quickfix window. */ - win = qf_find_win(qi); - -! /* -! * If a quickfix window is open but we have no errors to display, -! * close the window. If a quickfix window is not open, then open -! * it if we have errors; otherwise, leave it closed. -! */ - if (qf_stack_empty(qi) - || qi->qf_lists[qi->qf_curlist].qf_nonevalid - || qf_list_empty(qi, qi->qf_curlist)) ---- 3766,3777 ---- - return; - } - -! // Look for an existing quickfix window. - win = qf_find_win(qi); - -! // If a quickfix window is open but we have no errors to display, -! // close the window. If a quickfix window is not open, then open -! // it if we have errors; otherwise, leave it closed. - if (qf_stack_empty(qi) - || qi->qf_lists[qi->qf_curlist].qf_nonevalid - || qf_list_empty(qi, qi->qf_curlist)) -*************** -*** 3864,3870 **** - return; - } - -! /* Find existing quickfix window and close it. */ - win = qf_find_win(qi); - if (win != NULL) - win_close(win, FALSE); ---- 3800,3806 ---- - return; - } - -! // Find existing quickfix window and close it. - win = qf_find_win(qi); - if (win != NULL) - win_close(win, FALSE); -*************** -*** 4052,4060 **** - curwin->w_cursor.coladd = 0; - #endif - curwin->w_curswant = 0; -! update_topline(); /* scroll to show the line */ - redraw_later(VALID); -! curwin->w_redr_status = TRUE; /* update ruler */ - curwin = old_curwin; - curbuf = curwin->w_buffer; - } ---- 3988,3996 ---- - curwin->w_cursor.coladd = 0; - #endif - curwin->w_curswant = 0; -! update_topline(); // scroll to show the line - redraw_later(VALID); -! curwin->w_redr_status = TRUE; // update ruler - curwin = old_curwin; - curbuf = curwin->w_buffer; - } -*************** -*** 4093,4099 **** - qf_info_T *qi = &ql_info; - - if (IS_LL_WINDOW(wp)) -! /* In the location list window, use the referenced location list */ - qi = wp->w_llist_ref; - - return qi->qf_lists[qi->qf_curlist].qf_index; ---- 4029,4035 ---- - qf_info_T *qi = &ql_info; - - if (IS_LL_WINDOW(wp)) -! // In the location list window, use the referenced location list - qi = wp->w_llist_ref; - - return qi->qf_lists[qi->qf_curlist].qf_index; -*************** -*** 4106,4120 **** - static int - qf_win_pos_update( - qf_info_T *qi, -! int old_qf_index) /* previous qf_index or zero */ - { - win_T *win; - int qf_index = qi->qf_lists[qi->qf_curlist].qf_index; - -! /* -! * Put the cursor on the current error in the quickfix window, so that -! * it's viewable. -! */ - win = qf_find_win(qi); - if (win != NULL - && qf_index <= win->w_buffer->b_ml.ml_line_count ---- 4042,4054 ---- - static int - qf_win_pos_update( - qf_info_T *qi, -! int old_qf_index) // previous qf_index or zero - { - win_T *win; - int qf_index = qi->qf_lists[qi->qf_curlist].qf_index; - -! // Put the cursor on the current error in the quickfix window, so that -! // it's viewable. - win = qf_find_win(qi); - if (win != NULL - && qf_index <= win->w_buffer->b_ml.ml_line_count -*************** -*** 4142,4153 **** - static int - is_qf_win(win_T *win, qf_info_T *qi) - { -! /* -! * A window displaying the quickfix buffer will have the w_llist_ref field -! * set to NULL. -! * A window displaying a location list buffer will have the w_llist_ref -! * pointing to the location list. -! */ - if (bt_quickfix(win->w_buffer)) - if ((IS_QF_STACK(qi) && win->w_llist_ref == NULL) - || (IS_LL_STACK(qi) && win->w_llist_ref == qi)) ---- 4076,4085 ---- - static int - is_qf_win(win_T *win, qf_info_T *qi) - { -! // A window displaying the quickfix buffer will have the w_llist_ref field -! // set to NULL. -! // A window displaying a location list buffer will have the w_llist_ref -! // pointing to the location list. - if (bt_quickfix(win->w_buffer)) - if ((IS_QF_STACK(qi) && win->w_llist_ref == NULL) - || (IS_LL_STACK(qi) && win->w_llist_ref == qi)) -*************** -*** 4216,4229 **** - win_T *win; - aco_save_T aco; - -! /* Check if a buffer for the quickfix list exists. Update it. */ - buf = qf_find_buf(qi); - if (buf != NULL) - { - linenr_T old_line_count = buf->b_ml.ml_line_count; - - if (old_last == NULL) -! /* set curwin/curbuf to buf and save a few things */ - aucmd_prepbuf(&aco, buf); - - qf_update_win_titlevar(qi); ---- 4148,4161 ---- - win_T *win; - aco_save_T aco; - -! // Check if a buffer for the quickfix list exists. Update it. - buf = qf_find_buf(qi); - if (buf != NULL) - { - linenr_T old_line_count = buf->b_ml.ml_line_count; - - if (old_last == NULL) -! // set curwin/curbuf to buf and save a few things - aucmd_prepbuf(&aco, buf); - - qf_update_win_titlevar(qi); -*************** -*** 4235,4246 **** - { - (void)qf_win_pos_update(qi, 0); - -! /* restore curwin/curbuf and a few other things */ - aucmd_restbuf(&aco); - } - -! /* Only redraw when added lines are visible. This avoids flickering -! * when the added lines are not visible. */ - if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline) - redraw_buf_later(buf, NOT_VALID); - } ---- 4167,4178 ---- - { - (void)qf_win_pos_update(qi, 0); - -! // restore curwin/curbuf and a few other things - aucmd_restbuf(&aco); - } - -! // Only redraw when added lines are visible. This avoids flickering -! // when the added lines are not visible. - if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline) - redraw_buf_later(buf, NOT_VALID); - } -*************** -*** 4264,4274 **** - && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL - && errbuf->b_fname != NULL) - { -! if (qfp->qf_type == 1) /* :helpgrep */ - STRCPY(IObuff, gettail(errbuf->b_fname)); - else - { -! /* shorten the file name if not done already */ - if (errbuf->b_sfname == NULL - || mch_isFullName(errbuf->b_sfname)) - { ---- 4196,4206 ---- - && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL - && errbuf->b_fname != NULL) - { -! if (qfp->qf_type == 1) // :helpgrep - STRCPY(IObuff, gettail(errbuf->b_fname)); - else - { -! // shorten the file name if not done already - if (errbuf->b_sfname == NULL - || mch_isFullName(errbuf->b_sfname)) - { -*************** -*** 4307,4315 **** - IObuff[len++] = '|'; - IObuff[len++] = ' '; - -! /* Remove newlines and leading whitespace from the text. -! * For an unrecognized line keep the indent, the compiler may -! * mark a word with ^^^^. */ - qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text, - IObuff + len, IOSIZE - len); - ---- 4239,4247 ---- - IObuff[len++] = '|'; - IObuff[len++] = ' '; - -! // Remove newlines and leading whitespace from the text. -! // For an unrecognized line keep the indent, the compiler may -! // mark a word with ^^^^. - qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text, - IObuff + len, IOSIZE - len); - -*************** -*** 4342,4360 **** - return; - } - -! /* delete all existing lines */ - while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0) - (void)ml_delete((linenr_T)1, FALSE); - } - -! /* Check if there is anything to display */ - if (!qf_stack_empty(qi)) - { - char_u dirname[MAXPATHL]; - - *dirname = NUL; - -! /* Add one line for each error */ - if (old_last == NULL) - { - qfp = qi->qf_lists[qi->qf_curlist].qf_start; ---- 4274,4292 ---- - return; - } - -! // delete all existing lines - while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0) - (void)ml_delete((linenr_T)1, FALSE); - } - -! // Check if there is anything to display - if (!qf_stack_empty(qi)) - { - char_u dirname[MAXPATHL]; - - *dirname = NUL; - -! // Add one line for each error - if (old_last == NULL) - { - qfp = qi->qf_lists[qi->qf_curlist].qf_start; -*************** -*** 4377,4399 **** - } - - if (old_last == NULL) -! /* Delete the empty line which is now at the end */ - (void)ml_delete(lnum + 1, FALSE); - } - -! /* correct cursor position */ - check_lnums(TRUE); - - if (old_last == NULL) - { -! /* Set the 'filetype' to "qf" each time after filling the buffer. -! * This resembles reading a file into a buffer, it's more logical when -! * using autocommands. */ - ++curbuf_lock; - set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL); - curbuf->b_p_ma = FALSE; - -! keep_filetype = TRUE; /* don't detect 'filetype' */ - apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL, - FALSE, curbuf); - apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL, ---- 4309,4331 ---- - } - - if (old_last == NULL) -! // Delete the empty line which is now at the end - (void)ml_delete(lnum + 1, FALSE); - } - -! // correct cursor position - check_lnums(TRUE); - - if (old_last == NULL) - { -! // Set the 'filetype' to "qf" each time after filling the buffer. -! // This resembles reading a file into a buffer, it's more logical when -! // using autocommands. - ++curbuf_lock; - set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL); - curbuf->b_p_ma = FALSE; - -! keep_filetype = TRUE; // don't detect 'filetype' - apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL, - FALSE, curbuf); - apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL, -*************** -*** 4401,4411 **** - keep_filetype = FALSE; - --curbuf_lock; - -! /* make sure it will be redrawn */ - redraw_curbuf_later(NOT_VALID); - } - -! /* Restore KeyTyped, setting 'filetype' may reset it. */ - KeyTyped = old_KeyTyped; - } - ---- 4333,4343 ---- - keep_filetype = FALSE; - --curbuf_lock; - -! // make sure it will be redrawn - redraw_curbuf_later(NOT_VALID); - } - -! // Restore KeyTyped, setting 'filetype' may reset it. - KeyTyped = old_KeyTyped; - } - -*************** -*** 4694,4700 **** - - if (is_loclist_cmd(eap->cmdidx)) - { -! /* Location list */ - qi = GET_LOC_LIST(curwin); - if (qi == NULL) - return 0; ---- 4626,4632 ---- - - if (is_loclist_cmd(eap->cmdidx)) - { -! // Location list - qi = GET_LOC_LIST(curwin); - if (qi == NULL) - return 0; -*************** -*** 4707,4716 **** - if (qfp->qf_valid) - { - if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo) -! sz++; /* Count all valid entries */ - else if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum) - { -! /* Count the number of files */ - sz++; - prev_fnum = qfp->qf_fnum; - } ---- 4639,4648 ---- - if (qfp->qf_valid) - { - if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo) -! sz++; // Count all valid entries - else if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum) - { -! // Count the number of files - sz++; - prev_fnum = qfp->qf_fnum; - } -*************** -*** 4731,4737 **** - - if (is_loclist_cmd(eap->cmdidx)) - { -! /* Location list */ - qi = GET_LOC_LIST(curwin); - if (qi == NULL) - return 0; ---- 4663,4669 ---- - - if (is_loclist_cmd(eap->cmdidx)) - { -! // Location list - qi = GET_LOC_LIST(curwin); - if (qi == NULL) - return 0; -*************** -*** 4755,4761 **** - - if (is_loclist_cmd(eap->cmdidx)) - { -! /* Location list */ - qi = GET_LOC_LIST(curwin); - if (qi == NULL) - return 1; ---- 4687,4693 ---- - - if (is_loclist_cmd(eap->cmdidx)) - { -! // Location list - qi = GET_LOC_LIST(curwin); - if (qi == NULL) - return 1; -*************** -*** 4764,4770 **** - qfl = &qi->qf_lists[qi->qf_curlist]; - qfp = qfl->qf_start; - -! /* check if the list has valid errors */ - if (qfl->qf_count <= 0 || qfl->qf_nonevalid) - return 1; - ---- 4696,4702 ---- - qfl = &qi->qf_lists[qi->qf_curlist]; - qfp = qfl->qf_start; - -! // check if the list has valid errors - if (qfl->qf_count <= 0 || qfl->qf_nonevalid) - return 1; - -*************** -*** 4776,4782 **** - { - if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum) - { -! /* Count the number of files */ - eidx++; - prev_fnum = qfp->qf_fnum; - } ---- 4708,4714 ---- - { - if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum) - { -! // Count the number of files - eidx++; - prev_fnum = qfp->qf_fnum; - } -*************** -*** 4802,4808 **** - int i, eidx; - int prev_fnum = 0; - -! /* check if the list has valid errors */ - if (qfl->qf_count <= 0 || qfl->qf_nonevalid) - return 1; - ---- 4734,4740 ---- - int i, eidx; - int prev_fnum = 0; - -! // check if the list has valid errors - if (qfl->qf_count <= 0 || qfl->qf_nonevalid) - return 1; - -*************** -*** 4815,4821 **** - { - if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum) - { -! /* Count the number of files */ - eidx++; - prev_fnum = qfp->qf_fnum; - } ---- 4747,4753 ---- - { - if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum) - { -! // Count the number of files - eidx++; - prev_fnum = qfp->qf_fnum; - } -*************** -*** 4873,4881 **** - } - } - -! /* For cdo and ldo commands, jump to the nth valid error. -! * For cfdo and lfdo commands, jump to the nth valid file entry. -! */ - if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo - || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) - errornr = qf_get_nth_valid_entry(&qi->qf_lists[qi->qf_curlist], ---- 4805,4812 ---- - } - } - -! // For cdo and ldo commands, jump to the nth valid error. -! // For cfdo and lfdo commands, jump to the nth valid file entry. - if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo - || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) - errornr = qf_get_nth_valid_entry(&qi->qf_lists[qi->qf_curlist], -*************** -*** 4949,4955 **** - win_T *wp = NULL; - qf_info_T *qi = &ql_info; - char_u *au_name = NULL; -! int_u save_qfid = 0; /* init for gcc */ - int res; - - switch (eap->cmdidx) ---- 4880,4886 ---- - win_T *wp = NULL; - qf_info_T *qi = &ql_info; - char_u *au_name = NULL; -! int_u save_qfid = 0; // init for gcc - int res; - - switch (eap->cmdidx) -*************** -*** 4986,5001 **** - if (is_loclist_cmd(eap->cmdidx)) - wp = curwin; - -! /* -! * This function is used by the :cfile, :cgetfile and :caddfile -! * commands. -! * :cfile always creates a new quickfix list and jumps to the -! * first error. -! * :cgetfile creates a new quickfix list but doesn't jump to the -! * first error. -! * :caddfile adds to an existing quickfix list. If there is no -! * quickfix list then a new list is created. -! */ - res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile - && eap->cmdidx != CMD_laddfile), - qf_cmdtitle(*eap->cmdlinep), enc); ---- 4917,4930 ---- - if (is_loclist_cmd(eap->cmdidx)) - wp = curwin; - -! // This function is used by the :cfile, :cgetfile and :caddfile -! // commands. -! // :cfile always creates a new quickfix list and jumps to the -! // first error. -! // :cgetfile creates a new quickfix list but doesn't jump to the -! // first error. -! // :caddfile adds to an existing quickfix list. If there is no -! // quickfix list then a new list is created. - res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile - && eap->cmdidx != CMD_laddfile), - qf_cmdtitle(*eap->cmdlinep), enc); -*************** -*** 5045,5056 **** - static void - vgr_init_regmatch(regmmatch_T *regmatch, char_u *s) - { -! /* Get the search pattern: either white-separated or enclosed in // */ - regmatch->regprog = NULL; - - if (s == NULL || *s == NUL) - { -! /* Pattern is empty, use last search pattern. */ - if (last_search_pat() == NULL) - { - EMSG(_(e_noprevre)); ---- 4974,4985 ---- - static void - vgr_init_regmatch(regmmatch_T *regmatch, char_u *s) - { -! // Get the search pattern: either white-separated or enclosed in // - regmatch->regprog = NULL; - - if (s == NULL || *s == NUL) - { -! // Pattern is empty, use last search pattern. - if (last_search_pat() == NULL) - { - EMSG(_(e_noprevre)); -*************** -*** 5083,5090 **** - 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(); - } ---- 5012,5019 ---- - 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(); - } -*************** -*** 5105,5120 **** - buf_T *buf; - - #if 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 -! /* Don't use modelines here, it's useless. */ - save_mls = p_mls; - p_mls = 0; - -! /* Load file into a buffer, so that 'fileencoding' is detected, -! * autocommands applied, etc. */ - buf = load_dummy_buffer(fname, dirname_start, dirname_now); - - p_mls = save_mls; ---- 5034,5049 ---- - buf_T *buf; - - #if 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 -! // Don't use modelines here, it's useless. - save_mls = p_mls; - p_mls = 0; - -! // Load file into a buffer, so that 'fileencoding' is detected, -! // autocommands applied, etc. - buf = load_dummy_buffer(fname, dirname_start, dirname_now); - - p_mls = save_mls; -*************** -*** 5137,5154 **** - int_u qfid, - char_u *title) - { -! /* Verify that the quickfix/location list was not freed by an autocmd */ - if (!qflist_valid(wp, qfid)) - { - if (wp != NULL) - { -! /* An autocmd has freed the location list. */ - EMSG(_(e_loc_list_changed)); - return FALSE; - } - else - { -! /* Quickfix list is not found, create a new one. */ - qf_new_list(qi, title); - return TRUE; - } ---- 5066,5083 ---- - int_u qfid, - char_u *title) - { -! // Verify that the quickfix/location list was not freed by an autocmd - if (!qflist_valid(wp, qfid)) - { - if (wp != NULL) - { -! // An autocmd has freed the location list. - EMSG(_(e_loc_list_changed)); - return FALSE; - } - else - { -! // Quickfix list is not found, create a new one. - qf_new_list(qi, title); - return TRUE; - } -*************** -*** 5184,5195 **** - while (vim_regexec_multi(regmatch, curwin, buf, lnum, - col, NULL, NULL) > 0) - { -! /* Pass the buffer number so that it gets used even for a -! * dummy buffer, unless duplicate_name is set, then the -! * buffer will be wiped out below. */ - if (qf_add_entry(qi, - qi->qf_curlist, -! NULL, /* dir */ - fname, - NULL, - duplicate_name ? 0 : buf->b_fnum, ---- 5113,5124 ---- - while (vim_regexec_multi(regmatch, curwin, buf, lnum, - col, NULL, NULL) > 0) - { -! // Pass the buffer number so that it gets used even for a -! // dummy buffer, unless duplicate_name is set, then the -! // buffer will be wiped out below. - if (qf_add_entry(qi, - qi->qf_curlist, -! NULL, // dir - fname, - NULL, - duplicate_name ? 0 : buf->b_fnum, -*************** -*** 5197,5207 **** - regmatch->startpos[0].lnum + lnum, FALSE), - regmatch->startpos[0].lnum + lnum, - regmatch->startpos[0].col + 1, -! FALSE, /* vis_col */ -! NULL, /* search pattern */ -! 0, /* nr */ -! 0, /* type */ -! TRUE /* valid */ - ) == FAIL) - { - got_int = TRUE; ---- 5126,5136 ---- - regmatch->startpos[0].lnum + lnum, FALSE), - regmatch->startpos[0].lnum + lnum, - regmatch->startpos[0].col + 1, -! FALSE, // vis_col -! NULL, // search pattern -! 0, // nr -! 0, // type -! TRUE // valid - ) == FAIL) - { - got_int = TRUE; -*************** -*** 5242,5252 **** - buf = curbuf; - qf_jump(qi, 0, 0, forceit); - if (buf != curbuf) -! /* If we jumped to another buffer redrawing will already be -! * taken care of. */ - *redraw_for_dummy = FALSE; - -! /* Jump to the directory used after loading the buffer. */ - if (curbuf == first_match_buf && target_dir != NULL) - { - exarg_T ea; ---- 5171,5181 ---- - buf = curbuf; - qf_jump(qi, 0, 0, forceit); - if (buf != curbuf) -! // If we jumped to another buffer redrawing will already be -! // taken care of. - *redraw_for_dummy = FALSE; - -! // Jump to the directory used after loading the buffer. - if (curbuf == first_match_buf && target_dir != NULL) - { - exarg_T ea; -*************** -*** 5315,5321 **** - else - tomatch = MAXLNUM; - -! /* Get the search pattern: either white-separated or enclosed in // */ - regmatch.regprog = NULL; - title = vim_strsave(qf_cmdtitle(*eap->cmdlinep)); - p = skip_vimgrep_pat(eap->arg, &s, &flags); ---- 5244,5250 ---- - else - tomatch = MAXLNUM; - -! // Get the search pattern: either white-separated or enclosed in // - regmatch.regprog = NULL; - title = vim_strsave(qf_cmdtitle(*eap->cmdlinep)); - p = skip_vimgrep_pat(eap->arg, &s, &flags); -*************** -*** 5340,5349 **** - && eap->cmdidx != CMD_vimgrepadd - && eap->cmdidx != CMD_lvimgrepadd) - || qf_stack_empty(qi)) -! /* make place for a new list */ - qf_new_list(qi, title != NULL ? title : qf_cmdtitle(*eap->cmdlinep)); - -! /* parse the list of arguments */ - if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL) - goto theend; - if (fcount == 0) ---- 5269,5278 ---- - && eap->cmdidx != CMD_vimgrepadd - && eap->cmdidx != CMD_lvimgrepadd) - || qf_stack_empty(qi)) -! // make place for a new list - qf_new_list(qi, title != NULL ? title : qf_cmdtitle(*eap->cmdlinep)); - -! // parse the list of arguments - if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL) - goto theend; - if (fcount == 0) -*************** -*** 5360,5371 **** - goto theend; - } - -! /* Remember the current directory, because a BufRead autocommand that does -! * ":lcd %:p:h" changes the meaning of short path names. */ - mch_dirname(dirname_start, MAXPATHL); - -! /* Remember the current quickfix list identifier, so that we can check for -! * autocommands changing the current quickfix list. */ - save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; - - seconds = (time_t)0; ---- 5289,5300 ---- - goto theend; - } - -! // Remember the current directory, because a BufRead autocommand that does -! // ":lcd %:p:h" changes the meaning of short path names. - mch_dirname(dirname_start, MAXPATHL); - -! // Remember the current quickfix list identifier, so that we can check for -! // autocommands changing the current quickfix list. - save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; - - seconds = (time_t)0; -*************** -*** 5374,5381 **** - fname = shorten_fname1(fnames[fi]); - if (time(NULL) > seconds) - { -! /* Display the file name every second or so, show the user we are -! * working on it. */ - seconds = time(NULL); - vgr_display_fname(fname); - } ---- 5303,5310 ---- - fname = shorten_fname1(fnames[fi]); - if (time(NULL) > seconds) - { -! // Display the file name every second or so, show the user we are -! // working on it. - seconds = time(NULL); - vgr_display_fname(fname); - } -*************** -*** 5383,5389 **** - 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; - redraw_for_dummy = TRUE; ---- 5312,5318 ---- - 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; - redraw_for_dummy = TRUE; -*************** -*** 5391,5401 **** - buf = vgr_load_dummy_buf(fname, dirname_start, dirname_now); - } - else -! /* Use existing, loaded buffer. */ - using_dummy = FALSE; - -! /* Check whether the quickfix list is still valid. When loading a -! * buffer above, autocommands might have changed the quickfix list. */ - if (!vgr_qflist_valid(wp, qi, save_qfid, qf_cmdtitle(*eap->cmdlinep))) - { - FreeWild(fcount, fnames); ---- 5320,5330 ---- - buf = vgr_load_dummy_buf(fname, dirname_start, dirname_now); - } - else -! // Use existing, loaded buffer. - using_dummy = FALSE; - -! // Check whether the quickfix list is still valid. When loading a -! // buffer above, autocommands might have changed the quickfix list. - if (!vgr_qflist_valid(wp, qi, save_qfid, qf_cmdtitle(*eap->cmdlinep))) - { - FreeWild(fcount, fnames); -*************** -*** 5410,5417 **** - } - else - { -! /* Try for a match in all lines of the buffer. -! * For ":1vimgrep" look for first match only. */ - found_match = vgr_match_buflines(qi, fname, buf, ®match, - tomatch, duplicate_name, flags); - ---- 5339,5346 ---- - } - else - { -! // Try for a match in all lines of the buffer. -! // For ":1vimgrep" look for first match only. - found_match = vgr_match_buflines(qi, fname, buf, ®match, - tomatch, duplicate_name, flags); - -*************** -*** 5421,5442 **** - 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, dirname_start); - buf = NULL; - } - else if (!cmdmod.hide -! || buf->b_p_bh[0] == 'u' /* "unload" */ -! || buf->b_p_bh[0] == 'w' /* "wipe" */ -! || buf->b_p_bh[0] == 'd') /* "delete" */ - { -! /* When no match was found we don't need to remember the -! * buffer, wipe it out. If there was a match and it -! * wasn't the first one or we won't jump there: only -! * unload the buffer. -! * Ignore 'hidden' here, because it may lead to having too -! * many swap files. */ - if (!found_match) - { - wipe_dummy_buffer(buf, dirname_start); ---- 5350,5371 ---- - 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, dirname_start); - buf = NULL; - } - else if (!cmdmod.hide -! || buf->b_p_bh[0] == 'u' // "unload" -! || buf->b_p_bh[0] == 'w' // "wipe" -! || buf->b_p_bh[0] == 'd') // "delete" - { -! // When no match was found we don't need to remember the -! // buffer, wipe it out. If there was a match and it -! // wasn't the first one or we won't jump there: only -! // unload the buffer. -! // Ignore 'hidden' here, because it may lead to having too -! // many swap files. - if (!found_match) - { - wipe_dummy_buffer(buf, dirname_start); -*************** -*** 5445,5451 **** - else if (buf != first_match_buf || (flags & VGR_NOJUMP)) - { - unload_dummy_buffer(buf, dirname_start); -! /* Keeping the buffer, remove the dummy flag. */ - buf->b_flags &= ~BF_DUMMY; - buf = NULL; - } ---- 5374,5380 ---- - else if (buf != first_match_buf || (flags & VGR_NOJUMP)) - { - unload_dummy_buffer(buf, dirname_start); -! // Keeping the buffer, remove the dummy flag. - buf->b_flags &= ~BF_DUMMY; - buf = NULL; - } -*************** -*** 5453,5472 **** - - if (buf != NULL) - { -! /* Keeping the buffer, remove the dummy flag. */ - buf->b_flags &= ~BF_DUMMY; - -! /* If the buffer is still loaded we need to use the -! * directory we jumped to below. */ - if (buf == first_match_buf - && target_dir == NULL - && STRCMP(dirname_start, dirname_now) != 0) - target_dir = vim_strsave(dirname_now); - -! /* The buffer is still loaded, the Filetype autocommands -! * need to be done now, in that buffer. And the modelines -! * need to be done (again). But not the window-local -! * options! */ - aucmd_prepbuf(&aco, buf); - #if defined(FEAT_SYN_HL) - apply_autocmds(EVENT_FILETYPE, buf->b_p_ft, ---- 5382,5401 ---- - - if (buf != NULL) - { -! // Keeping the buffer, remove the dummy flag. - buf->b_flags &= ~BF_DUMMY; - -! // If the buffer is still loaded we need to use the -! // directory we jumped to below. - if (buf == first_match_buf - && target_dir == NULL - && STRCMP(dirname_start, dirname_now) != 0) - target_dir = vim_strsave(dirname_now); - -! // The buffer is still loaded, the Filetype autocommands -! // need to be done now, in that buffer. And the modelines -! // need to be done (again). But not the window-local -! // options! - aucmd_prepbuf(&aco, buf); - #if defined(FEAT_SYN_HL) - apply_autocmds(EVENT_FILETYPE, buf->b_p_ft, -*************** -*** 5491,5500 **** - if (au_name != NULL) - apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, - curbuf->b_fname, TRUE, curbuf); -! /* -! * The QuickFixCmdPost autocmd may free the quickfix list. Check the list -! * is still valid. -! */ - if (!qflist_valid(wp, save_qfid)) - goto theend; - ---- 5420,5427 ---- - if (au_name != NULL) - apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, - curbuf->b_fname, TRUE, curbuf); -! // The QuickFixCmdPost autocmd may free the quickfix list. Check the list -! // is still valid. - if (!qflist_valid(wp, save_qfid)) - goto theend; - -*************** -*** 5511,5518 **** - else - EMSG2(_(e_nomatch2), s); - -! /* If we loaded a dummy buffer into the current window, the autocommands -! * may have messed up things, need to redraw and recompute folds. */ - if (redraw_for_dummy) - { - #ifdef FEAT_FOLDING ---- 5438,5445 ---- - else - EMSG2(_(e_nomatch2), s); - -! // If we loaded a dummy buffer into the current window, the autocommands -! // may have messed up things, need to redraw and recompute folds. - if (redraw_for_dummy) - { - #ifdef FEAT_FOLDING -*************** -*** 5544,5551 **** - mch_dirname(dirname_now, MAXPATHL); - if (STRCMP(dirname_start, dirname_now) != 0) - { -! /* If the directory has changed, change it back by building up an -! * appropriate ex command and executing it. */ - exarg_T ea; - - ea.arg = dirname_start; ---- 5471,5478 ---- - mch_dirname(dirname_now, MAXPATHL); - if (STRCMP(dirname_start, dirname_now) != 0) - { -! // If the directory has changed, change it back by building up an -! // appropriate ex command and executing it. - exarg_T ea; - - ea.arg = dirname_start; -*************** -*** 5571,5578 **** - static buf_T * - load_dummy_buffer( - char_u *fname, -! char_u *dirname_start, /* in: old directory */ -! char_u *resulting_dir) /* out: new directory */ - { - buf_T *newbuf; - bufref_T newbufref; ---- 5498,5505 ---- - static buf_T * - load_dummy_buffer( - char_u *fname, -! char_u *dirname_start, // in: old directory -! char_u *resulting_dir) // out: new directory - { - buf_T *newbuf; - bufref_T newbufref; -*************** -*** 5581,5612 **** - aco_save_T aco; - int readfile_result; - -! /* Allocate a buffer without putting it in the buffer list. */ - newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY); - if (newbuf == NULL) - return NULL; - set_bufref(&newbufref, newbuf); - -! /* Init the options. */ - buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); - -! /* need to open the memfile before putting the buffer in a window */ - if (ml_open(newbuf) == OK) - { -! /* Make sure this buffer isn't wiped out by autocommands. */ - ++newbuf->b_locked; - -! /* set curwin/curbuf to buf and save a few things */ - aucmd_prepbuf(&aco, newbuf); - -! /* Need to set the filename for autocommands. */ - (void)setfname(curbuf, fname, NULL, FALSE); - -! /* Create swap file now to avoid the ATTENTION message. */ - check_need_swap(TRUE); - -! /* Remove the "dummy" flag, otherwise autocommands may not -! * work. */ - curbuf->b_flags &= ~BF_DUMMY; - - newbuf_to_wipe.br_buf = NULL; ---- 5508,5539 ---- - aco_save_T aco; - int readfile_result; - -! // Allocate a buffer without putting it in the buffer list. - newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY); - if (newbuf == NULL) - return NULL; - set_bufref(&newbufref, newbuf); - -! // Init the options. - buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); - -! // need to open the memfile before putting the buffer in a window - if (ml_open(newbuf) == OK) - { -! // Make sure this buffer isn't wiped out by autocommands. - ++newbuf->b_locked; - -! // set curwin/curbuf to buf and save a few things - aucmd_prepbuf(&aco, newbuf); - -! // Need to set the filename for autocommands. - (void)setfname(curbuf, fname, NULL, FALSE); - -! // Create swap file now to avoid the ATTENTION message. - check_need_swap(TRUE); - -! // Remove the "dummy" flag, otherwise autocommands may not -! // work. - curbuf->b_flags &= ~BF_DUMMY; - - newbuf_to_wipe.br_buf = NULL; -*************** -*** 5621,5650 **** - failed = FALSE; - if (curbuf != newbuf) - { -! /* Bloody autocommands changed the buffer! Can happen when -! * using netrw and editing a remote file. Use the current -! * buffer instead, delete the dummy one after restoring the -! * window stuff. */ - set_bufref(&newbuf_to_wipe, newbuf); - newbuf = curbuf; - } - } - -! /* restore curwin/curbuf and a few other things */ - aucmd_restbuf(&aco); - if (newbuf_to_wipe.br_buf != NULL && bufref_valid(&newbuf_to_wipe)) - wipe_buffer(newbuf_to_wipe.br_buf, FALSE); - -! /* Add back the "dummy" flag, otherwise buflist_findname_stat() won't -! * skip it. */ - newbuf->b_flags |= BF_DUMMY; - } - -! /* -! * When autocommands/'autochdir' option changed directory: go back. -! * Let the caller know what the resulting dir was first, in case it is -! * important. -! */ - mch_dirname(resulting_dir, MAXPATHL); - restore_start_dir(dirname_start); - ---- 5548,5575 ---- - failed = FALSE; - if (curbuf != newbuf) - { -! // Bloody autocommands changed the buffer! Can happen when -! // using netrw and editing a remote file. Use the current -! // buffer instead, delete the dummy one after restoring the -! // window stuff. - set_bufref(&newbuf_to_wipe, newbuf); - newbuf = curbuf; - } - } - -! // restore curwin/curbuf and a few other things - aucmd_restbuf(&aco); - if (newbuf_to_wipe.br_buf != NULL && bufref_valid(&newbuf_to_wipe)) - wipe_buffer(newbuf_to_wipe.br_buf, FALSE); - -! // Add back the "dummy" flag, otherwise buflist_findname_stat() won't -! // skip it. - newbuf->b_flags |= BF_DUMMY; - } - -! // When autocommands/'autochdir' option changed directory: go back. -! // Let the caller know what the resulting dir was first, in case it is -! // important. - mch_dirname(resulting_dir, MAXPATHL); - restore_start_dir(dirname_start); - -*************** -*** 5666,5690 **** - static void - wipe_dummy_buffer(buf_T *buf, char_u *dirname_start) - { -! if (curbuf != buf) /* safety check */ - { - #if defined(FEAT_EVAL) - cleanup_T cs; - -! /* Reset the error/interrupt/exception state here so that aborting() -! * returns FALSE when wiping out the buffer. Otherwise it doesn't -! * work when got_int is set. */ - enter_cleanup(&cs); - #endif - - wipe_buffer(buf, FALSE); - - #if defined(FEAT_EVAL) -! /* Restore the error/interrupt/exception state if not discarded by a -! * new aborting error, interrupt, or uncaught exception. */ - leave_cleanup(&cs); - #endif -! /* When autocommands/'autochdir' option changed directory: go back. */ - restore_start_dir(dirname_start); - } - } ---- 5591,5615 ---- - static void - wipe_dummy_buffer(buf_T *buf, char_u *dirname_start) - { -! if (curbuf != buf) // safety check - { - #if defined(FEAT_EVAL) - cleanup_T cs; - -! // Reset the error/interrupt/exception state here so that aborting() -! // returns FALSE when wiping out the buffer. Otherwise it doesn't -! // work when got_int is set. - enter_cleanup(&cs); - #endif - - wipe_buffer(buf, FALSE); - - #if defined(FEAT_EVAL) -! // Restore the error/interrupt/exception state if not discarded by a -! // new aborting error, interrupt, or uncaught exception. - leave_cleanup(&cs); - #endif -! // When autocommands/'autochdir' option changed directory: go back. - restore_start_dir(dirname_start); - } - } -*************** -*** 5697,5707 **** - static void - unload_dummy_buffer(buf_T *buf, char_u *dirname_start) - { -! if (curbuf != buf) /* safety check */ - { - close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE); - -! /* When autocommands/'autochdir' option changed directory: go back. */ - restore_start_dir(dirname_start); - } - } ---- 5622,5632 ---- - static void - unload_dummy_buffer(buf_T *buf, char_u *dirname_start) - { -! if (curbuf != buf) // safety check - { - close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE); - -! // When autocommands/'autochdir' option changed directory: go back. - restore_start_dir(dirname_start); - } - } -*************** -*** 5741,5747 **** - qfp = qi->qf_lists[qf_idx].qf_start; - for (i = 1; !got_int && i <= qi->qf_lists[qf_idx].qf_count; ++i) - { -! /* Handle entries with a non-existing buffer number. */ - bufnum = qfp->qf_fnum; - if (bufnum != 0 && (buflist_findnr(bufnum) == NULL)) - bufnum = 0; ---- 5666,5672 ---- - qfp = qi->qf_lists[qf_idx].qf_start; - for (i = 1; !got_int && i <= qi->qf_lists[qf_idx].qf_count; ++i) - { -! // Handle entries with a non-existing buffer number. - bufnum = qfp->qf_fnum; - if (bufnum != 0 && (buflist_findnr(bufnum) == NULL)) - bufnum = 0; -*************** -*** 5772,5780 **** - return OK; - } - -! /* -! * Flags used by getqflist()/getloclist() to determine which fields to return. -! */ - enum { - QF_GETLIST_NONE = 0x0, - QF_GETLIST_TITLE = 0x1, ---- 5697,5703 ---- - return OK; - } - -! // Flags used by getqflist()/getloclist() to determine which fields to return. - enum { - QF_GETLIST_NONE = 0x0, - QF_GETLIST_TITLE = 0x1, -*************** -*** 5803,5814 **** - dictitem_T *efm_di; - list_T *l; - -! /* Only a List value is supported */ - if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL) - { -! /* If errorformat is supplied then use it, otherwise use the 'efm' -! * option setting -! */ - if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL) - { - if (efm_di->di_tv.v_type != VAR_STRING || ---- 5726,5736 ---- - dictitem_T *efm_di; - list_T *l; - -! // Only a List value is supported - if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL) - { -! // If errorformat is supplied then use it, otherwise use the 'efm' -! // option setting - if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL) - { - if (efm_di->di_tv.v_type != VAR_STRING || -*************** -*** 5847,5854 **** - { - win_T *win; - -! /* The quickfix window can be opened even if the quickfix list is not set -! * using ":copen". This is not true for location lists. */ - if (qi == NULL) - return 0; - win = qf_find_win(qi); ---- 5769,5776 ---- - { - win_T *win; - -! // The quickfix window can be opened even if the quickfix list is not set -! // using ":copen". This is not true for location lists. - if (qi == NULL) - return 0; - win = qf_find_win(qi); -*************** -*** 5922,5934 **** - int qf_idx; - dictitem_T *di; - -! qf_idx = qi->qf_curlist; /* default is the current list */ - if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL) - { -! /* Use the specified quickfix/location list */ - if (di->di_tv.v_type == VAR_NUMBER) - { -! /* for zero use the current list */ - if (di->di_tv.vval.v_number != 0) - { - qf_idx = di->di_tv.vval.v_number - 1; ---- 5844,5856 ---- - int qf_idx; - dictitem_T *di; - -! qf_idx = qi->qf_curlist; // default is the current list - if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL) - { -! // Use the specified quickfix/location list - if (di->di_tv.v_type == VAR_NUMBER) - { -! // for zero use the current list - if (di->di_tv.vval.v_number != 0) - { - qf_idx = di->di_tv.vval.v_number - 1; -*************** -*** 5939,5945 **** - else if (di->di_tv.v_type == VAR_STRING - && di->di_tv.vval.v_string != NULL - && STRCMP(di->di_tv.vval.v_string, "$") == 0) -! /* Get the last quickfix list number */ - qf_idx = qi->qf_listcount - 1; - else - qf_idx = INVALID_QFIDX; ---- 5861,5867 ---- - else if (di->di_tv.v_type == VAR_STRING - && di->di_tv.vval.v_string != NULL - && STRCMP(di->di_tv.vval.v_string, "$") == 0) -! // Get the last quickfix list number - qf_idx = qi->qf_listcount - 1; - else - qf_idx = INVALID_QFIDX; -*************** -*** 5947,5958 **** - - if ((di = dict_find(what, (char_u *)"id", -1)) != NULL) - { -! /* Look for a list with the specified id */ - if (di->di_tv.v_type == VAR_NUMBER) - { -! /* -! * For zero, use the current list or the list specified by 'nr' -! */ - if (di->di_tv.vval.v_number != 0) - qf_idx = qf_id2nr(qi, di->di_tv.vval.v_number); - } ---- 5869,5878 ---- - - if ((di = dict_find(what, (char_u *)"id", -1)) != NULL) - { -! // Look for a list with the specified id - if (di->di_tv.v_type == VAR_NUMBER) - { -! // For zero, use the current list or the list specified by 'nr' - if (di->di_tv.vval.v_number != 0) - qf_idx = qf_id2nr(qi, di->di_tv.vval.v_number); - } -*************** -*** 6085,6091 **** - { - int idx = qi->qf_lists[qf_idx].qf_index; - if (qf_list_empty(qi, qf_idx)) -! /* For empty lists, qf_index is set to 1 */ - idx = 0; - return dict_add_number(retdict, "idx", idx); - } ---- 6005,6011 ---- - { - int idx = qi->qf_lists[qf_idx].qf_index; - if (qf_list_empty(qi, qf_idx)) -! // For empty lists, qf_index is set to 1 - idx = 0; - return dict_add_number(retdict, "idx", idx); - } -*************** -*** 6116,6122 **** - if (!qf_stack_empty(qi)) - qf_idx = qf_getprop_qfidx(qi, what); - -! /* List is not present or is empty */ - if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX) - return qf_getprop_defaults(qi, flags, retdict); - ---- 6036,6042 ---- - if (!qf_stack_empty(qi)) - qf_idx = qf_getprop_qfidx(qi, what); - -! // List is not present or is empty - if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX) - return qf_getprop_defaults(qi, flags, retdict); - -*************** -*** 6243,6255 **** - - if (action == ' ' || qf_idx == qi->qf_listcount) - { -! /* make place for a new list */ - qf_new_list(qi, title); - qf_idx = qi->qf_curlist; - qfl = &qi->qf_lists[qf_idx]; - } - else if (action == 'a' && !qf_list_empty(qi, qf_idx)) -! /* Adding to existing list, use last entry. */ - old_last = qfl->qf_last; - else if (action == 'r') - { ---- 6163,6175 ---- - - if (action == ' ' || qf_idx == qi->qf_listcount) - { -! // make place for a new list - qf_new_list(qi, title); - qf_idx = qi->qf_curlist; - qfl = &qi->qf_lists[qf_idx]; - } - else if (action == 'a' && !qf_list_empty(qi, qf_idx)) -! // Adding to existing list, use last entry. - old_last = qfl->qf_last; - else if (action == 'r') - { -*************** -*** 6260,6266 **** - for (li = list->lv_first; li != NULL; li = li->li_next) - { - if (li->li_tv.v_type != VAR_DICT) -! continue; /* Skip non-dict items */ - - d = li->li_tv.vval.v_dict; - if (d == NULL) ---- 6180,6186 ---- - for (li = list->lv_first; li != NULL; li = li->li_next) - { - if (li->li_tv.v_type != VAR_DICT) -! continue; // Skip non-dict items - - d = li->li_tv.vval.v_dict; - if (d == NULL) -*************** -*** 6272,6278 **** - } - - if (qfl->qf_index == 0) -! /* no valid entry */ - qfl->qf_nonevalid = TRUE; - else - qfl->qf_nonevalid = FALSE; ---- 6192,6198 ---- - } - - if (qfl->qf_index == 0) -! // no valid entry - qfl->qf_nonevalid = TRUE; - else - qfl->qf_nonevalid = FALSE; -*************** -*** 6283,6289 **** - qfl->qf_index = 1; - } - -! /* Don't update the cursor in quickfix window when appending entries */ - qf_update_buffer(qi, old_last); - - return retval; ---- 6203,6209 ---- - qfl->qf_index = 1; - } - -! // Don't update the cursor in quickfix window when appending entries - qf_update_buffer(qi, old_last); - - return retval; -*************** -*** 6300,6330 **** - int *newlist) - { - dictitem_T *di; -! int qf_idx = qi->qf_curlist; /* default is the current list */ - - if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL) - { -! /* Use the specified quickfix/location list */ - if (di->di_tv.v_type == VAR_NUMBER) - { -! /* for zero use the current list */ - if (di->di_tv.vval.v_number != 0) - qf_idx = di->di_tv.vval.v_number - 1; - - if ((action == ' ' || action == 'a') && qf_idx == qi->qf_listcount) - { -! /* -! * When creating a new list, accept qf_idx pointing to the next -! * non-available list and add the new list at the end of the -! * stack. -! */ - *newlist = TRUE; - qf_idx = qf_stack_empty(qi) ? 0 : qi->qf_listcount - 1; - } - else if (qf_idx < 0 || qf_idx >= qi->qf_listcount) - return INVALID_QFIDX; - else if (action != ' ') -! *newlist = FALSE; /* use the specified list */ - } - else if (di->di_tv.v_type == VAR_STRING - && di->di_tv.vval.v_string != NULL ---- 6220,6248 ---- - int *newlist) - { - dictitem_T *di; -! int qf_idx = qi->qf_curlist; // default is the current list - - if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL) - { -! // Use the specified quickfix/location list - if (di->di_tv.v_type == VAR_NUMBER) - { -! // for zero use the current list - if (di->di_tv.vval.v_number != 0) - qf_idx = di->di_tv.vval.v_number - 1; - - if ((action == ' ' || action == 'a') && qf_idx == qi->qf_listcount) - { -! // When creating a new list, accept qf_idx pointing to the next -! // non-available list and add the new list at the end of the -! // stack. - *newlist = TRUE; - qf_idx = qf_stack_empty(qi) ? 0 : qi->qf_listcount - 1; - } - else if (qf_idx < 0 || qf_idx >= qi->qf_listcount) - return INVALID_QFIDX; - else if (action != ' ') -! *newlist = FALSE; // use the specified list - } - else if (di->di_tv.v_type == VAR_STRING - && di->di_tv.vval.v_string != NULL -*************** -*** 6343,6349 **** - - if (!*newlist && (di = dict_find(what, (char_u *)"id", -1)) != NULL) - { -! /* Use the quickfix/location list with the specified id */ - if (di->di_tv.v_type != VAR_NUMBER) - return INVALID_QFIDX; - ---- 6261,6267 ---- - - if (!*newlist && (di = dict_find(what, (char_u *)"id", -1)) != NULL) - { -! // Use the quickfix/location list with the specified id - if (di->di_tv.v_type != VAR_NUMBER) - return INVALID_QFIDX; - -*************** -*** 6406,6412 **** - dictitem_T *efm_di; - int retval = FAIL; - -! /* Use the user supplied errorformat settings (if present) */ - if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL) - { - if (efm_di->di_tv.v_type != VAR_STRING || ---- 6324,6330 ---- - dictitem_T *efm_di; - int retval = FAIL; - -! // Use the user supplied errorformat settings (if present) - if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL) - { - if (efm_di->di_tv.v_type != VAR_STRING || -*************** -*** 6415,6421 **** - errorformat = efm_di->di_tv.vval.v_string; - } - -! /* Only a List value is supported */ - if (di->di_tv.v_type != VAR_LIST || di->di_tv.vval.v_list == NULL) - return FAIL; - ---- 6333,6339 ---- - errorformat = efm_di->di_tv.vval.v_string; - } - -! // Only a List value is supported - if (di->di_tv.v_type != VAR_LIST || di->di_tv.vval.v_list == NULL) - return FAIL; - -*************** -*** 6462,6468 **** - newlist = TRUE; - - qf_idx = qf_setprop_get_qfidx(qi, what, action, &newlist); -! if (qf_idx == INVALID_QFIDX) /* List not found */ - return FAIL; - - if (newlist) ---- 6380,6386 ---- - newlist = TRUE; - - qf_idx = qf_setprop_get_qfidx(qi, what, action, &newlist); -! if (qf_idx == INVALID_QFIDX) // List not found - return FAIL; - - if (newlist) -*************** -*** 6516,6522 **** - - if (qfwin != NULL) - { -! /* If the quickfix/location list window is open, then clear it */ - if (qi->qf_curlist < qi->qf_listcount) - qf_free(&qi->qf_lists[qi->qf_curlist]); - qf_update_buffer(qi, NULL); ---- 6434,6440 ---- - - if (qfwin != NULL) - { -! // If the quickfix/location list window is open, then clear it - if (qi->qf_curlist < qi->qf_listcount) - qf_free(&qi->qf_lists[qi->qf_curlist]); - qf_update_buffer(qi, NULL); -*************** -*** 6524,6532 **** - - if (wp != NULL && IS_LL_WINDOW(wp)) - { -! /* If in the location list window, then use the non-location list -! * window with this location list (if present) -! */ - llwin = find_win_with_ll(qi); - if (llwin != NULL) - wp = llwin; ---- 6442,6449 ---- - - if (wp != NULL && IS_LL_WINDOW(wp)) - { -! // If in the location list window, then use the non-location list -! // window with this location list (if present) - llwin = find_win_with_ll(qi); - if (llwin != NULL) - wp = llwin; -*************** -*** 6535,6551 **** - qf_free_all(wp); - if (wp == NULL) - { -! /* quickfix list */ - qi->qf_curlist = 0; - qi->qf_listcount = 0; - } - else if (IS_LL_WINDOW(orig_wp)) - { -! /* If the location list window is open, then create a new empty -! * location list */ - qf_info_T *new_ll = ll_new_list(); - -! /* first free the list reference in the location list window */ - ll_free_all(&orig_wp->w_llist_ref); - - orig_wp->w_llist_ref = new_ll; ---- 6452,6468 ---- - qf_free_all(wp); - if (wp == NULL) - { -! // quickfix list - qi->qf_curlist = 0; - qi->qf_listcount = 0; - } - else if (IS_LL_WINDOW(orig_wp)) - { -! // If the location list window is open, then create a new empty -! // location list - qf_info_T *new_ll = ll_new_list(); - -! // first free the list reference in the location list window - ll_free_all(&orig_wp->w_llist_ref); - - orig_wp->w_llist_ref = new_ll; -*************** -*** 6582,6588 **** - - if (action == 'f') - { -! /* Free the entire quickfix or location list stack */ - qf_free_stack(wp, qi); - } - else if (what != NULL) ---- 6499,6505 ---- - - if (action == 'f') - { -! // Free the entire quickfix or location list stack - qf_free_stack(wp, qi); - } - else if (what != NULL) -*************** -*** 6643,6652 **** - } - if (IS_LL_WINDOW(win) && (win->w_llist_ref->qf_refcount == 1)) - { -! /* In a location list window and none of the other windows is -! * referring to this location list. Mark the location list -! * context as still in use. -! */ - abort = mark_quickfix_ctx(win->w_llist_ref, copyID); - if (abort) - return abort; ---- 6560,6568 ---- - } - if (IS_LL_WINDOW(win) && (win->w_llist_ref->qf_refcount == 1)) - { -! // In a location list window and none of the other windows is -! // referring to this location list. Mark the location list -! // context as still in use. - abort = mark_quickfix_ctx(win->w_llist_ref, copyID); - if (abort) - return abort; -*************** -*** 6694,6700 **** - #endif - } - -! /* Must come after autocommands. */ - if (is_loclist_cmd(eap->cmdidx)) - { - qi = ll_get_or_alloc_list(curwin); ---- 6610,6616 ---- - #endif - } - -! // Must come after autocommands. - if (is_loclist_cmd(eap->cmdidx)) - { - qi = ll_get_or_alloc_list(curwin); -*************** -*** 6807,6814 **** - wp = curwin; - } - -! /* Evaluate the expression. When the result is a string or a list we can -! * use it to fill the errorlist. */ - tv = eval_expr(eap->arg, NULL); - if (tv != NULL) - { ---- 6723,6730 ---- - wp = curwin; - } - -! // Evaluate the expression. When the result is a string or a list we can -! // use it to fill the errorlist. - tv = eval_expr(eap->arg, NULL); - if (tv != NULL) - { -*************** -*** 6854,6874 **** - win_T *wp; - qf_info_T *qi; - -! /* If the current window is a help window, then use it */ - if (bt_help(curwin->w_buffer)) - wp = curwin; - else -! /* Find an existing help window */ - wp = qf_find_help_win(); - -! if (wp == NULL) /* Help window not found */ - qi = NULL; - else - qi = wp->w_llist; - - if (qi == NULL) - { -! /* Allocate a new location list for help text matches */ - if ((qi = ll_new_list()) == NULL) - return NULL; - *new_ll = TRUE; ---- 6770,6790 ---- - win_T *wp; - qf_info_T *qi; - -! // If the current window is a help window, then use it - if (bt_help(curwin->w_buffer)) - wp = curwin; - else -! // Find an existing help window - wp = qf_find_help_win(); - -! if (wp == NULL) // Help window not found - qi = NULL; - else - qi = wp->w_llist; - - if (qi == NULL) - { -! // Allocate a new location list for help text matches - if ((qi = ll_new_list()) == NULL) - return NULL; - *new_ll = TRUE; -*************** -*** 6901,6908 **** - { - char_u *line = IObuff; - #ifdef FEAT_MBYTE -! /* Convert a line if 'encoding' is not utf-8 and -! * the line contains a non-ASCII character. */ - if (p_vc->vc_type != CONV_NONE - && has_non_ascii(IObuff)) - { ---- 6817,6824 ---- - { - char_u *line = IObuff; - #ifdef FEAT_MBYTE -! // Convert a line if 'encoding' is not utf-8 and -! // the line contains a non-ASCII character. - if (p_vc->vc_type != CONV_NONE - && has_non_ascii(IObuff)) - { -*************** -*** 6916,6940 **** - { - int l = (int)STRLEN(line); - -! /* remove trailing CR, LF, spaces, etc. */ - while (l > 0 && line[l - 1] <= ' ') - line[--l] = NUL; - - if (qf_add_entry(qi, - qi->qf_curlist, -! NULL, /* dir */ - fname, - NULL, - 0, - line, - lnum, - (int)(p_regmatch->startp[0] - line) -! + 1, /* col */ -! FALSE, /* vis_col */ -! NULL, /* search pattern */ -! 0, /* nr */ -! 1, /* type */ -! TRUE /* valid */ - ) == FAIL) - { - got_int = TRUE; ---- 6832,6856 ---- - { - int l = (int)STRLEN(line); - -! // remove trailing CR, LF, spaces, etc. - while (l > 0 && line[l - 1] <= ' ') - line[--l] = NUL; - - if (qf_add_entry(qi, - qi->qf_curlist, -! NULL, // dir - fname, - NULL, - 0, - line, - lnum, - (int)(p_regmatch->startp[0] - line) -! + 1, // col -! FALSE, // vis_col -! NULL, // search pattern -! 0, // nr -! 1, // type -! TRUE // valid - ) == FAIL) - { - got_int = TRUE; -*************** -*** 6976,6982 **** - char_u **fnames; - int fi; - -! /* Find all "*.txt" and "*.??x" files in the "doc" directory. */ - add_pathsep(dirname); - STRCAT(dirname, "doc/*.\\(txt\\|??x\\)"); - if (gen_expand_wildcards(1, &dirname, &fcount, ---- 6892,6898 ---- - char_u **fnames; - int fi; - -! // Find all "*.txt" and "*.??x" files in the "doc" directory. - add_pathsep(dirname); - STRCAT(dirname, "doc/*.\\(txt\\|??x\\)"); - if (gen_expand_wildcards(1, &dirname, &fcount, -*************** -*** 6986,6992 **** - for (fi = 0; fi < fcount && !got_int; ++fi) - { - #ifdef FEAT_MULTI_LANG -! /* Skip files for a different language. */ - if (lang != NULL - && STRNICMP(lang, fnames[fi] - + STRLEN(fnames[fi]) - 3, 2) != 0 ---- 6902,6908 ---- - for (fi = 0; fi < fcount && !got_int; ++fi) - { - #ifdef FEAT_MULTI_LANG -! // Skip files for a different language. - if (lang != NULL - && STRNICMP(lang, fnames[fi] - + STRLEN(fnames[fi]) - 3, 2) != 0 -*************** -*** 7020,7034 **** - #ifdef FEAT_MBYTE - vimconv_T vc; - -! /* Help files are in utf-8 or latin1, convert lines when 'encoding' -! * differs. */ - vc.vc_type = CONV_NONE; - if (!enc_utf8) - convert_setup(&vc, (char_u *)"utf-8", p_enc); - #endif - - -! /* Go through all the directories in 'runtimepath' */ - p = p_rtp; - while (*p != NUL && !got_int) - { ---- 6936,6950 ---- - #ifdef FEAT_MBYTE - vimconv_T vc; - -! // Help files are in utf-8 or latin1, convert lines when 'encoding' -! // differs. - vc.vc_type = CONV_NONE; - if (!enc_utf8) - convert_setup(&vc, (char_u *)"utf-8", p_enc); - #endif - - -! // Go through all the directories in 'runtimepath' - p = p_rtp; - while (*p != NUL && !got_int) - { -*************** -*** 7124,7134 **** - apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, - curbuf->b_fname, TRUE, curbuf); - if (!new_qi && IS_LL_STACK(qi) && qf_find_buf(qi) == NULL) -! /* autocommands made "qi" invalid */ - return; - } - -! /* Jump to first match. */ - if (!qf_list_empty(qi, qi->qf_curlist)) - qf_jump(qi, 0, 0, FALSE); - else ---- 7040,7050 ---- - apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, - curbuf->b_fname, TRUE, curbuf); - if (!new_qi && IS_LL_STACK(qi) && qf_find_buf(qi) == NULL) -! // autocommands made "qi" invalid - return; - } - -! // Jump to first match. - if (!qf_list_empty(qi, qi->qf_curlist)) - qf_jump(qi, 0, 0, FALSE); - else -*** ../vim-8.1.0460/src/version.c 2018-10-07 20:14:53.091279680 +0200 ---- src/version.c 2018-10-07 20:25:44.858426041 +0200 -*************** -*** 794,795 **** ---- 794,797 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 461, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -169. You hire a housekeeper for your home page. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 /// |