1function! GetCwdInfo(win, tab) 2 let tab_changed = 0 3 let mod = ":t" 4 if a:tab > 0 && a:tab != tabpagenr() 5 let tab_changed = 1 6 exec "tabnext " . a:tab 7 endif 8 let bufname = fnamemodify(bufname(winbufnr(a:win)), mod) 9 if tab_changed 10 tabprevious 11 endif 12 if a:win == 0 && a:tab == 0 13 let dirname = fnamemodify(getcwd(), mod) 14 let lflag = haslocaldir() 15 elseif a:tab == 0 16 let dirname = fnamemodify(getcwd(a:win), mod) 17 let lflag = haslocaldir(a:win) 18 else 19 let dirname = fnamemodify(getcwd(a:win, a:tab), mod) 20 let lflag = haslocaldir(a:win, a:tab) 21 endif 22 return bufname . ' ' . dirname . ' ' . lflag 23endfunction 24 25" Do all test in a separate window to avoid E211 when we recursively 26" delete the Xtopdir directory during cleanup 27function SetUp() 28 set visualbell 29 set nocp viminfo+=nviminfo 30 31 " On windows a swapfile in Xtopdir prevents it from being cleaned up. 32 set noswapfile 33 34 " On windows a stale "Xtopdir" directory may exist, remove it so that 35 " we start from a clean state. 36 call delete("Xtopdir", "rf") 37 new 38 call mkdir('Xtopdir') 39 cd Xtopdir 40 call mkdir('Xdir1') 41 call mkdir('Xdir2') 42 call mkdir('Xdir3') 43endfunction 44 45let g:cwd=getcwd() 46function TearDown() 47 q 48 exec "cd " . g:cwd 49 call delete("Xtopdir", "rf") 50endfunction 51 52function Test_GetCwd() 53 new a 54 new b 55 new c 56 3wincmd w 57 lcd Xdir1 58 call assert_equal("a Xdir1 1", GetCwdInfo(0, 0)) 59 wincmd W 60 call assert_equal("b Xtopdir 0", GetCwdInfo(0, 0)) 61 wincmd W 62 lcd Xdir3 63 call assert_equal("c Xdir3 1", GetCwdInfo(0, 0)) 64 call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), 0)) 65 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), 0)) 66 call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), 0)) 67 wincmd W 68 call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), tabpagenr())) 69 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), tabpagenr())) 70 call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), tabpagenr())) 71 72 tabnew x 73 new y 74 new z 75 3wincmd w 76 call assert_equal("x Xtopdir 0", GetCwdInfo(0, 0)) 77 wincmd W 78 lcd Xdir2 79 call assert_equal("y Xdir2 1", GetCwdInfo(0, 0)) 80 wincmd W 81 lcd Xdir3 82 call assert_equal("z Xdir3 1", GetCwdInfo(0, 0)) 83 call assert_equal("x Xtopdir 0", GetCwdInfo(bufwinnr("x"), 0)) 84 call assert_equal("y Xdir2 1", GetCwdInfo(bufwinnr("y"), 0)) 85 call assert_equal("z Xdir3 1", GetCwdInfo(bufwinnr("z"), 0)) 86 let tp_nr = tabpagenr() 87 tabrewind 88 call assert_equal("x Xtopdir 0", GetCwdInfo(3, tp_nr)) 89 call assert_equal("y Xdir2 1", GetCwdInfo(2, tp_nr)) 90 call assert_equal("z Xdir3 1", GetCwdInfo(1, tp_nr)) 91endfunc 92