comparison src/evalfunc.c @ 12477:68d7bc045dbe v8.0.1118

patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs commit https://github.com/vim/vim/commit/4033c55eca575777718c0701e26635a0cc47d907 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Sep 16 20:54:51 2017 +0200 patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs Problem: FEAT_WINDOWS adds a lot of #ifdefs while it is nearly always enabled and only adds 7% to the binary size of the tiny build. Solution: Graduate FEAT_WINDOWS.
author Christian Brabandt <cb@256bit.org>
date Sat, 16 Sep 2017 21:00:06 +0200
parents f6534b99b76f
children 3f16cf18386c
comparison
equal deleted inserted replaced
12476:2516383741e6 12477:68d7bc045dbe
1636 } 1636 }
1637 1637
1638 static void 1638 static void
1639 buf_win_common(typval_T *argvars, typval_T *rettv, int get_nr) 1639 buf_win_common(typval_T *argvars, typval_T *rettv, int get_nr)
1640 { 1640 {
1641 #ifdef FEAT_WINDOWS
1642 win_T *wp; 1641 win_T *wp;
1643 int winnr = 0; 1642 int winnr = 0;
1644 #endif
1645 buf_T *buf; 1643 buf_T *buf;
1646 1644
1647 (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ 1645 (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */
1648 ++emsg_off; 1646 ++emsg_off;
1649 buf = get_buf_tv(&argvars[0], TRUE); 1647 buf = get_buf_tv(&argvars[0], TRUE);
1650 #ifdef FEAT_WINDOWS
1651 FOR_ALL_WINDOWS(wp) 1648 FOR_ALL_WINDOWS(wp)
1652 { 1649 {
1653 ++winnr; 1650 ++winnr;
1654 if (wp->w_buffer == buf) 1651 if (wp->w_buffer == buf)
1655 break; 1652 break;
1656 } 1653 }
1657 rettv->vval.v_number = (wp != NULL ? (get_nr ? winnr : wp->w_id) : -1); 1654 rettv->vval.v_number = (wp != NULL ? (get_nr ? winnr : wp->w_id) : -1);
1658 #else
1659 rettv->vval.v_number = (curwin->w_buffer == buf
1660 ? (get_nr ? 1 : curwin->w_id) : -1);
1661 #endif
1662 --emsg_off; 1655 --emsg_off;
1663 } 1656 }
1664 1657
1665 /* 1658 /*
1666 * "bufwinid(nr)" function 1659 * "bufwinid(nr)" function
4388 { 4381 {
4389 int row = mouse_row; 4382 int row = mouse_row;
4390 int col = mouse_col; 4383 int col = mouse_col;
4391 win_T *win; 4384 win_T *win;
4392 linenr_T lnum; 4385 linenr_T lnum;
4393 # ifdef FEAT_WINDOWS
4394 win_T *wp; 4386 win_T *wp;
4395 # endif
4396 int winnr = 1; 4387 int winnr = 1;
4397 4388
4398 if (row >= 0 && col >= 0) 4389 if (row >= 0 && col >= 0)
4399 { 4390 {
4400 /* Find the window at the mouse coordinates and compute the 4391 /* Find the window at the mouse coordinates and compute the
4401 * text position. */ 4392 * text position. */
4402 win = mouse_find_win(&row, &col); 4393 win = mouse_find_win(&row, &col);
4403 if (win == NULL) 4394 if (win == NULL)
4404 return; 4395 return;
4405 (void)mouse_comp_pos(win, &row, &col, &lnum); 4396 (void)mouse_comp_pos(win, &row, &col, &lnum);
4406 # ifdef FEAT_WINDOWS
4407 for (wp = firstwin; wp != win; wp = wp->w_next) 4397 for (wp = firstwin; wp != win; wp = wp->w_next)
4408 ++winnr; 4398 ++winnr;
4409 # endif
4410 set_vim_var_nr(VV_MOUSE_WIN, winnr); 4399 set_vim_var_nr(VV_MOUSE_WIN, winnr);
4411 set_vim_var_nr(VV_MOUSE_WINID, win->w_id); 4400 set_vim_var_nr(VV_MOUSE_WINID, win->w_id);
4412 set_vim_var_nr(VV_MOUSE_LNUM, lnum); 4401 set_vim_var_nr(VV_MOUSE_LNUM, lnum);
4413 set_vim_var_nr(VV_MOUSE_COL, col + 1); 4402 set_vim_var_nr(VV_MOUSE_COL, col + 1);
4414 } 4403 }
5103 } 5092 }
5104 rettv->v_type = VAR_STRING; 5093 rettv->v_type = VAR_STRING;
5105 rettv->vval.v_string = vim_strsave(buf); 5094 rettv->vval.v_string = vim_strsave(buf);
5106 } 5095 }
5107 5096
5108 #ifdef FEAT_WINDOWS
5109 /* 5097 /*
5110 * Returns information (variables, options, etc.) about a tab page 5098 * Returns information (variables, options, etc.) about a tab page
5111 * as a dictionary. 5099 * as a dictionary.
5112 */ 5100 */
5113 static dict_T * 5101 static dict_T *
5135 /* Make a reference to tabpage variables */ 5123 /* Make a reference to tabpage variables */
5136 dict_add_dict(dict, "variables", tp->tp_vars); 5124 dict_add_dict(dict, "variables", tp->tp_vars);
5137 5125
5138 return dict; 5126 return dict;
5139 } 5127 }
5140 #endif
5141 5128
5142 /* 5129 /*
5143 * "gettabinfo()" function 5130 * "gettabinfo()" function
5144 */ 5131 */
5145 static void 5132 static void
5146 f_gettabinfo(typval_T *argvars, typval_T *rettv) 5133 f_gettabinfo(typval_T *argvars, typval_T *rettv)
5147 { 5134 {
5148 #ifdef FEAT_WINDOWS
5149 tabpage_T *tp, *tparg = NULL; 5135 tabpage_T *tp, *tparg = NULL;
5150 dict_T *d; 5136 dict_T *d;
5151 int tpnr = 0; 5137 int tpnr = 0;
5152 5138
5153 if (rettv_list_alloc(rettv) != OK) 5139 if (rettv_list_alloc(rettv) != OK)
5171 if (d != NULL) 5157 if (d != NULL)
5172 list_append_dict(rettv->vval.v_list, d); 5158 list_append_dict(rettv->vval.v_list, d);
5173 if (tparg != NULL) 5159 if (tparg != NULL)
5174 return; 5160 return;
5175 } 5161 }
5176 #endif
5177 } 5162 }
5178 5163
5179 /* 5164 /*
5180 * "gettabvar()" function 5165 * "gettabvar()" function
5181 */ 5166 */
5226 f_gettabwinvar(typval_T *argvars, typval_T *rettv) 5211 f_gettabwinvar(typval_T *argvars, typval_T *rettv)
5227 { 5212 {
5228 getwinvar(argvars, rettv, 1); 5213 getwinvar(argvars, rettv, 1);
5229 } 5214 }
5230 5215
5231 #ifdef FEAT_WINDOWS
5232 /* 5216 /*
5233 * Returns information about a window as a dictionary. 5217 * Returns information about a window as a dictionary.
5234 */ 5218 */
5235 static dict_T * 5219 static dict_T *
5236 get_win_info(win_T *wp, short tpnr, short winnr) 5220 get_win_info(win_T *wp, short tpnr, short winnr)
5260 /* Add a reference to window variables */ 5244 /* Add a reference to window variables */
5261 dict_add_dict(dict, "variables", wp->w_vars); 5245 dict_add_dict(dict, "variables", wp->w_vars);
5262 5246
5263 return dict; 5247 return dict;
5264 } 5248 }
5265 #endif
5266 5249
5267 /* 5250 /*
5268 * "getwininfo()" function 5251 * "getwininfo()" function
5269 */ 5252 */
5270 static void 5253 static void
5271 f_getwininfo(typval_T *argvars, typval_T *rettv) 5254 f_getwininfo(typval_T *argvars, typval_T *rettv)
5272 { 5255 {
5273 #ifdef FEAT_WINDOWS
5274 tabpage_T *tp; 5256 tabpage_T *tp;
5275 win_T *wp = NULL, *wparg = NULL; 5257 win_T *wp = NULL, *wparg = NULL;
5276 dict_T *d; 5258 dict_T *d;
5277 short tabnr = 0, winnr; 5259 short tabnr = 0, winnr;
5278 #endif
5279 5260
5280 if (rettv_list_alloc(rettv) != OK) 5261 if (rettv_list_alloc(rettv) != OK)
5281 return; 5262 return;
5282 5263
5283 #ifdef FEAT_WINDOWS
5284 if (argvars[0].v_type != VAR_UNKNOWN) 5264 if (argvars[0].v_type != VAR_UNKNOWN)
5285 { 5265 {
5286 wparg = win_id2wp(argvars); 5266 wparg = win_id2wp(argvars);
5287 if (wparg == NULL) 5267 if (wparg == NULL)
5288 return; 5268 return;
5306 if (wparg != NULL) 5286 if (wparg != NULL)
5307 /* found information about a specific window */ 5287 /* found information about a specific window */
5308 return; 5288 return;
5309 } 5289 }
5310 } 5290 }
5311 #endif
5312 } 5291 }
5313 5292
5314 /* 5293 /*
5315 * "win_findbuf()" function 5294 * "win_findbuf()" function
5316 */ 5295 */
5976 "user_commands", 5955 "user_commands",
5977 #endif 5956 #endif
5978 #ifdef FEAT_VIMINFO 5957 #ifdef FEAT_VIMINFO
5979 "viminfo", 5958 "viminfo",
5980 #endif 5959 #endif
5981 #ifdef FEAT_WINDOWS
5982 "vertsplit", 5960 "vertsplit",
5983 #endif
5984 #ifdef FEAT_VIRTUALEDIT 5961 #ifdef FEAT_VIRTUALEDIT
5985 "virtualedit", 5962 "virtualedit",
5986 #endif 5963 #endif
5987 "visual", 5964 "visual",
5988 #ifdef FEAT_VISUALEXTRA 5965 #ifdef FEAT_VISUALEXTRA
5995 "wildignore", 5972 "wildignore",
5996 #endif 5973 #endif
5997 #ifdef FEAT_WILDMENU 5974 #ifdef FEAT_WILDMENU
5998 "wildmenu", 5975 "wildmenu",
5999 #endif 5976 #endif
6000 #ifdef FEAT_WINDOWS
6001 "windows", 5977 "windows",
6002 #endif
6003 #ifdef FEAT_WAK 5978 #ifdef FEAT_WAK
6004 "winaltkeys", 5979 "winaltkeys",
6005 #endif 5980 #endif
6006 #ifdef FEAT_WRITEBACKUP 5981 #ifdef FEAT_WRITEBACKUP
6007 "writebackup", 5982 "writebackup",
10524 * "settabvar()" function 10499 * "settabvar()" function
10525 */ 10500 */
10526 static void 10501 static void
10527 f_settabvar(typval_T *argvars, typval_T *rettv) 10502 f_settabvar(typval_T *argvars, typval_T *rettv)
10528 { 10503 {
10529 #ifdef FEAT_WINDOWS
10530 tabpage_T *save_curtab; 10504 tabpage_T *save_curtab;
10531 tabpage_T *tp; 10505 tabpage_T *tp;
10532 #endif
10533 char_u *varname, *tabvarname; 10506 char_u *varname, *tabvarname;
10534 typval_T *varp; 10507 typval_T *varp;
10535 10508
10536 rettv->vval.v_number = 0; 10509 rettv->vval.v_number = 0;
10537 10510
10538 if (check_restricted() || check_secure()) 10511 if (check_restricted() || check_secure())
10539 return; 10512 return;
10540 10513
10541 #ifdef FEAT_WINDOWS
10542 tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL)); 10514 tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
10543 #endif
10544 varname = get_tv_string_chk(&argvars[1]); 10515 varname = get_tv_string_chk(&argvars[1]);
10545 varp = &argvars[2]; 10516 varp = &argvars[2];
10546 10517
10547 if (varname != NULL && varp != NULL 10518 if (varname != NULL && varp != NULL && tp != NULL)
10548 #ifdef FEAT_WINDOWS 10519 {
10549 && tp != NULL
10550 #endif
10551 )
10552 {
10553 #ifdef FEAT_WINDOWS
10554 save_curtab = curtab; 10520 save_curtab = curtab;
10555 goto_tabpage_tp(tp, FALSE, FALSE); 10521 goto_tabpage_tp(tp, FALSE, FALSE);
10556 #endif
10557 10522
10558 tabvarname = alloc((unsigned)STRLEN(varname) + 3); 10523 tabvarname = alloc((unsigned)STRLEN(varname) + 3);
10559 if (tabvarname != NULL) 10524 if (tabvarname != NULL)
10560 { 10525 {
10561 STRCPY(tabvarname, "t:"); 10526 STRCPY(tabvarname, "t:");
10562 STRCPY(tabvarname + 2, varname); 10527 STRCPY(tabvarname + 2, varname);
10563 set_var(tabvarname, varp, TRUE); 10528 set_var(tabvarname, varp, TRUE);
10564 vim_free(tabvarname); 10529 vim_free(tabvarname);
10565 } 10530 }
10566 10531
10567 #ifdef FEAT_WINDOWS
10568 /* Restore current tabpage */ 10532 /* Restore current tabpage */
10569 if (valid_tabpage(save_curtab)) 10533 if (valid_tabpage(save_curtab))
10570 goto_tabpage_tp(save_curtab, FALSE, FALSE); 10534 goto_tabpage_tp(save_curtab, FALSE, FALSE);
10571 #endif
10572 } 10535 }
10573 } 10536 }
10574 10537
10575 /* 10538 /*
10576 * "settabwinvar()" function 10539 * "settabwinvar()" function
12272 * "tabpagebuflist()" function 12235 * "tabpagebuflist()" function
12273 */ 12236 */
12274 static void 12237 static void
12275 f_tabpagebuflist(typval_T *argvars UNUSED, typval_T *rettv UNUSED) 12238 f_tabpagebuflist(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
12276 { 12239 {
12277 #ifdef FEAT_WINDOWS
12278 tabpage_T *tp; 12240 tabpage_T *tp;
12279 win_T *wp = NULL; 12241 win_T *wp = NULL;
12280 12242
12281 if (argvars[0].v_type == VAR_UNKNOWN) 12243 if (argvars[0].v_type == VAR_UNKNOWN)
12282 wp = firstwin; 12244 wp = firstwin;
12291 for (; wp != NULL; wp = wp->w_next) 12253 for (; wp != NULL; wp = wp->w_next)
12292 if (list_append_number(rettv->vval.v_list, 12254 if (list_append_number(rettv->vval.v_list,
12293 wp->w_buffer->b_fnum) == FAIL) 12255 wp->w_buffer->b_fnum) == FAIL)
12294 break; 12256 break;
12295 } 12257 }
12296 #endif
12297 } 12258 }
12298 12259
12299 12260
12300 /* 12261 /*
12301 * "tabpagenr()" function 12262 * "tabpagenr()" function
12302 */ 12263 */
12303 static void 12264 static void
12304 f_tabpagenr(typval_T *argvars UNUSED, typval_T *rettv) 12265 f_tabpagenr(typval_T *argvars UNUSED, typval_T *rettv)
12305 { 12266 {
12306 int nr = 1; 12267 int nr = 1;
12307 #ifdef FEAT_WINDOWS
12308 char_u *arg; 12268 char_u *arg;
12309 12269
12310 if (argvars[0].v_type != VAR_UNKNOWN) 12270 if (argvars[0].v_type != VAR_UNKNOWN)
12311 { 12271 {
12312 arg = get_tv_string_chk(&argvars[0]); 12272 arg = get_tv_string_chk(&argvars[0]);
12319 EMSG2(_(e_invexpr2), arg); 12279 EMSG2(_(e_invexpr2), arg);
12320 } 12280 }
12321 } 12281 }
12322 else 12282 else
12323 nr = tabpage_index(curtab); 12283 nr = tabpage_index(curtab);
12324 #endif
12325 rettv->vval.v_number = nr; 12284 rettv->vval.v_number = nr;
12326 } 12285 }
12327 12286
12328 12287
12329 #ifdef FEAT_WINDOWS
12330 static int get_winnr(tabpage_T *tp, typval_T *argvar); 12288 static int get_winnr(tabpage_T *tp, typval_T *argvar);
12331 12289
12332 /* 12290 /*
12333 * Common code for tabpagewinnr() and winnr(). 12291 * Common code for tabpagewinnr() and winnr().
12334 */ 12292 */
12373 } 12331 }
12374 ++nr; 12332 ++nr;
12375 } 12333 }
12376 return nr; 12334 return nr;
12377 } 12335 }
12378 #endif
12379 12336
12380 /* 12337 /*
12381 * "tabpagewinnr()" function 12338 * "tabpagewinnr()" function
12382 */ 12339 */
12383 static void 12340 static void
12384 f_tabpagewinnr(typval_T *argvars UNUSED, typval_T *rettv) 12341 f_tabpagewinnr(typval_T *argvars UNUSED, typval_T *rettv)
12385 { 12342 {
12386 int nr = 1; 12343 int nr = 1;
12387 #ifdef FEAT_WINDOWS
12388 tabpage_T *tp; 12344 tabpage_T *tp;
12389 12345
12390 tp = find_tabpage((int)get_tv_number(&argvars[0])); 12346 tp = find_tabpage((int)get_tv_number(&argvars[0]));
12391 if (tp == NULL) 12347 if (tp == NULL)
12392 nr = 0; 12348 nr = 0;
12393 else 12349 else
12394 nr = get_winnr(tp, &argvars[1]); 12350 nr = get_winnr(tp, &argvars[1]);
12395 #endif
12396 rettv->vval.v_number = nr; 12351 rettv->vval.v_number = nr;
12397 } 12352 }
12398 12353
12399 12354
12400 /* 12355 /*
13209 static void 13164 static void
13210 f_winnr(typval_T *argvars UNUSED, typval_T *rettv) 13165 f_winnr(typval_T *argvars UNUSED, typval_T *rettv)
13211 { 13166 {
13212 int nr = 1; 13167 int nr = 1;
13213 13168
13214 #ifdef FEAT_WINDOWS
13215 nr = get_winnr(curtab, &argvars[0]); 13169 nr = get_winnr(curtab, &argvars[0]);
13216 #endif
13217 rettv->vval.v_number = nr; 13170 rettv->vval.v_number = nr;
13218 } 13171 }
13219 13172
13220 /* 13173 /*
13221 * "winrestcmd()" function 13174 * "winrestcmd()" function
13222 */ 13175 */
13223 static void 13176 static void
13224 f_winrestcmd(typval_T *argvars UNUSED, typval_T *rettv) 13177 f_winrestcmd(typval_T *argvars UNUSED, typval_T *rettv)
13225 { 13178 {
13226 #ifdef FEAT_WINDOWS
13227 win_T *wp; 13179 win_T *wp;
13228 int winnr = 1; 13180 int winnr = 1;
13229 garray_T ga; 13181 garray_T ga;
13230 char_u buf[50]; 13182 char_u buf[50];
13231 13183
13239 ++winnr; 13191 ++winnr;
13240 } 13192 }
13241 ga_append(&ga, NUL); 13193 ga_append(&ga, NUL);
13242 13194
13243 rettv->vval.v_string = ga.ga_data; 13195 rettv->vval.v_string = ga.ga_data;
13244 #else
13245 rettv->vval.v_string = NULL;
13246 #endif
13247 rettv->v_type = VAR_STRING; 13196 rettv->v_type = VAR_STRING;
13248 } 13197 }
13249 13198
13250 /* 13199 /*
13251 * "winrestview()" function 13200 * "winrestview()" function
13285 if (dict_find(dict, (char_u *)"skipcol", -1) != NULL) 13234 if (dict_find(dict, (char_u *)"skipcol", -1) != NULL)
13286 curwin->w_skipcol = (colnr_T)get_dict_number(dict, (char_u *)"skipcol"); 13235 curwin->w_skipcol = (colnr_T)get_dict_number(dict, (char_u *)"skipcol");
13287 13236
13288 check_cursor(); 13237 check_cursor();
13289 win_new_height(curwin, curwin->w_height); 13238 win_new_height(curwin, curwin->w_height);
13290 # ifdef FEAT_WINDOWS
13291 win_new_width(curwin, W_WIDTH(curwin)); 13239 win_new_width(curwin, W_WIDTH(curwin));
13292 # endif
13293 changed_window_setting(); 13240 changed_window_setting();
13294 13241
13295 if (curwin->w_topline <= 0) 13242 if (curwin->w_topline <= 0)
13296 curwin->w_topline = 1; 13243 curwin->w_topline = 1;
13297 if (curwin->w_topline > curbuf->b_ml.ml_line_count) 13244 if (curwin->w_topline > curbuf->b_ml.ml_line_count)
13340 13287
13341 wp = find_win_by_nr(&argvars[0], NULL); 13288 wp = find_win_by_nr(&argvars[0], NULL);
13342 if (wp == NULL) 13289 if (wp == NULL)
13343 rettv->vval.v_number = -1; 13290 rettv->vval.v_number = -1;
13344 else 13291 else
13345 #ifdef FEAT_WINDOWS
13346 rettv->vval.v_number = wp->w_width; 13292 rettv->vval.v_number = wp->w_width;
13347 #else
13348 rettv->vval.v_number = Columns;
13349 #endif
13350 } 13293 }
13351 13294
13352 /* 13295 /*
13353 * "wordcount()" function 13296 * "wordcount()" function
13354 */ 13297 */