Mercurial > vim
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 */ |