On 08/17/2016 12:00 AM, Yegappan Lakshmanan wrote: > I am in particular interested in any comments/suggestions about the following > new functions: > > getbufinfo() > gettabinfo() > getwininfo() > getqflist() > setqflist() > getcompletion()
I've got some custom functions in my .vimrc related to QuickFix and Location List windows. They are clunky and inefficient because as far as I can tell, Vim doesn't expose quite enough information. I've included the functions below for reference. I haven't been able to track all of the new developments, but perhaps someone can say whether there is a better way than the below functions (either with pre-existing or recently added Vim functionality). I'd like functions that: - Return True if a given window is a QuickFix or Location List window. (Both types of window have &buftype == "quickfix".) - Return True if the QuickFix is window open. - Return True if the Location List window is open for a given window. - Return the window number of the QuickFix window (0 if not open). - Return the window number of the associated Location List for a given window (0 if not open). When the current window has ``&buftype == "quickfix"``, I'd originally tried to determine whether it was a QuickFix window or a Location List using ``getloclist(0)``. I'd wanted to say ``isLocationList = (getloclist(0) > 0)``, but that fails when it's a Location List that happens to be empty, so I resorted to the uglier hacks you see below. I thought I'd seen some activity along these lines that might expose the details directly, but I haven't been keeping up with all of the new changes. Michael Henry Sample functions for reference ================================================================ " Return 1 if current window is the QuickFix window. function! IsQuickFixWin() if &buftype == "quickfix" " This is either a QuickFix window or a Location List window. " Try to open a location list; if this window *is* a location list, " then this will succeed and the focus will stay on this window. " If this is a QuickFix window, there will be an exception and the " focus will stay on this window. try noautocmd lopen catch /E776:/ " This was a QuickFix window. return 1 endtry endif return 0 endfunction " Return 1 if current window is a Location List window. function! IsLocListWin() return (&buftype == "quickfix" && !IsQuickFixWin()) endfunction " Return window number of QuickFix buffer (or zero if not found). function! GetQuickFixWinNum() let qfWinNum = 0 let curWinNum = winnr() for winNum in range(1, winnr("$")) execute "noautocmd " . winNum . "wincmd w" if IsQuickFixWin() let qfWinNum = winNum break endif endfor execute "noautocmd " . curWinNum . "wincmd w" return qfWinNum endfunction " Return 1 if the QuickFix window is open. function! QuickFixWinIsOpen() return GetQuickFixWinNum() > 0 endfunction " Return 1 if current window's location list window is open. function! LocListWinIsOpen() let curWinNum = winnr() let numOpenWindows = winnr("$") " Assume location list window is already open. let isOpen = 1 try noautocmd lopen catch /E776:/ " No location list available; nothing was changed. let isOpen = 0 endtry if numOpenWindows != winnr("$") " We just opened a new location list window. Revert to original " window and close the newly opened window. noautocmd wincmd p noautocmd lclose let isOpen = 0 endif return isOpen endfunction " Open Quickfix window (if not already open). function! Copen() if !QuickFixWinIsOpen() execute "silent botright copen " . g:QuickFixWinHeight endif endfunction " Open QuickFix window using standard position and height. command! -bar Copen call Copen() " Open Location List window (if not already open). function! Lopen() if !LocListWinIsOpen() execute "silent lopen " . g:LocListWinHeight endif endfunction " Open Location List window using standard height. command! -bar Lopen call Lopen() -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.