summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-07-22 23:03:57 +0200
committerBram Moolenaar <Bram@vim.org>2019-07-22 23:03:57 +0200
commit29b7d7a9aac591f920edb89241c8cde27378e50b (patch)
tree96368a556edd943bec67f303778bc0c864573860 /src/window.c
parente5e6950193ddf365c6c507ddefcd7f9db939e5ac (diff)
downloadvim-git-29b7d7a9aac591f920edb89241c8cde27378e50b.tar.gz
patch 8.1.1734: the evalfunc.c file is too bigv8.1.1734
Problem: The evalfunc.c file is too big. Solution: Move some functions to other files.
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c300
1 files changed, 5 insertions, 295 deletions
diff --git a/src/window.c b/src/window.c
index b40aae6b2..8466c4694 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4589,7 +4589,11 @@ win_enter_ext(
redraw_later(VALID); /* causes status line redraw */
/* set window height to desired minimal value */
- if (curwin->w_height < p_wh && !curwin->w_p_wfh)
+ if (curwin->w_height < p_wh && !curwin->w_p_wfh
+#ifdef FEAT_TEXT_PROP
+ && !popup_is_popup(curwin)
+#endif
+ )
win_setheight((int)p_wh);
else if (curwin->w_height == 0)
win_setheight(1);
@@ -6669,300 +6673,6 @@ win_hasvertsplit(void)
}
#endif
-#if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
-/*
- * Add match to the match list of window 'wp'. The pattern 'pat' will be
- * highlighted with the group 'grp' with priority 'prio'.
- * Optionally, a desired ID 'id' can be specified (greater than or equal to 1).
- * If no particular ID is desired, -1 must be specified for 'id'.
- * Return ID of added match, -1 on failure.
- */
- int
-match_add(
- win_T *wp,
- char_u *grp,
- char_u *pat,
- int prio,
- int id,
- list_T *pos_list,
- char_u *conceal_char UNUSED) /* pointer to conceal replacement char */
-{
- matchitem_T *cur;
- matchitem_T *prev;
- matchitem_T *m;
- int hlg_id;
- regprog_T *regprog = NULL;
- int rtype = SOME_VALID;
-
- if (*grp == NUL || (pat != NULL && *pat == NUL))
- return -1;
- if (id < -1 || id == 0)
- {
- semsg(_("E799: Invalid ID: %d (must be greater than or equal to 1)"), id);
- return -1;
- }
- if (id != -1)
- {
- cur = wp->w_match_head;
- while (cur != NULL)
- {
- if (cur->id == id)
- {
- semsg(_("E801: ID already taken: %d"), id);
- return -1;
- }
- cur = cur->next;
- }
- }
- if ((hlg_id = syn_namen2id(grp, (int)STRLEN(grp))) == 0)
- {
- semsg(_(e_nogroup), grp);
- return -1;
- }
- if (pat != NULL && (regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
- {
- semsg(_(e_invarg2), pat);
- return -1;
- }
-
- /* Find available match ID. */
- while (id == -1)
- {
- cur = wp->w_match_head;
- while (cur != NULL && cur->id != wp->w_next_match_id)
- cur = cur->next;
- if (cur == NULL)
- id = wp->w_next_match_id;
- wp->w_next_match_id++;
- }
-
- /* Build new match. */
- m = ALLOC_CLEAR_ONE(matchitem_T);
- m->id = id;
- m->priority = prio;
- m->pattern = pat == NULL ? NULL : vim_strsave(pat);
- m->hlg_id = hlg_id;
- m->match.regprog = regprog;
- m->match.rmm_ic = FALSE;
- m->match.rmm_maxcol = 0;
-# if defined(FEAT_CONCEAL)
- m->conceal_char = 0;
- if (conceal_char != NULL)
- m->conceal_char = (*mb_ptr2char)(conceal_char);
-# endif
-
- /* Set up position matches */
- if (pos_list != NULL)
- {
- linenr_T toplnum = 0;
- linenr_T botlnum = 0;
- listitem_T *li;
- int i;
-
- for (i = 0, li = pos_list->lv_first; li != NULL && i < MAXPOSMATCH;
- i++, li = li->li_next)
- {
- linenr_T lnum = 0;
- colnr_T col = 0;
- int len = 1;
- list_T *subl;
- listitem_T *subli;
- int error = FALSE;
-
- if (li->li_tv.v_type == VAR_LIST)
- {
- subl = li->li_tv.vval.v_list;
- if (subl == NULL)
- goto fail;
- subli = subl->lv_first;
- if (subli == NULL)
- goto fail;
- lnum = tv_get_number_chk(&subli->li_tv, &error);
- if (error == TRUE)
- goto fail;
- if (lnum == 0)
- {
- --i;
- continue;
- }
- m->pos.pos[i].lnum = lnum;
- subli = subli->li_next;
- if (subli != NULL)
- {
- col = tv_get_number_chk(&subli->li_tv, &error);
- if (error == TRUE)
- goto fail;
- subli = subli->li_next;
- if (subli != NULL)
- {
- len = tv_get_number_chk(&subli->li_tv, &error);
- if (error == TRUE)
- goto fail;
- }
- }
- m->pos.pos[i].col = col;
- m->pos.pos[i].len = len;
- }
- else if (li->li_tv.v_type == VAR_NUMBER)
- {
- if (li->li_tv.vval.v_number == 0)
- {
- --i;
- continue;
- }
- m->pos.pos[i].lnum = li->li_tv.vval.v_number;
- m->pos.pos[i].col = 0;
- m->pos.pos[i].len = 0;
- }
- else
- {
- emsg(_("List or number required"));
- goto fail;
- }
- if (toplnum == 0 || lnum < toplnum)
- toplnum = lnum;
- if (botlnum == 0 || lnum >= botlnum)
- botlnum = lnum + 1;
- }
-
- /* Calculate top and bottom lines for redrawing area */
- if (toplnum != 0)
- {
- if (wp->w_buffer->b_mod_set)
- {
- if (wp->w_buffer->b_mod_top > toplnum)
- wp->w_buffer->b_mod_top = toplnum;
- if (wp->w_buffer->b_mod_bot < botlnum)
- wp->w_buffer->b_mod_bot = botlnum;
- }
- else
- {
- wp->w_buffer->b_mod_set = TRUE;
- wp->w_buffer->b_mod_top = toplnum;
- wp->w_buffer->b_mod_bot = botlnum;
- wp->w_buffer->b_mod_xlines = 0;
- }
- m->pos.toplnum = toplnum;
- m->pos.botlnum = botlnum;
- rtype = VALID;
- }
- }
-
- /* Insert new match. The match list is in ascending order with regard to
- * the match priorities. */
- cur = wp->w_match_head;
- prev = cur;
- while (cur != NULL && prio >= cur->priority)
- {
- prev = cur;
- cur = cur->next;
- }
- if (cur == prev)
- wp->w_match_head = m;
- else
- prev->next = m;
- m->next = cur;
-
- redraw_later(rtype);
- return id;
-
-fail:
- vim_free(m);
- return -1;
-}
-
-/*
- * Delete match with ID 'id' in the match list of window 'wp'.
- * Print error messages if 'perr' is TRUE.
- */
- int
-match_delete(win_T *wp, int id, int perr)
-{
- matchitem_T *cur = wp->w_match_head;
- matchitem_T *prev = cur;
- int rtype = SOME_VALID;
-
- if (id < 1)
- {
- if (perr == TRUE)
- semsg(_("E802: Invalid ID: %d (must be greater than or equal to 1)"),
- id);
- return -1;
- }
- while (cur != NULL && cur->id != id)
- {
- prev = cur;
- cur = cur->next;
- }
- if (cur == NULL)
- {
- if (perr == TRUE)
- semsg(_("E803: ID not found: %d"), id);
- return -1;
- }
- if (cur == prev)
- wp->w_match_head = cur->next;
- else
- prev->next = cur->next;
- vim_regfree(cur->match.regprog);
- vim_free(cur->pattern);
- if (cur->pos.toplnum != 0)
- {
- if (wp->w_buffer->b_mod_set)
- {
- if (wp->w_buffer->b_mod_top > cur->pos.toplnum)
- wp->w_buffer->b_mod_top = cur->pos.toplnum;
- if (wp->w_buffer->b_mod_bot < cur->pos.botlnum)
- wp->w_buffer->b_mod_bot = cur->pos.botlnum;
- }
- else
- {
- wp->w_buffer->b_mod_set = TRUE;
- wp->w_buffer->b_mod_top = cur->pos.toplnum;
- wp->w_buffer->b_mod_bot = cur->pos.botlnum;
- wp->w_buffer->b_mod_xlines = 0;
- }
- rtype = VALID;
- }
- vim_free(cur);
- redraw_later(rtype);
- return 0;
-}
-
-/*
- * Delete all matches in the match list of window 'wp'.
- */
- void
-clear_matches(win_T *wp)
-{
- matchitem_T *m;
-
- while (wp->w_match_head != NULL)
- {
- m = wp->w_match_head->next;
- vim_regfree(wp->w_match_head->match.regprog);
- vim_free(wp->w_match_head->pattern);
- vim_free(wp->w_match_head);
- wp->w_match_head = m;
- }
- redraw_later(SOME_VALID);
-}
-
-/*
- * Get match from ID 'id' in window 'wp'.
- * Return NULL if match not found.
- */
- matchitem_T *
-get_match(win_T *wp, int id)
-{
- matchitem_T *cur = wp->w_match_head;
-
- while (cur != NULL && cur->id != id)
- cur = cur->next;
- return cur;
-}
-#endif
-
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
int
get_win_number(win_T *wp, win_T *first_win)