To: vim_dev@googlegroups.com Subject: Patch 7.4.1558 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.1558 Problem: It is not easy to find out what windows display a buffer. Solution: Add win_findbuf(). Files: src/eval.c, src/window.c, src/proto/window.pro, src/testdir/test_window_id.vim, runtime/doc/eval.txt *** ../vim-7.4.1557/src/eval.c 2016-03-13 18:06:59.528803729 +0100 --- src/eval.c 2016-03-13 18:35:15.843427789 +0100 *************** *** 807,812 **** --- 807,813 ---- static void f_virtcol(typval_T *argvars, typval_T *rettv); static void f_visualmode(typval_T *argvars, typval_T *rettv); static void f_wildmenumode(typval_T *argvars, typval_T *rettv); + static void f_win_findbuf(typval_T *argvars, typval_T *rettv); static void f_win_getid(typval_T *argvars, typval_T *rettv); static void f_win_gotoid(typval_T *argvars, typval_T *rettv); static void f_win_id2tabwin(typval_T *argvars, typval_T *rettv); *************** *** 8388,8393 **** --- 8389,8395 ---- {"virtcol", 1, 1, f_virtcol}, {"visualmode", 0, 1, f_visualmode}, {"wildmenumode", 0, 0, f_wildmenumode}, + {"win_findbuf", 1, 1, f_win_findbuf}, {"win_getid", 0, 2, f_win_getid}, {"win_gotoid", 1, 1, f_win_gotoid}, {"win_id2tabwin", 1, 1, f_win_id2tabwin}, *************** *** 12669,12674 **** --- 12671,12686 ---- } /* + * "win_findbuf()" function + */ + static void + f_win_findbuf(typval_T *argvars, typval_T *rettv) + { + if (rettv_list_alloc(rettv) != FAIL) + win_findbuf(argvars, rettv->vval.v_list); + } + + /* * "win_getid()" function */ static void *** ../vim-7.4.1557/src/window.c 2016-03-13 18:06:59.524803771 +0100 --- src/window.c 2016-03-13 18:43:57.906073860 +0100 *************** *** 7297,7300 **** --- 7297,7315 ---- } return 0; } + + void + win_findbuf(typval_T *argvars, list_T *list) + { + win_T *wp; + tabpage_T *tp; + int bufnr = get_tv_number(&argvars[0]); + + for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) + for (wp = tp == curtab ? firstwin : tp->tp_firstwin; + wp != NULL; wp = wp->w_next) + if (wp->w_buffer->b_fnum == bufnr) + list_append_number(list, wp->w_id); + } + #endif *** ../vim-7.4.1557/src/proto/window.pro 2016-03-13 18:06:59.528803729 +0100 --- src/proto/window.pro 2016-03-13 18:38:41.877315186 +0100 *************** *** 87,90 **** --- 87,91 ---- int win_gotoid(typval_T *argvars); void win_id2tabwin(typval_T *argvars, list_T *list); int win_id2win(typval_T *argvars); + void win_findbuf(typval_T *argvars, list_T *list); /* vim: set ft=c : */ *** ../vim-7.4.1557/src/testdir/test_window_id.vim 2016-03-13 18:06:59.528803729 +0100 --- src/testdir/test_window_id.vim 2016-03-13 18:48:12.851458310 +0100 *************** *** 5,10 **** --- 5,11 ---- let id1 = win_getid() split two let id2 = win_getid() + let bufnr2 = bufnr('%') split three let id3 = win_getid() tabnew *************** *** 12,17 **** --- 13,19 ---- let id4 = win_getid() split five let id5 = win_getid() + let bufnr5 = bufnr('%') tabnext wincmd w *************** *** 67,71 **** --- 69,79 ---- call assert_equal([1, nr2], win_id2tabwin(id2)) call assert_equal([2, nr4], win_id2tabwin(id4)) + call assert_equal([], win_findbuf(9999)) + call assert_equal([id2], win_findbuf(bufnr2)) + call win_gotoid(id5) + split + call assert_equal(sort([id5, win_getid()]), sort(win_findbuf(bufnr5))) + only! endfunc *** ../vim-7.4.1557/runtime/doc/eval.txt 2016-03-13 18:06:59.532803689 +0100 --- runtime/doc/eval.txt 2016-03-13 18:34:02.124183568 +0100 *************** *** 2133,2138 **** --- 2149,2155 ---- virtcol( {expr}) Number screen column of cursor or mark visualmode( [expr]) String last visual mode used wildmenumode() Number whether 'wildmenu' mode is active + win_findbuf( {bufnr}) List find windows containing {bufnr} win_getid( [{win} [, {tab}]]) Number get window ID for {win} in {tab} win_gotoid( {expr}) Number go to window with ID {expr} win_id2tabwin( {expr}) List get tab and window nr from window ID *************** *** 7076,7081 **** --- 7177,7186 ---- (Note, this needs the 'wildcharm' option set appropriately). + win_findbuf({bufnr}) *win_findbuf()* + Returns a list with window IDs for windows that contain buffer + {bufnr}. When there is none the list is empty. + win_getid([{win} [, {tab}]]) *win_getid()* Get the window ID for the specified window. When {win} is missing use the current window. *** ../vim-7.4.1557/src/version.c 2016-03-13 18:06:59.532803689 +0100 --- src/version.c 2016-03-13 18:36:20.314766771 +0100 *************** *** 745,746 **** --- 745,748 ---- { /* Add new patch number below this line */ + /**/ + 1558, /**/ -- hundred-and-one symptoms of being an internet addict: 36. You miss more than five meals a week downloading the latest games from Apogee. /// 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 ///