diff --git a/sources_non_forked/bufexplorer/.gitignore b/sources_non_forked/bufexplorer/.gitignore deleted file mode 100644 index 42d5d592..00000000 --- a/sources_non_forked/bufexplorer/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Ignore generated tags -/doc/tags -dist.bat -*.zip -tags -*.sw[a-p] diff --git a/sources_non_forked/bufexplorer/LICENSE b/sources_non_forked/bufexplorer/LICENSE deleted file mode 100644 index 28d7bc4b..00000000 --- a/sources_non_forked/bufexplorer/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2001-2013, Jeff Lanzarotta -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/sources_non_forked/bufexplorer/README b/sources_non_forked/bufexplorer/README new file mode 100644 index 00000000..0975ab13 --- /dev/null +++ b/sources_non_forked/bufexplorer/README @@ -0,0 +1,20 @@ +This is a mirror of http://www.vim.org/scripts/script.php?script_id=42 + +With bufexplorer, you can quickly and easily switch between buffers by using the one of the default public interfaces: + + '\be' (normal open) or + '\bs' (force horizontal split open) or + '\bv' (force vertical split open) + +Once the bufexplorer window is open you can use the normal movement keys (hjkl) to move around and then use or to select the buffer you would like to open. If you would like to have the selected buffer opened in a new tab, simply press either or 't'. Please note that when opening a buffer in a tab, that if the buffer is already in another tab, bufexplorer can switch to that tab automatically for you if you would like. More about that in the supplied VIM help. + +Bufexplorer also offers various options including: +- Display the list of buffers in various sort orders including: + - Most Recently Used (MRU) which is the default + - Buffer number + - File name + - File extension + - Full file path name +- Delete buffer from list + +For more about options, sort orders, configuration options, etc. please see the supplied VIM help. diff --git a/sources_non_forked/bufexplorer/README.md b/sources_non_forked/bufexplorer/README.md deleted file mode 100644 index 6faed6bc..00000000 --- a/sources_non_forked/bufexplorer/README.md +++ /dev/null @@ -1,99 +0,0 @@ -bufexplorer -=========== - -BufExplorer Plugin for Vim - -With bufexplorer, you can quickly and easily switch between buffers by using the one of the default public interfaces: - -`\be` normal open - -`\bt` toggle open / close - -`\bs` force horizontal split open - -`\bv` force vertical split open - - -Once the bufexplorer window is open you can use the normal movement keys (hjkl) to move around and then use or to select the buffer you would like to open. If you would like to have the selected buffer opened in a new tab, simply press either or 't'. Please note that when opening a buffer in a tab, that if the buffer is already in another tab, bufexplorer can switch to that tab automatically for you if you would like. More about that in the supplied VIM help. - -Bufexplorer also offers various options including: -- Display the list of buffers in various sort orders including: - - Most Recently Used (MRU) which is the default - - Buffer number - - File name - - File extension - - Full file path name -- Delete buffer from list - -For more about options, sort orders, configuration options, etc. please see the supplied VIM help. - -## vim.org -This plugin can also be found at http://www.vim.org/scripts/script.php?script_id=42. - -## Installation -### Manually -1. If you do not want to use one of the the bundle handlers, you can take the - zip file from vim.org and unzip it and copy the plugin to your vimfiles\plugin - directory and the txt file to your vimfiles\doc directory. If you do that, - make sure you generate the help by executing - - `:helptag /doc` - - Once help tags have been generated, you can view the manual with - `:help bufexplorer`. - -### Vundle (https://github.com/gmarik/Vundle.vim) -1. Add the following configuration to your `.vimrc`. - - Plugin 'jlanzarotta/bufexplorer' - -2. Install with `:BundleInstall`. - -### NeoBundle (https://github.com/Shougo/neobundle.vim) -1. Add the following configuration to your `.vimrc`. - - NeoBundle 'jlanzarotta/bufexplorer' - -2. Install with `:NeoBundleInstall`. - -### Plug (https://github.com/junegunn/vim-plug) -1. Add the following configuration to your `.vimrc`. - - Plug 'jlanzarotta/bufexplorer' - -2. Install with `:PlugInstall`. - -### Pathogen -1. Install with the following command. - - git clone https://github.com/jlanzarotta/bufexplorer.git ~/.vim/bundle/bufexplorer.vim - -## License -Copyright (c) 2001-2021, Jeff Lanzarotta - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/sources_non_forked/bufexplorer/doc/bufexplorer.txt b/sources_non_forked/bufexplorer/doc/bufexplorer.txt index fd52fb58..dc610942 100644 --- a/sources_non_forked/bufexplorer/doc/bufexplorer.txt +++ b/sources_non_forked/bufexplorer/doc/bufexplorer.txt @@ -1,7 +1,7 @@ -*bufexplorer.txt* Buffer Explorer Last Change: 08 Dec 2018 +*bufexplorer.txt* Buffer Explorer Last Change: 03 Nov 2014 Buffer Explorer *buffer-explorer* *bufexplorer* - Version 7.4.21 + Version 7.4.6 Plugin for easily exploring (or browsing) Vim|:buffers|. @@ -41,24 +41,22 @@ To install: USAGE *bufexplorer-usage* To start exploring in the current window, use: > - be or :BufExplorer or Your custom key mapping -To toggle bufexplorer on or off in the current window, use: > - bt or :ToggleBufExplorer or Your custom key mapping + \be or :BufExplorer or Your custom key mapping To start exploring in a newly split horizontal window, use: > - bs or :BufExplorerHorizontalSplit or Your custom key mapping + \bs or :BufExplorerHorizontalSplit or Your custom key mapping To start exploring in a newly split vertical window, use: > - bv or :BufExplorerVerticalSplit or Your custom key mapping + \bv or :BufExplorerVerticalSplit or Your custom key mapping -If you would like to use something other than the default leader key - '\' - -you may simply change the leader (see |mapleader|). +If you would like to use something other than '\', you may simply change the +leader (see |mapleader|). -When bs or bv is issued, bufexplorer opens in either a -horizontally or vertically split window. By issuing either of these commands, -the user is telling bufexplorer that they want to split the window and have -bufexplorer show the buffer they are about to select (from the bufexplorer -windows) in the newly split window. When be is issued, bufexplorer -opens the bufexplorer contents in the current window and the buffer the user -selects is opened in the current window. +When \bs or \bv is issued, bufexplorer opens in either a horizonally or +vertically split window. By issusing either of these commands, the user is +telling bufexplorer that they want to split the window and have bufexplorer +show the buffer they are about to select (from the bufexplorer windows) in the +newly split window. When \be is issued, bufexplorer opens the bufexplorer +contents in the current window and the buffer the user selects is opened in +the current window. Note: If the current buffer is modified when bufexplorer started, the current window is always split and the new bufexplorer is displayed in that new @@ -72,20 +70,18 @@ Commands to use once exploring: Opens the buffer that is under the cursor into the current window. Opens the buffer that is under the cursor in another tab. - a Toggles whether you are taken to the active window when - selecting a buffer or not. b Fast buffer switching with b. - B Works in association with the |ShowTabBuffer| option. If - |ShowTabBuffer| is set to 1, this toggles if BufExplorer is to + B Works in association with the|ShowTabBuffer|option. If + |ShowTabBuffer|is set to 1, this toggles if BufExplorer is to only store the most recent tab for this buffer or not. - d |:delete| the buffer under the cursor from the list. The + d |:delete|the buffer under the cursor from the list. The buffer's 'buflisted' is cleared. This allows for the buffer to be displayed again using the 'show unlisted' command. - D |:wipeout| the buffer under the cursor from the list. When a - buffer is wiped, it will not be shown when unlisted buffers are + D |:wipeout|the buffer under the cursor from the list. When a + buffers is wiped, it will not be shown when unlisted buffer are displayed. - F Open selected buffer in another window above the current. - f Open selected buffer in another window below the current. + f Toggles whether you are taken to the active window when + selecting a buffer or not. o Opens the buffer that is under the cursor into the current window. p Toggles the showing of a split filename/pathname. @@ -101,14 +97,12 @@ Commands to use once exploring: t Opens the buffer that is under the cursor in another tab. T Toggles to show only buffers for this tab or not. u Toggles the showing of "unlisted" buffers. - V Open the selected buffer in another window on the left of the current. - v Open the selected buffer in another window on the right of the current. Once invoked, Buffer Explorer displays a sorted list (MRU is the default sort method) of all the buffers that are currently opened. You are then able to move the cursor to the line containing the buffer's name you are wanting to act upon. Once you have selected the buffer you would like, -you can then either open it, close it (delete), resort the list, reverse +you can then either open it, close it(delete), resort the list, reverse the sort, quit exploring and so on... =============================================================================== @@ -125,18 +119,17 @@ WINDOW LAYOUT *bufexplorer-windowlayout* | | | | +-- Current Line #. | | | +-- Relative/Full Path | | +-- Buffer Name. - | +-- Buffer Attributes. See |:buffers| for more information. - +-- Buffer Number. See |:buffers| for more information. + | +-- Buffer Attributes. See|:buffers|for more information. + +-- Buffer Number. See|:buffers|for more information. =============================================================================== CUSTOMIZATION *bufexplorer-customization* -If you do not like the default key mappings of be, bs, and -bv, you can override bufexplorer's default mappings by setting up -something like the following in your vimrc file: +If you do not like the default key mappings of \be, \bs, and \bv, you can +override bufexplorer's default mappings by setting up something like the +following in your vimrc file: nnoremap :BufExplorer - nnoremap :ToggleBufExplorer nnoremap :BufExplorerHorizontalSplit nnoremap :BufExplorerVerticalSplit @@ -200,13 +193,13 @@ directory, use: > The default is to show absolute paths. *g:bufExplorerShowTabBuffer* -To control whether or not to show buffers on for the specific tab or not, use: > +To control weither or not to show buffers on for the specific tab or not, use: > let g:bufExplorerShowTabBuffer=0 " No. let g:bufExplorerShowTabBuffer=1 " Yes. The default is not to show. *g:bufExplorerShowUnlisted* -To control whether to show unlisted buffers or not, use: > +To control whether to show unlisted buffer or not, use: > let g:bufExplorerShowUnlisted=0 " Do not show unlisted buffers. let g:bufExplorerShowUnlisted=1 " Show unlisted buffers. The default is to NOT show unlisted buffers. @@ -249,79 +242,14 @@ current window, use: > The default is to use the global &splitright. *g:bufExplorerSplitVertSize* -To control the size of the new vertical split window, use: > - let g:bufExplorerSplitVertSize=n " New split window is n columns wide. - let g:bufExplorerSplitVertSize=0 " New split windows size set by Vim. +To control the size of the new vertical split window. use: > + let g:bufExplorerVertSize=n " New split window is n columns wide. + let g:bufExplorerVertSize=0 " New split windows size set by Vim. The default is 0, so that the size is set by Vim. - *g:bufExplorerVersionWarn* -To control whether to warning about Vim version or not, use: > - let g:bufExplorerVersionWarn=1 " Warn if version conflict. - let g:bufExplorerVersionWarn=0 " Do not warn if version conflict. -The default is 1. - =============================================================================== CHANGE LOG *bufexplorer-changelog* -7.4.21 December 8, 2018 - - Merged in changes from adelarsq that introduced ryanoasis/vim-devicons - support. If the global g:loaded_webdevicons has been set, bufexplorer - will now load the associated dev icons for each buffer. -7.4.20 January 18, 2017 - - Thanks to jpflouret for supplying code that can remove the warning - messages if you using this plugin on an older version of Vim. The - global variable is g:bufExplorerVersionWarn. -7.4.19 September 18, 2017 - - Merged all changes from github back into this version and tried to sync - to the correct version number. -7.4.18 - Github. -7.4.17 - Github. -7.4.16 August 14, 2017 - - Thanks to Yubo Su for the patch that adds 'f, F, V, and v' commands. - With this change, the original 'f' command was remapped to 'a'. - - The set of commands that can be used during exploring are: - F - Open selected buffer in another window above the current. - f - Open selected buffer in another window below the current. - V - Open the selected buffer in another window on the left of the - current. - v - Open the selected buffer in another window on the right of the - current. -7.4.15 May 01, 2017 - - Finally applied the patch submitted by justfalter. This patch is a - backward-compatible fix for the "invalid tab range" bug. -7.4.14 April 10, 2017 - - As suggested by adelarsq way back on January 5th, 2016, a filetype has - been added. There is now 'filetype=bufexplorer'. -7.4.13 March 08, 2017 - - Thanks to devakivamsi for pointing out that even though bufexplorer - turns off line numbers by default within its own window, this did not - work correctly when using WinManager. This has now been corrected. -7.4.12 September 30, 2016 - - Thanks again to Martin Vuille for several more fixes related to making - bufexplorer more tab-friendly. -7.4.11 September, 20, 2016 - - Thanks to Martin Vuille for reworking the per-tab buffer listing code. - Fix for g:bufExplorerShowTabBuffer is not working correctly and other - "gliches" when the ShotTabBuffer option is enabled. For example old - code would not correctly handle adding/deleting a tab that wasn't the - highest-numbered tab. -7.4.10 August 26, 2016 - - Thanks to buddylindsey for fixing a misspelling in the docs. -7.4.9 April 01, 2016 - - Thanks to ivegotasthma for supplying a patch to fix a major issue with - plugin performance when lots of buffers are open. - - Thanks to ershov for the patch to fix grouping of files in ambiguous - sort modes. - - Thanks to PhilRunninger for changing documentation to use , in - place of '\'. -7.4.8 January 27, 2015 - - Thanks to Marius Gedminas for fixing up the documentation and correcting - various typos. -7.4.7 January 20, 2015 - - Thanks goes out to Phil Runninger for added the ability to toggle the - bufexplorer list on and off using the :ToggleBufExplorer command, the - map bt, and the function ToggleBufExplorer(). 7.4.6 November 03, 2014 - Not sure how, but the file format was converted to Dos instead of Unix. I converted the file back to Unix. @@ -347,7 +275,7 @@ CHANGE LOG *bufexplorer-changelog* - First update related to Vim 7.4. - Changed license text. - Fixed issue with 'hidden'. If 'hidden' is set, make sure that - g:bufExplorerFindActive is set to 0. Otherwise, when using \bs or \bv, + g:bufExplorerFindActive is set to 0. Otherwise, when using /bs or /bv, and selecting a buffer, the original buffer will be switched to instead of being opened in the newly created windows. - Added new 'b' mapping when the bufExplorer window is opened. When 'b' @@ -404,7 +332,7 @@ CHANGE LOG *bufexplorer-changelog* fixes. Overall, I am hopeful that I not forgotten or lost a feature. - Thanks to Tim Johnson for testing out this new version. - I have hopefully allowed for better mapping of the main public - methods as is explained in the |bufexplorer-customization| section + methods as is explained in the|bufexplorer-customization|section of the documentation. - Add new 'B', 'o', and 'S' key mappings. 7.2.8 November 08, 2010 @@ -575,7 +503,7 @@ CHANGE LOG *bufexplorer-changelog* - Dave Eggum has made some 'significant' updates to this latest version: * Added BufExplorerGetAltBuf() global function to be used in the - user's rulerformat. + user’s rulerformat. * Added g:bufExplorerSplitRight option. * Added g:bufExplorerShowRelativePath option with mapping. * Added current line highlighting. @@ -702,7 +630,7 @@ CHANGE LOG *bufexplorer-changelog* - Thanks to Andre Pang for the original patch/idea to get bufexplorer to work in insertmode/modeless mode (evim). - Added Initialize and Cleanup autocommands to handle commands that - need to be performed when starting or leaving bufexplorer. + need to be performed when starting or leaving bufexplorer. 6.0.15 February 20, 2002 - Srinath Avadhanulax added a patch for winmanager.vim. 6.0.14 February 19, 2002 @@ -764,7 +692,7 @@ TODO *bufexplorer-todo* =============================================================================== CREDITS *bufexplorer-credits* -Author: Jeff Lanzarotta +Author: Jeff Lanzarotta Credit must go out to Bram Moolenaar and all the Vim developers for making the world's best editor (IMHO). I also want to thank everyone who @@ -774,7 +702,7 @@ won't list names. =============================================================================== COPYRIGHT *bufexplorer-copyright* -Copyright (c) 2001-2017, Jeff Lanzarotta +Copyright (c) 2001-2014, Jeff Lanzarotta All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/sources_non_forked/bufexplorer/plugin/bufexplorer.vim b/sources_non_forked/bufexplorer/plugin/bufexplorer.vim index 6a7ef4f0..f3d9b9ca 100644 --- a/sources_non_forked/bufexplorer/plugin/bufexplorer.vim +++ b/sources_non_forked/bufexplorer/plugin/bufexplorer.vim @@ -1,5 +1,5 @@ -"============================================================================ -" Copyright: Copyright (c) 2001-2018, Jeff Lanzarotta +"============================================================================= +" Copyright: Copyright (c) 2001-2014, Jeff Lanzarotta " All rights reserved. " " Redistribution and use in source and binary forms, with or @@ -35,8 +35,8 @@ " EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. " Name Of File: bufexplorer.vim " Description: Buffer Explorer Vim Plugin -" Maintainer: Jeff Lanzarotta (delux256-vim at outlook dot com) -" Last Changed: Saturday, 08 December 2018 +" Maintainer: Jeff Lanzarotta (delux256-vim at yahoo dot com) +" Last Changed: Monday, 03 November 2014 " Version: See g:bufexplorer_version for version number. " Usage: This file should reside in the plugin directory and be " automatically sourced. @@ -44,7 +44,6 @@ " You may use the default keymappings of " " be - Opens BufExplorer -" bt - Toggles BufExplorer open or closed " bs - Opens horizontally split window BufExplorer " bv - Opens vertically split window BufExplorer " @@ -52,14 +51,12 @@ " in your vimrc file, for example: " " nnoremap :BufExplorer -" nnoremap :ToggleBufExplorer " nnoremap :BufExplorerHorizontalSplit " nnoremap :BufExplorerVerticalSplit " " Or you can use " " ":BufExplorer" - Opens BufExplorer -" ":ToggleBufExplorer" - Opens/Closes BufExplorer " ":BufExplorerHorizontalSplit" - Opens horizontally window BufExplorer " ":BufExplorerVerticalSplit" - Opens vertically split window BufExplorer " @@ -67,45 +64,26 @@ " History: See supplied documentation. "============================================================================= -" Exit quickly if already running or when 'compatible' is set. {{{1 +" Plugin Code {{{1 +" Exit quickly if already running or when 'compatible' is set. {{{2 if exists("g:bufexplorer_version") || &cp finish endif -"1}}} +"2}}} " Version number -let g:bufexplorer_version = "7.4.21" +let g:bufexplorer_version = "7.4.6" -" Plugin Code {{{1 " Check for Vim version {{{2 -if !exists("g:bufExplorerVersionWarn") - let g:bufExplorerVersionWarn = 1 -endif - if v:version < 700 - if g:bufExplorerVersionWarn - echohl WarningMsg - echo "Sorry, bufexplorer ".g:bufexplorer_version." required Vim 7.0 or greater." - echohl None - endif - finish -endif -" Check to see if the version of Vim has the correct patch applied, if not, do -" not used . -if v:version > 703 || v:version == 703 && has('patch1261') && has('patch1264') - " We are good to go. -else - if g:bufExplorerVersionWarn - echohl WarningMsg - echo "Sorry, bufexplorer ".g:bufexplorer_version." required Vim 7.3 or greater with patch1261 and patch1264." - echohl None - endif + echohl WarningMsg + echo "Sorry, bufexplorer ".g:bufexplorer_version." required Vim 7.0 and greater." + echohl None finish endif " Create commands {{{2 command! BufExplorer :call BufExplorer() -command! ToggleBufExplorer :call ToggleBufExplorer() command! BufExplorerHorizontalSplit :call BufExplorerHorizontalSplit() command! BufExplorerVerticalSplit :call BufExplorerVerticalSplit() @@ -125,13 +103,14 @@ function! s:Set(var, default) endfunction " Script variables {{{2 -let s:MRU_Exclude_List = ["[BufExplorer]","__MRU_Files__","[Buf\ List]"] +let s:MRU_Exclude_List = ["[BufExplorer]","__MRU_Files__"] let s:MRUList = [] let s:name = '[BufExplorer]' let s:originBuffer = 0 let s:running = 0 let s:sort_by = ["number", "name", "fullpath", "mru", "extension"] let s:splitMode = "" +let s:tabSpace = [] let s:types = {"fullname": ':p', "path": ':p:h', "relativename": ':~:.', "relativepath": ':~:.:h', "shortname": ':t'} " Setup the autocommands that handle the MRUList and other stuff. {{{2 @@ -149,6 +128,8 @@ function! s:Setup() autocmd BufDelete * call s:DeactivateBuffer(0) autocmd BufWinEnter \[BufExplorer\] call s:Initialize() autocmd BufWinLeave \[BufExplorer\] call s:Cleanup() + autocmd TabEnter * call s:TabEnter() + autocmd SessionLoadPost * call s:Reset() augroup END endfunction @@ -158,128 +139,82 @@ function! s:Reset() " command line are picked up correctly. let s:MRUList = range(1, bufnr('$')) - " Initialize the association of buffers to tabs for any buffers - " that have been created prior to now, e.g., files specified as - " vim command line arguments - call s:CatalogBuffers() -endfunction - -" CatalogBuffers {{{2 -" Create tab associations for any existing buffers -function! s:CatalogBuffers() - let ct = tabpagenr() - - for tab in range(1, tabpagenr('$')) - silent execute 'normal! ' . tab . 'gt' - for buf in tabpagebuflist() - call s:UpdateTabBufData(buf) - endfor - endfor - - silent execute 'normal! ' . ct . 'gt' -endfunction - -" AssociatedTab {{{2 -" Return the number of the tab associated with the specified buffer. -" If the buffer is associated with more than one tab, the first one -" found is returned. If the buffer is not associated with any tabs, -" -1 is returned. -function! s:AssociatedTab(bufnr) - for tab in range(1, tabpagenr('$')) - let list = gettabvar(tab, 'bufexp_buf_list', []) - let idx = index(list, a:bufnr) - if idx != -1 - return tab - endif - endfor - - return -1 -endfunction - -" RemoveBufFromOtherTabs {{{2 -" Remove the specified buffer from the buffer lists of all tabs -" except the current tab. -function! s:RemoveBufFromOtherTabs(bufnr) - for tab in range(1, tabpagenr('$')) - if tab == tabpagenr() - continue - endif - - let list = gettabvar(tab, 'bufexp_buf_list', []) - let idx = index(list, a:bufnr) - if idx == -1 - continue - endif - - call remove(list, idx) - call settabvar(tab, 'bufexp_buf_list', list) - endfor -endfunction - -" AddBufToCurrentTab {{{2 -" Add the specified buffer to the list of buffers associated -" with the current tab -function! s:AddBufToCurrentTab(bufnr) - if index(t:bufexp_buf_list, a:bufnr) == -1 - call add(t:bufexp_buf_list, a:bufnr) - endif -endfunction - -" IsInCurrentTab {{{2 -" Returns whether the specified buffer is associated -" with the current tab -function! s:IsInCurrentTab(bufnr) - " It shouldn't happen that the list of buffers is - " not defined but if it does, play it safe and - " include the buffer - if !exists('t:bufexp_buf_list') - return 1 - endif - - return (index(t:bufexp_buf_list, a:bufnr) != -1) -endfunction - -" UpdateTabBufData {{{2 -" Update the tab buffer data for the specified buffer -" -" The current tab's list is updated. If a buffer is only -" allowed to be associated with one tab, it is removed -" from the lists of any other tabs with which it may have -" been associated. -" -" The associations between tabs and buffers are maintained -" in separate lists for each tab, which are stored in tab- -" specific variables 't:bufexp_buf_list'. -function! s:UpdateTabBufData(bufnr) - " The first time we add a tab, Vim uses the current buffer - " as its starting page even though we are about to edit a - " new page, and another BufEnter for the new page is triggered - " later. Use this first BufEnter to initialize the list of - " buffers, but don't add the buffer number to the list if - " it is already associated with another tab + " Initialize one tab space array, ignore zero-based tabpagenr since all + " tabpagenr's start at 1. -1 signifies this is the first time we are + " referencing this tabpagenr. " - " Unfortunately, this doesn't work right when the first - " buffer opened in the tab should be associated with it, - " such as when 'tab split +buffer N' is used - if !exists("t:bufexp_buf_list") - let t:bufexp_buf_list = [] + " If Vim has been loaded with mksession, then it is possible for more tabs + " to exist. So use tabpagenr() to determine how large to make the array. If + " there are 4 tabs, there should be 5 elements in this array. + " + " Each element will hold a CSV list of buffers viewed in that tab. So on + " the 3rd tab, if there user has viewed 4 different buffers in that tab, the + " value would be: + " echo s:tabSpace[3] + " [4, 9, 1, 10] + " echo s:tabSpace + " [[-1], [-1], [-1], [4, 9, 1, 10], [-1]] + let s:tabSpace = [] + let i = 0 - if s:AssociatedTab(a:bufnr) != -1 - return - endif - endif - - call s:AddBufToCurrentTab(a:bufnr) - - if g:bufExplorerOnlyOneTab - call s:RemoveBufFromOtherTabs(a:bufnr) - endif + while(tabpagenr('$') > 0 && i <= tabpagenr('$')) + call add(s:tabSpace, [-1]) + let i = i + 1 + endwhile endfunction " ActivateBuffer {{{2 function! s:ActivateBuffer() + " Verify the current tabpage exists in the + " current s:tabSpace array. This can be missing + " entries when restoring sessions. + let i = 0 + while( tabpagenr('$') > 0 && i <= tabpagenr() ) + " Number: 0 + " String: 1 + " Funcref: 2 + " List: 3 + " Dictionary: 4 + " Float: 5 + if type(get(s:tabSpace, i)) == 0 + call add(s:tabSpace, [-1]) + endif + + let i = i + 1 + endwhile + let _bufnr = bufnr("%") - call s:UpdateTabBufData(_bufnr) + let list = get(s:tabSpace, tabpagenr(), [-1]) + + if !empty(list) && list[0] == '-1' + " The first time we add a tab, Vim uses the current buffer + " as it's starting page. Even though we are about to + " edit a new page (BufEnter is triggered after), so + " remove the -1 entry indicating we have covered this case. + let list = [] + call add(list, _bufnr) + let s:tabSpace[tabpagenr()] = list + elseif empty(list) || index(list, _bufnr) == -1 + " Add new buffer to this tab's buffer list. + call add(list, _bufnr) + let s:tabSpace[tabpagenr()] = list + + if g:bufExplorerOnlyOneTab == 1 + " If a buffer can only be available in 1 tab page ensure this + " buffer is not present in any other tabs + let tabidx = 1 + while tabidx < len(s:tabSpace) + if tabidx != tabpagenr() + let bufidx = index(s:tabSpace[tabidx], _bufnr) + if bufidx != -1 + call remove(s:tabSpace[tabidx], bufidx) + endif + endif + let tabidx = tabidx + 1 + endwhile + endif + endif + call s:MRUPush(_bufnr) endfunction @@ -289,6 +224,14 @@ function! s:DeactivateBuffer(remove) call s:MRUPop(_bufnr) endfunction +" TabEnter {{{2 +function! s:TabEnter() + " Make s:tabSpace 1-based + if empty(s:tabSpace) || len(s:tabSpace) < (tabpagenr() + 1) + call add(s:tabSpace, [-1]) + endif +endfunction + " MRUPop {{{2 function! s:MRUPop(bufnr) call filter(s:MRUList, 'v:val != '.a:bufnr) @@ -337,7 +280,26 @@ endfunction " Initialize {{{2 function! s:Initialize() - call s:SetLocalSettings() + let s:_insertmode = &insertmode + set noinsertmode + + let s:_showcmd = &showcmd + set noshowcmd + + let s:_cpo = &cpo + set cpo&vim + + let s:_report = &report + let &report = 10000 + + setlocal nonumber + setlocal foldcolumn=0 + setlocal nofoldenable + setlocal cursorline + setlocal nospell + + setlocal nobuflisted + let s:running = 1 endfunction @@ -365,29 +327,6 @@ function! s:Cleanup() delmarks! endfunction -" SetLocalSettings {{{2 -function! s:SetLocalSettings() - let s:_insertmode = &insertmode - set noinsertmode - - let s:_showcmd = &showcmd - set noshowcmd - - let s:_cpo = &cpo - set cpo&vim - - let s:_report = &report - let &report = 10000 - - setlocal nonumber - setlocal foldcolumn=0 - setlocal nofoldenable - setlocal cursorline - setlocal nospell - setlocal nobuflisted - setlocal filetype=bufexplorer -endfunction - " BufExplorerHorizontalSplit {{{2 function! BufExplorerHorizontalSplit() let s:splitMode = "sp" @@ -400,15 +339,6 @@ function! BufExplorerVerticalSplit() execute "BufExplorer" endfunction -" ToggleBufExplorer {{{2 -function! ToggleBufExplorer() - if exists("s:running") && s:running == 1 && bufname(winbufnr(0)) == s:name - call s:Close() - else - call BufExplorer() - endif -endfunction - " BufExplorer {{{2 function! BufExplorer() let name = s:name @@ -501,31 +431,28 @@ function! s:MapKeys() nnoremap :call SelectBuffer() endif - nnoremap