summaryrefslogtreecommitdiff
path: root/.vim/available_plugins/minibufexpl
diff options
context:
space:
mode:
authorJohannes Stolp <jstolp@vgfr65cs2.internal.synopsys.com>2016-07-01 17:41:55 +0200
committerJohannes Stolp <jstolp@vgfr65cs2.internal.synopsys.com>2016-07-01 17:41:55 +0200
commit72706eb9323065cdb4152d73926fd680a4c5a9ab (patch)
tree4ab215cd6f2093d81915d2c8e5c685c5e3082fd3 /.vim/available_plugins/minibufexpl
parentd3501225442d08275d1300e8797d1c15e0025488 (diff)
downloaddotfiles-72706eb9323065cdb4152d73926fd680a4c5a9ab.tar.gz
dotfiles-72706eb9323065cdb4152d73926fd680a4c5a9ab.zip
Removed current plugin handling, added script to install vundle(a vim plugin manager).
Adapted vim config files to use vundle. To install new vim plugins, they must be added to .vim/vimrc_files/vundle.vim
Diffstat (limited to '.vim/available_plugins/minibufexpl')
-rwxr-xr-x.vim/available_plugins/minibufexpl/.gitignore1
-rwxr-xr-x.vim/available_plugins/minibufexpl/README.md231
-rwxr-xr-x.vim/available_plugins/minibufexpl/doc/minibufexpl.txt1137
-rwxr-xr-x.vim/available_plugins/minibufexpl/plugin/minibufexpl.vim2467
4 files changed, 0 insertions, 3836 deletions
diff --git a/.vim/available_plugins/minibufexpl/.gitignore b/.vim/available_plugins/minibufexpl/.gitignore
deleted file mode 100755
index 0a56e3f..0000000
--- a/.vim/available_plugins/minibufexpl/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/doc/tags
diff --git a/.vim/available_plugins/minibufexpl/README.md b/.vim/available_plugins/minibufexpl/README.md
deleted file mode 100755
index 5652417..0000000
--- a/.vim/available_plugins/minibufexpl/README.md
+++ /dev/null
@@ -1,231 +0,0 @@
-# MiniBufExpl
-
-This is a fork of [Bindu Wavell][]'s [MiniBufExpl][] plugin for [Vim][].
-
-[Federico Holgado][] started this fork and made lots of improvements. It is
-currently maintained by [Techlive Zheng][], the development has been moved to
-[@techlivezheng's repo][], only new version will be released to [@fholgado's
-repo][].
-
-[Vim]: http://vim.org
-[MiniBufExpl]: http://www.vim.org/scripts/script.php?script_id=159
-[Techlive Zheng]: http://techlivezheng.me
-[Federico Holgado]: http://www.fholgado.com
-[@fholgado's repo]:https://github.com/fholgado/minibufexpl.vim
-[@techlivezheng's repo]: https://github.com/techlivezheng/vim-plugin-minibufexpl
-
-## The Story
-
->The reason why I took it upon myself to improve MiniBufExplorer is a matter of
-need. I am a User Interface designer who spends a lot of time writing front-
-end code. I recently found Vim and fell in love with it. During my search for
-the plugins that would help me the most, I came across MBE. I loved it
-initially, but quickly saw that it had some major flaws.
-
->After using MBE for some time, I have been able to identify some areas that
-needed some dire attention from a usability standpoint. I am doing my best to
-fix those issues without adding "feature bloat" or other unnecessary things to
-MBE. I am always open to suggestions and discussion as to what we can do to
-improve this great plugin.
-
->I would also like to thank [Bindu Wavell][], who is the plugin's original
-creator and [Oliver Uvman][], who like myself has been hacking at MBE to make
-needed improvements. My goal is to consolidate the code and act as the
-maintainer so that any further changes from contributors can be found in a
-single location.
-
-[Bindu Wavell]: http://www.wavell.net
-[Oliver Uvman]: https://github.com/OliverUv
-
--- Federico Holgado
-
->This is a very useful plugin, being able to see the buffer status in a
-tab-like fashion while you are working with mutiple buffers is very pleasant.
-Since @fholgado began to improve this plugin, lots of new features has been
-added, it's great. Meanwhile, there are still some annoying bugs that haven't
-been fixed for a long time, so I decide to step out and do something.
-
--- Techlive Zheng
-
-## Improvements in Version 6.5.0
-
-### Bugfixes
-
-Squashed almost every known bugs due to the relase of version 6.5.0, for more
-details, please check out the 6.5.0 milestones.
-
-* https://github.com/fholgado/minibufexpl.vim/issues?milestone=1&page=1&state=closed
-* https://github.com/techlivezheng/vim-plugin-minibufexpl/issues?milestone=1&page=1&state=closed
-
-### Buffer With No Name
-
-Buffer without a name would be shown as `[1:--NO NAME--<timestamp>]` now.
-
-### User Interface Change
-
-Options, commands and key bindings have some changes, please see changelog for
-more details.
-
-### Cycle Buffer in MRU Fashion
-
-As a long expected feature, command ':MBEbf' or ':MBEbb' could be used to cycle
-the buffer forwards or backwards in the most recently used order.
-
-### Handle Buffers with Duplicate Name
-
-Mechanism for checking buffers with duplicate name has been totally refactored,
-it is now more efficient.
-
-Mechanism for generating unique name for these buffers has been refactored too,
-each buffer should be uniquely identified now.
-
- ./test --> test
- ./alpha/foo/test --> alpha/foo/test
- ./alpha/bar/test --> alpha/bar/test
- ./beta/new/test --> beta/-/test
- ./omega/old/test --> omega/old/test
- ./omega/test --> omega/test
-
-### MBE Window is Local to Tab Page
-
-Open or close MBE window in one tab page would not interfere another. Commands
-':MBEOpenAll', ':MBECloseAll' and ':MBEToggleAll' have been introduced to mani-
-pulate MBEs in all tab pags.
-
-### Preserve Window Entering History
-
-Previous versions of MBE will interfere the window entering history on updating,
-this behavior has caused many incompatibilities with other plugins. It should
-be fixed now, 'wincmd p' would work as usual.
-
-### Quit MBE if No More Normal Window Open
-
-MBE now will be closed if all the other open windows are plugin windows.
-
-### Delete/Wipeout/Unload Buffers Preserving the Window
-
-Commnad ':MBEbd', ':MBEbw' or ':MBEbun' could be used to delete/wipeout/unload
-buffers just as ':bd', ':bw' or ':bun', but the window that previously holding
-them will be preserved.
-
-## Improvements in Previous Versions
-
-### Current Buffer Highlighting
-
-Previously, MBE would only tell you if a buffer was currently visible in the
-editor like such:
-
-![][current_buffer_old]
-
-[current_buffer_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/current_buffer/old.png
-
-Now, MBE shows you the buffer that is currently visible _and_ active in the
-editor. Here is an animated GIF that shows the current buffer highlighting in
-action:
-
-![][current_buffer_new]
-
-[current_buffer_new]: http://dl.dropbox.com/u/118650/mbe/screenshots/mbe1.gif
-
-### Duplicate Buffer Names
-
-If you are an MBE user, I am sure you are familiar with the following
-scenario:
-
-![][dup_buf_names_old]
-
-[dup_buf_names_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/dupe_buf_names/old_fade.png
-
-The problem is that buffers with the same filename do not get differentiated,
-and it makes it very hard to find the buffer you are trying to edit. The
-simple solution is to show a parent directory that is different between all
-buffers like such:
-
-![][dup_buf_names_new]
-
-[dup_buf_names_new]: http://dl.dropbox.com/u/118650/mbe/screenshots/dupe_buf_names/new_fade.png
-
-Let me explain how it works. Let's observe 2 files that have the same
-filename.
-
- /Users/fholgado/Sites/website1/css/style.css
- /Users/fholgado/Sites/website2/css/style.css
-
-You'll notice both files have the same filename _and_ are in a folder called
-'css'. This happens all the time in web development projects.
-
-In order to differentiate the two files, MBE now crawls up the directory tree
-and finds the first parent directory that differs from both files, which in
-this case is 'website1' and 'website2'. MBE will now show you these 2 files as
-such:
-
- [1:website1/style.css][2:website2/style.css]
-
-### Buffer States
-
-It is always important to be able to see at a glance what buffers are modified
-and need to be saved. MBE now shows you respective colors whether the buffer
-is modified or not modified.
-
-![][buffer_status]
-
-[buffer_status]: http://dl.dropbox.com/u/118650/mbe/screenshots/save_states/new.png
-
-**Most importantly**, MBE now updates the buffer states immediately after
-making changes, instead of the previous behavior that only updated buffer
-states when switching buffers.
-
-### Status Line Clutter
-
-Previously, the MBE buffer would use the same statusline that is currently
-configured for Vim. This adds a lot of visual clutter to MBE and does not add
-any functionality, since the status line is showing information for a buffer
-that does not contain any real content.
-
-![][stauts_line_clutter_old]
-
-[status_line_clutter_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/status_line/old.png
-
-MBE now uses it's own custom Status Line format to reduce the unwanted
-information. This line is customizable and can even be empty.
-
-![][status_line_clutter_new]
-
-[status_line_clutter_new]: http://dl.dropbox.com/u/118650/mbe/screenshots/status_line/new.png
-
-### Window Auto Resizing
-
-Previously, the MBE buffer made the automatic window resizing using the ctrl +
-w + = command in Vim. Many of you have seen the following picture:
-
-![][window_auto_resizing_old]
-
-[window_auto_resizing_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/window_resizing/old.png
-
-MBE now maintains it's buffer size both in horizontal and vertical mode when
-using window resizing commands. Now you can take a Vim tab that looks like
-this:
-
-![][window_auto_resizing_new1]
-
-[window_auto_resizing_new1]: http://dl.dropbox.com/u/118650/mbe/screenshots/window_resizing/new1.png
-
-And turn it into something like this without worrying about the MBE window
-becoming large as well:
-
-![][window_auto_resizing_new2]
-
-[window_auto_resizing_new2]: http://dl.dropbox.com/u/118650/mbe/screenshots/window_resizing/new2.png
-
-### Customizing Colors
-
-Here are all the color additions to customize MBE's new features. You can add
-the following to your Color file and customize the color accordingly:
-
- " MiniBufExpl Colors
- hi MBENormal guifg=#808080 guibg=fg
- hi MBEChanged guifg=#CD5907 guibg=fg
- hi MBEVisibleNormal guifg=#5DC2D6 guibg=fg
- hi MBEVisibleChanged guifg=#F1266F guibg=fg
- hi MBEVisibleActiveNormal guifg=#A6DB29 guibg=fg
- hi MBEVisibleActiveChanged guifg=#F1266F guibg=fg
diff --git a/.vim/available_plugins/minibufexpl/doc/minibufexpl.txt b/.vim/available_plugins/minibufexpl/doc/minibufexpl.txt
deleted file mode 100755
index 133b566..0000000
--- a/.vim/available_plugins/minibufexpl/doc/minibufexpl.txt
+++ /dev/null
@@ -1,1137 +0,0 @@
-*minibufexpl.txt* Mini Buffer Explorer
-
- *MiniBufExpl*
-==============================================================================
-CONTENTS *MiniBufExpl-contents*
-
- 1. Install................................|MiniBufExplInstall|
- 2. Mappings...............................|MiniBufExplMappings|
- 2.1 Global Mappings |MiniBufExplMappings-Global|
- 2.2 Window Mappings |MiniBufExplMappings-Window|
- 3. Commands...............................|MiniBufExplCommands|
- 4. Options................................|MiniBufExplOptions|
- 4.1 Splits.............................|MiniBufExplSplits|
- 4.2 Window Size........................|MiniBufExplWindowSize|
- 4.3 Automatic Opening..................|MiniBufExplAutoOpen|
- 4.4 Keyboard Control...................|MiniBufExplKeyboard|
- 4.5 Misc...............................|MiniBufExplMisc|
- 4.6 Debugging..........................|MiniBufExplDebugging|
- 5. Highlighting...........................|MiniBufExplHighlighting|
- 6. Known Issues...........................|MiniBufExplKnownIssues|
- 7. About..................................|MiniBufExplAbout|
- 8. Changelog..............................|MiniBufExplChangelog|
-
-==============================================================================
-1. Install *MiniBufExplInstall*
-
-Normally, this file should reside in the plugins directory and be
-automatically sourced. If not, you must manually source this file using
-':source minibufexplorer.vim'.
-
-==============================================================================
-2. Key Mappings *MiniBufExplMappings*
-
-------------------------------------------------------------------------------
-2.1 Global Mappings *MiniBufExplMappings-Global*
-
-MBE has no longer provide default key bindings for controling MBE window.
-
-You may want to add something like the following to your .vimrc file:
-
- map <Leader>mbe :MBEOpen<cr>
- map <Leader>mbc :MBEClose<cr>
- map <Leader>mbt :MBEToggle<cr>
-
-Or, much shorter form:
-
- map <Leader>e :MBEOpen<cr>
- map <Leader>c :MBEClose<cr>
- map <Leader>t :MBEToggle<cr>
-
-Either way, the key bindings used in these mappings should fit with your
-configuration of Vim.
-
-------------------------------------------------------------------------------
-2.2 Window Mappings *MiniBufExplMappings-Window*
-
- o *MiniBufExpl-Mapping-o*
- e *MiniBufExpl-Mapping-e*
- <CR> *MiniBufExpl-Mapping-<CR>*
- Open selected buffer in the previous window
-
- s *MiniBufExpl-Mapping-s*
- Open selected buffer in a horizontal split of the previous window
-
- v *MiniBufExpl-Mapping-v*
- Open selected buffer in a vertical split of the previous window
-
- d *MiniBufExpl-Mapping-d*
- Delete selected buffer without closing the window it located
-
- k *MiniBufExpl-Mapping-k*
- <up> *MiniBufExpl-Mapping-<up>*
- Move one line up in the MBE window
-
- j *MiniBufExpl-Mapping-j*
- <down> *MiniBufExpl-Mapping-<down>*
- Move one line down in the MBE window
-
- l *MiniBufExpl-Mapping-l*
- <right> *MiniBufExpl-Mapping-<right>*
- Move one buffer forward in the MBE window
-
- h *MiniBufExpl-Mapping-h*
- <left> *MiniBufExpl-Mapping-<left>*
- Move one buffer backward in the MBE window
-
-==============================================================================
-3. Commands *MiniBufExplCommands*
-
-:MiniBufExplorer (depreciated) *:MiniBufExplorer*
- Use :MBEOpen instead
-
-:CMiniBufExplorer (depreciated) *:CMiniBufExplorer*
- Use :MBEClose instead
-
-:TMiniBufExplorer (depreciated) *:TMiniBufExplorer*
- Use :MBEToggle instead
-
-:UMiniBufExplorer (Obsolete) *:UMiniBufExplorer*
- Command has been removed
-
-:MBEFocus *:MBEFocus*
- Focus into the MBE window.
-
-:MBEFocusAll *:MBEFocusAll*
- Focus into the MBE window in every tab page.
-
-:MBEOpen[!] *:MBEOpen*
- Open the Explorer.
- With '!' appended, MBE will be reopened if it is already open.
-
-:MBEOpenAll[!] *:MBEOpenAll*
- Open the Explorer in every tab page.
- With '!' appended, MBE will be reopened if it is already open.
-
-:MBEClose[!] *:MBEClose*
- Close the Explorer if it's open.
- With '!' appended, auto-updating will be disabled even if it does not
- meet the required numbers of eligible buffers. Otherwise, auto-updating
- will only be disabled if the required numbers of eligible buffers has
- been meet.
-
-:MBECloseAll[!] *:MBECloseAll*
- Close the Explorer in every tab page if it's open.
- With '!' appended, auto-updating will be disabled even if it does not
- meet the required numbers of eligible buffers. Otherwise, auto-updating
- will only be disabled if the required numbers of eligible buffers has
- been meet.
-
-:MBEToggle[!] *:MBEToggle*
- Toggle the Explorer open and closed.
- With '!' appended: On the open action, it does not have any effect; On
- the close action, auto-updating will be disabled even if it does not
- meet the required numbers of eligible buffers, otherwise, auto-updating
- will only be disabled if the required numbers of eligible buffers has
- been meet.
-
-:MBEToggleAll[!] *:MBEToggleAll*
- Toggle the Explorer open and closed in every tab page.
- With '!' appended: On the open action, MBE will be reopened if it is
- already open; On the close action, auto-updating will be disabled even
- if it does not meet the required numbers of eligible buffers, otherwise,
- auto-updating will only be disabled if the required numbers of eligible
- buffers has been meet.
-
-:MBEToggleMRU *:MBEToggleMRU*
- Toggle the buffer listing order of the MBE window between its default and
- most recently used.
-
-:MBEToggleMRUAll *:MBEToggleMRUAll*
- Toggle the buffer listing order of the MBE window between its default and
- most recently used in every tab page.
-
-:MBEbn *:MBEbn*
- Switch to next normal buffer in current window.
-
-:MBEbp *:MBEbp*
- Switch to previous normal buffer in current window.
-
-:MBEbf *:MBEbf*
- Move one buffer forward in the most recent used buffer list.
-
-:MBEbb *:MBEbb*
- Move one buffer backward in the most recent used buffer list.
-
-:MBEbd[!] [N1] [N2] ... *:MBEbd*
- Delete buffers but preserve the window that holding them.
- [N*] is the buffer's number or name to be deleted. If no [N*] is given,
- then current buffer will be deleted. Multiple buffers could be deleted
- at the same time.
-
-:MBEbw[!] [N1] [N2] ... *:MBEbw*
- Wipe out buffers but preserve the window that holding them.
- [N*] is the buffer's number or name to be wiped out. If no [N*] is given,
- then current buffer will be deleted. Multiple buffers could be unloaded
- at the same time.
-
-:MBEbun[!] [N1] [N2] ... *:MBEbun*
- Unload buffers but preserve the window that holding them.
- [N*] is the buffer's number or name to be unloaded. If no [N*] is given,
- then current buffer will be deleted. Multiple buffers could be wiped out
- at the same time.
-
-==============================================================================
-4. Options *MiniBufExplOptions*
-
-------------------------------------------------------------------------------
-4.1 Splits *MiniBufExplSplits*
-
- *'g:miniBufExplVSplit'*
-If you would like a vertical explorer you can assign the column width (in
-characters) you want for your explorer window with the following .vimrc
-variable (this was introduced in 6.3.0):
-
- let g:miniBufExplVSplit = 20 " column width in chars
-
- *'g:miniBufExplBRSplit'*
-To control where the new split window goes relative to the current window, use
-the setting:
-
- let g:miniBufExplBRSplit = 0 " Put new window above
- " current or on the
- " left for vertical split
- let g:miniBufExplBRSplit = 1 " Put new window below
- " current or on the
- " right for vertical split
-
-The default for this is read from the 'splitbelow' or 'splitright' Vim option
-which depends on 'g:miniBufExplVSplit' option.
-
- *'g:miniBufExplSplitBelow'*
-This option has been depreciated by 'g:miniBufExplBRSplit'.
-
- *'g:miniBufExplSplitToEdge'*
-By default we are now (as of 6.0.2) forcing the -MiniBufExplorer- window to
-open up at the edge of the screen. You can turn this off by setting the
-following variable in your .vimrc:
-
- let g:miniBufExplSplitToEdge = 0
-
-------------------------------------------------------------------------------
-4.2 Window Size *MiniBufExplWindowSize*
-
- *'g:miniBufExplMaxSize'*
-------------------------------------------------------------------------------
-Horizontal
-
-It is now (as of 6.1.1) possible to set a maximum height
-for the -MiniBufExplorer- window. You can set the max height by letting the
-following variable in your .vimrc:
-
- let g:miniBufExplMaxSize = <max lines: default 0>
-
-setting this to 0 will mean the window gets as big as needed to fit all your
-buffers.
-
-------------------------------------------------------------------------------
-Vertical
-
-(as of 6.3.0)
-
-By default the vertical explorer has a fixed width . If you put:
-
- let g:miniBufExplMaxSize = <max width: default 0>
-
-into your .vimrc then MBE will attempt to set the width of the MBE window to
-be as wide as your widest tab. The width will not exceed MaxSize even if you
-have wider tabs.
-
-Accepting the default value of 0 for this will give you a fixed width MBE
-window.
-
-NOTE: This was *'g:miniBufExplMaxHeight'* before 6.3.0; the old
-setting is backwards compatible if you don't use MaxSize.
-
- *'g:miniBufExplMinSize'*
-------------------------------------------------------------------------------
-Horizontal
-
-As of 6.2.2 it is possible to set a minimum height for the -MiniBufExplorer-
-window. You can set the min height by letting the following variable in your
-.vimrc:
-
- let g:miniBufExplMinSize = <min height: default 1>
-
-------------------------------------------------------------------------------
-Vertical
-
-You can specify a MinSize for the vertical explorer window by putting the
-following in your .vimrc:
-
- let g:miniBufExplMinSize = <min width: default 1>
-
-This will have no effect unless you also specify MaxSize.
-
-NOTE: This was *'g:miniBufExplMinHeight'* before 6.3.0; the old
-setting is backwards compatible if you don't use MinSize.
-
-------------------------------------------------------------------------------
-4.3 Automatic Opening *MiniBufExplAutoOpen*
-
- *'g:miniBufExplAutoStart'*
-If you only want open MBE manually when needed, you can put the following into
-your .vimrc:
-
- let g:miniBufExplorerAutoStart = 0
-
- *'g:miniBufExplorerAutoStart'*
-This option has been depreciated by 'g:miniBufExplAutoStart'.
-
- *'g:miniBufExplBuffersNeeded'*
-This variable controls how man buffers should be available until MBE shows up,
-if 'g:miniBufExplorerAutoStart' is enabled. By default, at least 2 buffers are
-needed.
-
-You can put the following into your .vimrc to let MBE start as soon as a normal
-buffer is available.
-
- let g:miniBufExplBuffersNeeded = 1
-
-You can put the following into your .vimrc to skip the eligible buffer checking.
-
- let g:miniBufExplBuffersNeeded = 0
-
- *'g:miniBufExplorerMoreThanOne'*
-This option has been depreciated by 'g:miniBufExplBuffersNeeded'.
-
- *'g:miniBufExplHideWhenDiff'*
-Disable automatic opening if vim is started in diff mode(vimdiff, or with '-d'
-option). This option only affected the first tab page created at vim start.
-
- *'g:miniBufExplorerHideWhenDiff'*
-This option has been depreciated by 'g:miniBufExplHideWhenDiff'.
-
-------------------------------------------------------------------------------
-4.4 Keyboard Control *MiniBufExplKeyboard*
-
- *'g:miniBufExplMapWindowNavVim'*
- *'g:miniBufExplMapWindowNavArrows'*
- *'g:miniBufExplMapCTabSwitchBufs'*
- *'g:miniBufExplMapCTabSwitchWindows'*
-These configuration variabes have been obsolete, MBE does no longer provide
-this functionality any more. If you'd like them be back, please add the
-following mappings to your .vimrc file.
-
- " If you like control + vim direction key to navigate
- " windows then perform the remapping
- "
- noremap <C-J> <C-W>j
- noremap <C-K> <C-W>k
- noremap <C-H> <C-W>h
- noremap <C-L> <C-W>l
-
- " If you like control + arrow key to navigate windows
- " then perform the remapping
- "
- noremap <C-Down> <C-W>j
- noremap <C-Up> <C-W>k
- noremap <C-Left> <C-W>h
- noremap <C-Right> <C-W>l
-
- " If you like <C-TAB> and <C-S-TAB> to switch buffers
- " in the current window then perform the remapping
- "
- noremap <C-TAB> :MBEbn<CR>
- noremap <C-S-TAB> :MBEbp<CR>
- "
- " Or, in MRU fashion
- "
- noremap <C-TAB> :MBEbf<CR>
- noremap <C-S-TAB> :MBEbb<CR>
-
- "
- " If you like <C-TAB> and <C-S-TAB> to switch windows
- " then perform the remapping
- "
- noremap <C-TAB> <C-W>w
- noremap <C-S-TAB> <C-W>W
-
-
-------------------------------------------------------------------------------
-4.5 Misc *MiniBufExplMisc*
-
- *'g:miniBufExplSetUT'*
-Set the 'updatetime' to a proper value.
-
- *'g:miniBufExplCycleArround'*
-
-Should buffer be cycled arround if hits the begining or the end while
-using MBE's buffer movement commands.
-
- *'g:miniBufExplStatusLineText'*
-MBE window status line text.
-
- *'g:miniBufExplUseSingleClick'*
-As of MBE 6.3.0, you can put the following into your .vimrc:
-
- let g:miniBufExplUseSingleClick = 1
-
-If you would like to single click on tabs rather than double clicking on them
-to goto the selected buffer.
-
- *'g:miniBufExplCloseOnSelect'*
-If you would like MBE to close when you select a buffer, put:
-
- let g:miniBufExplCloseOnSelect = 1
-
-into your .vimrc in order to force MBE to try to place selected buffers into a
-window that does not have a nonmodifiable buffer. The upshot of this should be
-that if you go into MBE and select a buffer, the buffer should not show up in
-a window that is hosting an explorer.
-
- *'g:miniBufExplShowBufNumbers'*
-If you would like to omit the buffer number from MBE's buffer display, put the
-following in your .vimrc:
-
- let g:miniBufExplShowBufNumbers = 0
-
-------------------------------------------------------------------------------
-4.6 Debugging *MiniBufExplDebugging*
-
- *'g:miniBufExplDebugMode'*
-You can also set a DebugMode to cause output to be target as follows (default
-is mode 3):
-
- let g:miniBufExplDebugMode = 0 " Errors will show up in
- " a Vim window
- let g:miniBufExplDebugMode = 1 " Uses Vim's echo function
- " to display on the screen
- let g:miniBufExplDebugMode = 2 " Writes to a file
- " MiniBufExplorer.DBG
- let g:miniBufExplDebugMode = 3 " Store output in global variable
- " g:miniBufExplDebugOutput
-
- *'g:miniBufExplorerDebugMode'*
-This option has been depreciated by 'g:miniBufExplDebugMode'.
-
- *'g:miniBufExplDebugLevel'*
-MBE has had a basic debugging capability for quite some time. However, it has
-not been very friendly in the past. As of 6.0.8, you can put one of each of
-the following into your .vimrc:
-
- let g:miniBufExplDebugLevel = 0 " MBE serious errors output
- let g:miniBufExplDebugLevel = 4 " MBE all errors output
- let g:miniBufExplDebugLevel = 10 " MBE reports everything
-
- *'g:miniBufExplorerDebugLevel'*
-This option has been depreciated by 'g:miniBufExplDebugLevel'.
-
-Or if you are able to start Vim, you might just perform these at a command
-prompt right before you do the operation that is failing.
-
-==============================================================================
-5. Highlighting *MiniBufExplHighlighting*
-
-It is possible to customize the highlighting for the tabs in the MBE by
-configuring the following highlighting groups:
-
- MBENormal - for buffers that have NOT CHANGED and are
- NOT VISIBLE
- MBEChanged - for buffers that have CHANGED and are
- NOT VISIBLE
- MBEVisibleNormal - for buffers that have NOT CHANGED and are
- VISIBLE
- MBEVisibleChanged - for buffers that have CHANGED and are
- VISIBLE
- MBEVisibleActiveNormal - for buffers that have NOT CHANGED and are
- VISIBLE and is the active buffer
- MBEVisibleActiveChanged - for buffers that have CHANGED and are
- VISIBLE and is the active buffer
-
-You can either link to an existing highlighting group by adding a command
-like:
-
- hi link MBEVisibleChanged Error
-
-to your .vimrc or you can specify exact foreground and background colors using
-the following syntax:
-
- hi MBEChanged guibg=darkblue ctermbg=darkblue termbg=white
-
-If you have customized the above highlight groups, remember to set
-'g:did_minibufexplorer_syntax_inits = 1' so that MBE would not override
-your settings.
-
-NOTE: If you set a colorscheme in your .vimrc you should do it
- BEFORE updating the MBE highlighting groups.
-
-==============================================================================
-6. Known Issues *MiniBufExplKnownIssues*
-
-==============================================================================
-6. Todo *MiniBufExplTodo*
-
-- Add the ability to specify a regexp for eligible buffers
- allowing the ability to filter out certain buffers that
- you don't want to control from MBE.
-
-==============================================================================
-7. About *MiniBufExplAbout*
-
- Copyright: Copyright (C) 2002 & 2003 Bindu Wavell
- Copyright (C) 2010 Oliver Uvman
- Copyright (C) 2010 Danielle Church
- Copyright (C) 2010 Stephan Sokolow
- Copyright (C) 2010 & 2011 Federico Holgado
- Copyright (C) 2012 & 2013 Techlive Zheng
-
- Permission is hereby granted to use and distribute this code,
- with or without modifications, provided that this copyright
- notice is copied with it. Like anything else that's free,
- minibufexpl.vim is provided *as is* and comes with no
- warranty of any kind, either expressed or implied. In no
- event will the copyright holder be liable for any damages
- resulting from the use of this software.
-
- Description: Mini Buffer Explorer Vim Plugin
- Maintainer: Techlive Zheng <techlivezheng@gmail.com>
- Last Updated: Techlive Zheng <techlivezheng@gmail.com>
- URL: http://vim.sourceforge.net/scripts/script.php?script_id=159
- GitHub URL: https://github.com/techlivezheng/vim-plugin-minibufexpl
- Version: 6.5.0
-
-==============================================================================
-8. Changelog *MiniBufExplChangelog*
-
-6.5.0
-
- - Configuration variables changing:
-
- * 'g:miniBufExplModSelTarget' is absolete.
- MBE will try to avoid using any other plugin's winow.
- (cba0147)
-
- * 'g:miniBufExplCheckDupeBufs' is obsolete.
- (176cf27,fd737d3)
-
- * 'g:miniBufExplorerAutoUpdate' is obsolete.
- (3cee9f9)
-
- * 'g:miniBufExplForceSyntaxEnable' is obsolete.
- (373691f)
-
- * Several configuration variables have been renamed.
- (48f2934)
-
- - 'g:miniBufExplorerAutoStart' -> 'g:miniBufExplAutoStart'
- - 'g:miniBufExplorerDebugMode' -> 'g:miniBufExplDebugMode'
- - 'g:miniBufExplorerDebugLevel' -> 'g:miniBufExplDebugLevel'
- - 'g:miniBufExplorerDebugOutput' -> 'g:miniBufExplDebugOutput'
- - 'g:miniBufExplorerHideWhenDiff' -> 'g:miniBufExplHideWhenDiff'
-
- * 'g:statusLineText' is depreciated by 'g:miniBufExplStatusLineText'.
- (1aeb012)
-
- * 'g:miniBufExplSplitBelow' is depreciated by 'g:miniBufExplBRSplit'.
- Window spliting is now controled by '&splitbelow' and '&splitright'
- settings.
- (282025e)
-
- * 'g:miniBufExplorerAutoStart' could be used to control whether MBE
- should be startd at the startup or not.
- (f581428)
-
- * 'g:miniBufExplorerMoreThanOne' is depreciated by 'g:miniBufExplBuffersNeeded'.
- (4e4acec)
-
- * New configuration option 'g:miniBufExplCycleArround' to control
- whether buffer list should be cycled arround if hits the start of
- the end.
- (2df9b2b)
-
- - Commands and mappings interface changing:
-
- * Key binding 'p' in MBE window has been removed.
- (b45cd77)
-
- * New commands ':MBEbf' and ':MBEbb' now could be used to go forward
- or backward the buffer entering history, aka in MRU fashion.
- (b7d2ad5,a4e9ce9)
-
- * Command ':UMiniBufExplorer' has been removed, function
- 'AutoUpdate()' is not supposed to be triggered manually.
- (9c12f71)
-
- * Several main commands have been renamed.
- (8d88b9a)
-
- * ':MiniBufExplorer' is depreciated by ':MBEOpen'
- * ':CMiniBufExplorer' is depreciated by ':MBEClose'
- * ':TMiniBufExplorer' is depreciated by ':MBEToggle'
-
- * Introduce commands ':MBEOpenAll', ':MBECloseAll',
- ':MBEToggleAll' to manage MBEs in all tabs.
- (e839c1d)
-
- * Introduce ':MBEFocus' and ':MBEFocusAll' to focus into
- the MBE window.
- (fa9e5d5)
-
- * Introduce commands ':MBEbd', ':MBEbw' and
- ':MBEbun' to delete buffer but preserve the window that it
- was in.
- (e4f9294,9b7635e)
-
- * Key bindings '<TAB>' and '<S-TAB>' in MBE window have been changed
- to '<right>' and '<left>' to avoid unnecessary conflict with some
- system's key bindings.
- (ca0cc8d,d788c7a)
-
- * MBE has no longer provide the key-bindings for switching
- between buffers and windows, this should be up to the user.
- (417e952)
-
- * MBE has no longer provide the default mappings for MBE's
- management, this should be up to the user.
- (a0977cd)
-
- * Introduce command 'MBEToggleMRU' to change the MBE listing order.
- (8a7baaa)
-
- - Bugfixes, Enhancements, Closed Issues, Merged Pull Requests:
-
- See https://github.com/fholgado/minibufexpl.vim/issues?milestone=1&page=1&state=closed
- and https://github.com/techlivezheng/vim-plugin-minibufexpl/issues?milestone=1&page=1&state=closed
-
- * Quit MBE if there is no more normal window open.
- (cea185b,7ebc049,b0d4c4a)
-
- - Fix fholgado/minibufexpl.vim#1
- - Fix fholgado/minibufexpl.vim#41
- - Fix fholgado/minibufexpl.vim#78
-
- These changes should also fix the following issues which state the remaining
- buffer's syntax highlighting gets lost. More details please refer to
- https://github.com/fholgado/minibufexpl.vim/issues/71#issuecomment-17781092.
-
- - Fix fholgado/minibufexpl.vim#24
- - Fix fholgado/minibufexpl.vim#71
- - Fix fholgado/minibufexpl.vim#73
-
- * Update MBE will no longer interfere window entering history.
- (3add236,4155048)
-
- - Fix fholgado/minibufexpl.vim#3
- - Fix fholgado/minibufexpl.vim#7
- - Fix fholgado/minibufexpl.vim#17
- - Fix fholgado/minibufexpl.vim#21
- - Fix fholgado/minibufexpl.vim#44
- - Fix fholgado/minibufexpl.vim#48
- - Fix fholgado/minibufexpl.vim#75
-
- * Mechanism for checking buffers with duplicate name and generating a
- unique name for each of these buffers have been completely refactored,
- it is more efficient now and each buffer should be uniquely identified.
- Thanks to jmnas@github for the orginal work.
- (f3723aa,5715dd9,950a81a,763a623)
-
- - Fix fholgado/minibufexpl.vim#5
- - Fix fholgado/minibufexpl.vim#6
- - Fix fholgado/minibufexpl.vim#9
- - Fix fholgado/minibufexpl.vim#13
- - Fix fholgado/minibufexpl.vim#61
- - Fix fholgado/minibufexpl.vim#77
-
- * Buffer now could be cycled in a MRU fashion
- (b7d2ad5,a4e9ce9)
-
- - Fix fholgado/minibufexpl.vim#20.
-
- * Prevent duplicate MBE window from opening.
- (bfd4b9a)
-
- - Fix fholgado/minibufexpl.vim#31
- - Fix fholgado/minibufexpl.vim#37
- - Fix fholgado/minibufexpl.vim#82
- - Fix fholgado/minibufexpl.vim#83
-
- * Use "very nomagic" in search() function.
- (9474294)
-
- - Fix fholgado/minibufexpl.vim#33
- - Merge fholgado/minibufexpl.vim#67 -- By mr-vinn@github
-
- * Removing trailing whitespace
- (6fd9d11)
-
- - Merge fholgado/minibufexpl.vim#35 -- By ubunatic@github
-
- * Avoid MBE window being affected by 'relativenumber' option.
- (adbac4d,eba2fc5)
-
- - Merge fholgado/minibufexpl.vim#43 -- By hoopes@github
- - Fix techlivezheng/vim-plugin-minibufexpl#7
- - Merge techlivezheng/vim-plugin-minibufexpl#9 -- By chadburrus@github
-
- * Improve documentation.
- (ed9c12f,a9d7810,ccd5f14)
-
- - Merge fholgado/minibufexpl.vim#45 -- By Inkane@github
- - Merge fholgado/minibufexpl.vim#53 -- By jesboat@github
- - Merge fholgado/minibufexpl.vim#57 -- By hfs@github
- - Fix techlivezheng/vim-plugin-minibufexpl#10
-
- * Fix a bug that a buffer with no name would be force closed.
- (c06f82d)
-
- - Fix fholgado/minibufexpl.vim#47
- - Fix fholgado/minibufexpl.vim#79
-
- * Fix a bug that switching between buffers is unfunctional when
- 'g:miniBufExplShowBufNumbers' is set to 0.
- (51fb73c,40ffb01)
-
- - Fix fholgado/minibufexpl.vim#49
- - Merge fholgado/minibufexpl.vim#69
-
- * Make Powerline plugin be happy with MBE.
- (9410d5c,7584a7a)
-
- - Fix fholgado/minibufexpl.vim#50
- - Partially merge fholgado/minibufexpl.vim#64 -- By s5unty@github
-
- * Cooperate with Windows machine.
-
- - Fix fholgado/minibufexpl.vim#51
- - Fix fholgado/minibufexpl.vim#70
- - Fix fholgado/minibufexpl.vim#74
-
- * Handle buffers without a name correctly.
- (8fad45b)
-
- - Fix fholgado/minibufexpl.vim#54
- - Fix techlivezheng/vim-plugin-minibufexpl#1
-
- * No startup on diff mode.
- (391a9b2,ff9fcfe)
-
- - Merge fholgado/minibufexpl.vim#55 -- By dccmx@github
-
- * Fix focusing current buffer in vsplit MBE window.
- (917d4dc)
-
- - Merge fholgado/minibufexpl.vim#56 -- By tyamaz@github
-
- * Suppress "-- no lines in buffer --" message.
- (dcec2d1)
-
- - Merge fholgado/minibufexpl.vim#58 -- By tyamaz@github
-
- * Respect user's 'updatetime' setting, only change it when instructed
- and the original setting is not changed.
- (c99ea42,87543bc)
-
- - Fix fholgado/minibufexpl.vim#59
- - Fix fholgado/minibufexpl.vim#62
-
- * MBE buffer now has its filetype set to 'minibufexpl'.
- (02c1fa8)
-
- - Fix fholgado/minibufexpl.vim#60.
-
- * Fix bufname('%') and bufnr('%') mixing up.
- (984cffb,dd2124d,b2c692e)
-
- - Merge fholgado/minibufexpl.vim#63 -- By doublemarked@github
-
- * Toggle MBE will not affect the size of the currently opened windows.
- (bb1d90e)
-
- - Fix fholgado/minibufexpl.vim#80
-
- * Fix for &winminheight setting
- (731fca2,879c1f5)
-
- - Merge fholgado/minibufexpl.vim#81 -- By zhaocai@github
-
- * Set syntax on FileType event
- (0985c01)
-
- - Fix techlivezheng/vim-plugin-minibufexpl#3.
-
- * Fix a wrongly defined highlight group
- (572346d,452265c,fd6992a,43a019a)
-
- - Fix techlivezheng/vim-plugin-minibufexpl#4
-
- * Add the ability to manually control the start of MBE
- (f921a35)
-
- - Fix techlivezheng/vim-plugin-minibufexpl#5
-
- * Make MBE window temporarily modifiable during the resizing
- (08c9c4a,88e3924)
-
- - Fix techlivezheng/vim-plugin-minibufexpl#6
- - Merge techlviezheng/vim-plugin-minibufexpl#8 -- By whitelynx@github
-
- * Open MBE manually will ignore 'g:miniBufExplBuffersNeeded'.
- (8ac7f45)
-
- * Annoying "No Lines in Buffer" messages have been suppressed.
- (0126c7fc,f6f654d)
-
- * If a MBE buffer already exists, it will be used instead of creating
- a new one.
- (3153ffd)
-
- * MBE window is local to tab page. Open or close MBE window in one
- tab page would not interfere another.
- (b8deb38,7247d52)
-
- * Fix a bug that color highlighting gets lost in MBE window.
- (e5e6d15,362f2d8)
-
- * Auto updating will run inside any window if a buffers gets deleted.
- (5d6e445)
-
- * Open buffer in MBE will try to use the previous window first, then
- the next normal window.
- (4f9c957)
-
- * If the eligible buffers requirement has been meet, closing MBE will
- disable auto updating.
- (876b771)
-
-6.4.4
- - Set up proper documentation. Thanks to Claytron :)
- - Fix colorcolumn feature detection. Thanks to sandaya :)
- - MBE now ignores buffers with empty name. Thanks to Folke
- for the pull :)
- - Fix incompatibility with tildes in filenames. Thanks to
- future for the pull :)
-
-6.4.3
- - Fix MBE losing highlighting when a buffer is closed.
- Thanks to Markus Koller for the pull request!
- - Disable spellcheck on MBE buffer.
- - Don't use colorcolumn setting on MBE buffer. Thanks to
- grassofhust for the pull requests for this and the
- previous issue!
-
-6.4.2
- - Moving current build out of beta. Getting ready for a
- re-write!
-
-6.4.1b5
- - Allow users to turn off Buffer number display on explorer
- tabs courtesy of jmatraszek.
- - Allow users to turn off duplicate buffer name checking
- to speed up MBE buffer switching. We are working on
- optimizing this feature so that it is usable even with
- many buffers open.
- - Set Shellslash fix for Windows users so that duplicate
- buffer name checking works properly.
- - Re-enable syntax highlighting after cycling the buffer
- courtesy of Sontek.
- - Fix erratic :q behavior when MBE is the last buffer
- courtesy of Moopet.
-
-6.4.1b4
- - Finally figured out how to turn off parentheses
- matching for the MBE buffer, which solves a couple of
- annoying graphical glitches. Thanks to Thomas Egreger
- for the patch!
- - Added a temporary fix for the issues with MBE and
- FuzzyFinder thanks to toupeira.
-
-6.4.1b2
- - Fixed Dupe File Name checking function to prevent some
- errors and actually work properly!
-
-6.4.1b1
- - Added handler function to only update MBE on changes.
-
-6.4.0
- - Added Emacs-like 'uniquify' feature where MBE will
- show a parent directory when there are 2 buffers with
- the same filename. Example: There are 2 buffers, one
- is /ProjectA/Application/CSS/style.css and
- /ProjectB/Applications/CSS/style.css. Originally, MBE
- would just display 'style.css' for both buffers. Now,
- MBE crawls up the directory tree to find the first
- differentiating parent directory for both buffers, so
- MBE will show 'ProjectA/style.css' and
- 'ProjectB/style.css' for each buffer name.
- - Now setting winfixheight and winfixwidth for the MBE
- buffer so that it does not get resized automatically
- by window resizing commands such as 'CTRL W='.
-
-6.3.7
- - MBE now uses it's own status line format to reduce the
- amount of visual clutter. This can be customized.
-
-6.3.6
- - MBE now updates current buffer's status on buffer save
- and when a buffer is modified. Patched by Federico
- Holgado (fholgado at gmail dot com).
-
-6.3.5
- - Added highlighting for currently active buffer.
- Patched by Federico Holgado (fholgado at gmail dot
- com).
-
-6.3.4
- - Now returns to augroup NONE after setting augroup
- commands. Big thanks to Maciej Laszcz for the bug
- report!
-
-6.3.3
- - Added additional keybindings. In addition to <TAB> and
- <S-TAB>, l and h can now be used. In addition to <CR>,
- and e can now be used.
- - You can open the selected buffer in a new split window
- by pressing s while in the minibufexplorer window.
- - You can open the selected buffer in a new vertically
- split window while pressing v while in the
- minibufexplorer window. Patched by Oliver Uvman.
-
-6.3.2
- - For some reason there was still a call to StopExplorer
- with 2 params. Very old bug. I know I fixed before,
- any way many thanks to Jason Mills for reporting this!
-
-6.3.1
- - Include folds in source so that it's easier to
- navigate.
- - Added g:miniBufExplForceSyntaxEnable setting for folks
- that want a :syntax enable to be called when we enter
- buffers. This can resolve issues caused by a Vim bug
- where buffers show up without highlighting when another
- buffer has been closed, quit, wiped or deleted.
-
-6.3.0
- - Added an option to allow single click (rather than
- the default double click) to select buffers in the
- MBE window. This feature was requested by AW Law
- and was inspired by taglist.vim. Note that you will
- need the latest version of taglist.vim if you want to
- use MBE and taglist both with singleclick turned on.
- Also thanks to AW Law for pointing out that you can
- make an Explorer not be listed in a standard :ls.
- - Added the ability to have your tabs show up in a
- vertical window rather than the standard horizontal
- one. Just let g:miniBufExplVSplit = <width> in your
- .vimrc and your will get this functionality.
- - If you use the vertical explorer and you want it to
- autosize then let g:miniBufExplMaxSize = <max width>
- in your .vimrc. You may use the MinSize letting in
- addition to the MaxLetting if you don't want a super
- thin window.
- - g:miniBufExplMaxHeight was renamed g:miniBufExplMaxSize
- g:miniBufExplMinHeight was renamed g:miniBufExplMinSize
- the old settings are backwards compatible if you don't
- use the new settings, but they are depreciated.
-
-6.2.8
- - Add an option to stop MBE from targeting non-modifiable
- buffers when switching buffers. Thanks to AW Law for
- the inspiration for this. This may not work if a user
- has lots of explorer/help windows open.
-
-6.2.7
- - Very minor bug fix for people who want to set
- loaded_minibufexplorer in their .vimrc in order to
- stop MBE from loading. 99.99% of users do not need
- this update.
-
-6.2.6
- - Moved history to end of source file
- - Updated highlighting documentation
- - Created global commands MBEbn and MBEbp that can be
- used in mappings if folks want to cycle buffers while
- skipping non-eligible buffers.
-
-6.2.5
- - Added <Leader>mbt key mapping which will toggle
- the MBE window. I map this to F3 in my .vimrc
- with "map <F3> :TMiniBufExplorer<CR>" which
- means I can easily close the MBE window when I'm
- not using it and get it back when I want it.
- - Changed default debug mode to 3 (write to global
- g:miniBufExplDebugOutput)
- - Made a pass through the documentation to clarify
- serveral issues and provide more complete docs
- for mappings and commands.
-
-6.2.4
- - Because of the autocommand switch (see 6.2.0) it
- was possible to remove the restriction on the
- :set hidden option. It is now possible to use
- this option with MBE.
-
-6.2.3
- - Added miniBufExplTabWrap option. It is turned
- off by default. When turned on spaces are added
- between tabs and gq} is issued to perform line
- formatting. This won't work very well if filenames
- contain spaces. It would be pretty easy to write
- my own formatter, but I'm too lazy, so if someone
- really needs that feature I'll add it :)
-
-6.2.2
- - Changed the way the g:miniBufExplorerMoreThanOne
- global is handled. You can set this to the number
- of eligible buffers you want to be loaded before
- the MBE window is loaded. Setting it to 0 causes
- the MBE window to be opened even if there are no
- buffers. Setting it to 4 causes the window to stay
- closed until the 4th eligible buffer is loaded.
- - Added a MinHeight option. This is nice if you want
- the MBE window to always take the same amount of
- space. For example set MaxSize and MinSize to 2
- and set MoreThanOne to 0 and you will always have
- a 2 row (plus the ruler :) MBE window.
- NOTE: in 6.3.0 we started using MinSize instead of
- Minheight. This will still work if MinSize is not
- specified, but it is depreciated. Use MinSize instead.
- - I now setlocal foldcolumn=0 and nonumber in the MBE
- window. This is for those of you that like to have
- these options turned on locally. I'm assuming no one
- out there wants foldcolumns and line numbers in the
- MBE window? :)
- - Fixed a bug where an empty MBE window was taking half
- of the screen (partly why the MinHeight option was
- added.)
-
-6.2.1
- - If MBE is the only window (because of :bd for example)
- and there are still eligible buffers then one of them
- will be displayed.
- - The <Leader>mbe mapping now highlights the buffer from
- the current window.
- - The delete ('d') binding in the MBE window now restors
- the cursor position, which can help if you want to
- delete several buffers in a row that are not at the
- beginning of the buffer list.
- - Added a new key binding ('p') in the MBE window to
- switch to the previous window (last edit window)
-
-6.2.0
- - Major overhaul of autocommand and list updating code,
- we now have much better handling of :bd (which is the
- most requested feature.) As well as resolving other
- issues where the buffer list would not be updated
- automatically. The old version tried to trap specific
- events, this one just updates frequently, but it keeps
- track and only changes the screen if there has been
- a change.
- - Added g:miniBufExplMaxHeight variable so you can keep
- the -MiniBufExplorer- window small when you have lots
- of buffers (or buffers with long names :)
- NOTE: in 6.3.0 we started using MaxSize instead of
- MaxHeight. This will still work if MaxSize is not
- specified, but it is depreciated. Use MaxSize instead.
- - Improvement to internal syntax highlighting code
- I renamed the syntax group names. Anyone who has
- figured out how to use them already shouldn't have
- any trouble with the new Nameing :)
- - Added debug mode 3 which writes to a global variable
- this is fast and doesn't mess with the buffer/window
- lists.
-
-6.1.0
- - <Leader>mbc was failing because I was calling one of
- my own functions with the wrong number of args. :(
- Thanks to Gerry Patterson for finding this!
- This code is very stable (although it has some
- idiocyncracies.)
-
-6.0.9
- - Double clicking tabs was overwriting the clipboard
- register on MS Windows. Thanks to Shoeb Bhinderwala
- for reporting this issue.
-
-6.0.8
- - Apparently some Vim builds are having a hard time with
- line continuation in scripts so the few that were here
- have been removed.
- - Generalized FindExplorer and FindCreateExplorer so
- that they can be used for the debug window. Renaming
- to FindWindow and FindCreateWindow.
- - Updated debugging code so that debug output is put into
- a buffer which can then be written to disk or emailed
- to me when someone is having a major issue. Can also
- write directly to a file (VERY SLOWLY) on UNIX or Win32
- (not 95 or 98 at the moment) or use Vim's echo function
- to display the output to the screen.
- - Several people have had issues when the hidden option
- is turned on. So I have put in several checks to make
- sure folks know this if they try to use MBE with this
- option set.
-
-6.0.7
- - Handling BufDelete autocmd so that the UI updates
- properly when using :bd (rather than going through
- the MBE UI.)
- - The AutoUpdate code will now close the MBE window when
- there is a single eligible buffer available.
- This has the useful side effect of stopping the MBE
- window from blocking the Vim session open when you close
- the last buffer.
- - Added functions, commands and maps to close & update
- the MBE window (<leader>mbc and <leader>mbu.)
- - Made MBE open/close state be sticky if set through
- StartExplorer(1) or StopExplorer(1), which are
- called from the standard mappings. So if you close
- the mbe window with \mbc it won't be automatically
- opened again unless you do a \mbe (or restart Vim).
- - Removed spaces between "tabs" (even more mini :)
- - Simplified MBE tab processing
-
-6.0.6
- - Fixed register overwrite bug found by Sébastien Pierre
-
-6.0.5
- - Fixed an issue with window sizing when we run out of
- buffers.
- - Fixed some weird commenting bugs.
- - Added more optional fancy window/buffer navigation:
- - You can turn on the capability to use control and the
- arrow keys to move between windows.
- - You can turn on the ability to use <C-TAB> and
- <C-S-TAB> to open the next and previous (respectively)
- buffer in the current window.
- - You can turn on the ability to use <C-TAB> and
- <C-S-TAB> to switch windows (forward and backwards
- respectively.)
-
-6.0.4
- - Added optional fancy window navigation:
- - Holding down control and pressing a Vim direction
- [hjkl] will switch windows in the indicated direction.
-
-6.0.3
- - Changed buffer name to -MiniBufExplorer- to resolve
- Issue in filename pattern matching on Windows.
-
-6.0.2
- - 2 Changes requested by Suresh Govindachar:
- - Added SplitToEdge option and set it on by default
- - Added tab and shift-tab mappings in [MBE] window
-
-6.0.1
- - Added MoreThanOne option and set it on by default
- MiniBufExplorer will not automatically open until
- more than one eligible buffers are opened. This
- reduces clutter when you are only working on a
- single file.
- NOTE: See change log for 6.2.2 for more details about
- this feature
-
-6.0.0
- - Initial Release on November 20, 2001
-
-==============================================================================
-vim: ft=help tw=78 cc=79 et ts=8 sw=4 sts=4
diff --git a/.vim/available_plugins/minibufexpl/plugin/minibufexpl.vim b/.vim/available_plugins/minibufexpl/plugin/minibufexpl.vim
deleted file mode 100755
index e2b3348..0000000
--- a/.vim/available_plugins/minibufexpl/plugin/minibufexpl.vim
+++ /dev/null
@@ -1,2467 +0,0 @@
-" Mini Buffer Explorer <minibufexpl.vim>
-"
-" HINT: Type zR if you don't know how to use folds
-"
-" Script Info and Documentation {{{
-"=============================================================================
-" Copyright: Copyright (C) 2002 & 2003 Bindu Wavell
-" Copyright (C) 2010 Oliver Uvman
-" Copyright (C) 2010 Danielle Church
-" Copyright (C) 2010 Stephan Sokolow
-" Copyright (C) 2010 & 2011 Federico Holgado
-" Permission is hereby granted to use and distribute this code,
-" with or without modifications, provided that this copyright
-" notice is copied with it. Like anything else that's free,
-" minibufexpl.vim is provided *as is* and comes with no
-" warranty of any kind, either expressed or implied. In no
-" event will the copyright holder be liable for any damamges
-" resulting from the use of this software.
-"
-" Name Of File: minibufexpl.vim
-" Description: Mini Buffer Explorer Vim Plugin
-" Documentation: See minibufexpl.txt
-"
-"=============================================================================
-" }}}
-"
-" Startup Check
-"
-" Has this plugin already been loaded? {{{
-"
-if exists('loaded_minibufexplorer')
- finish
-endif
-let loaded_minibufexplorer = 1
-
-" }}}
-"
-" Mappings and Commands
-"
-" MBE commands {{{
-"
-if !exists(':MiniBufExplorer')
- command! MiniBufExplorer echoe 'MiniBufExplorer is depreciated, please use MBEOpen instead.'
-endif
-if !exists(':CMiniBufExplorer')
- command! CMiniBufExplorer echoe 'CMiniBufExplorer is depreciated, please use MBEClose instead.'
-endif
-if !exists(':TMiniBufExplorer')
- command! TMiniBufExplorer echoe 'TMiniBufExplorer is depreciated, please use MBEToggle instead.'
-endif
-if !exists(':MBEFocus')
- command! MBEFocus call <SID>FocusExplorer()
-endif
-if !exists(':MBEFocusAll')
- command! MBEFocusAll tabdo call <SID>FocusExplorer()
-endif
-if !exists(':MBEOpen')
- command! -bang MBEOpen let t:skipEligibleBuffersCheck = 1 | if '<bang>' == '!' | call <SID>StopExplorer(0) | endif | call <SID>StartExplorer(bufnr("%"))
-endif
-if !exists(':MBEOpenAll')
- command! -bang MBEOpenAll tabdo let t:skipEligibleBuffersCheck = 1 | if '<bang>' == '!' | call <SID>StopExplorer(0) | endif | call <SID>StartExplorer(bufnr("%")) | let s:TabsMBEState = 1
-endif
-if !exists(':MBEClose')
- command! -bang MBEClose let t:skipEligibleBuffersCheck = 0 | call <SID>StopExplorer('<bang>' == '!')
-endif
-if !exists(':MBECloseAll')
- command! -bang MBECloseAll tabdo let t:skipEligibleBuffersCheck = 0 | call <SID>StopExplorer('<bang>' == '!') | let s:TabsMBEState = 0
-endif
-if !exists(':MBEToggle')
- command! -bang MBEToggle call <SID>ToggleExplorer(0,'<bang>'=='!')
-endif
-if !exists(':MBEToggleAll')
- command! -bang MBEToggleAll call <SID>ToggleExplorer(1,'<bang>'=='!')
-endif
-if !exists(':MBEToggleMRU')
- command! -bang MBEToggleMRU call <SID>ToggleMRU()
-endif
-if !exists(':MBEToggleMRUAll')
- command! -bang MBEToggleMRUAll tabdo call <SID>ToggleMRU()
-endif
-if !exists(':MBEbn')
- command! MBEbn call <SID>CycleBuffer(1)
-endif
-if !exists(':MBEbp')
- command! MBEbp call <SID>CycleBuffer(0)
-endif
-if !exists(':MBEbf')
- command! MBEbf call <SID>CycleBuffer(1,1)
-endif
-if !exists(':MBEbb')
- command! MBEbb call <SID>CycleBuffer(0,1)
-endif
-if !exists(':MBEbd')
- command! -bang -nargs=* MBEbd call <SID>DeleteBuffer(0,'<bang>'=='!',<f-args>)
-endif
-if !exists(':MBEbw')
- command! -bang -nargs=* MBEbw call <SID>DeleteBuffer(1,'<bang>'=='!',<f-args>)
-endif
-if !exists(':MBEbun')
- command! -bang -nargs=* MBEbun call <SID>DeleteBuffer(2,'<bang>'=='!',<f-args>)
-endif
-
-" }}}
-"
-" Global Configuration Variables - Depreciated
-"
-" {{{
-if exists('g:miniBufExplSplitBelow')
- let g:miniBufExplBRSplit = g:miniBufExplSplitBelow
-endif
-
-if exists('g:miniBufExplMaxHeight')
- let g:miniBufExplMaxSize = g:miniBufExplMaxHeight
-endif
-
-if exists('g:miniBufExplMinHeight')
- let g:miniBufExplMinSize = g:miniBufExplMinHeight
-endif
-
-if exists('g:miniBufExplorerMoreThanOne')
- let g:miniBufExplBuffersNeeded = g:miniBufExplorerMoreThanOne
-endif
-
-if exists('g:miniBufExplorerAutoStart')
- let g:miniBufExplAutoStart = g:miniBufExplorerAutoStart
-endif
-
-if exists('g:miniBufExplorerDebugMode')
- let g:miniBufExplDebugMode = g:miniBufExplorerDebugMode
-endif
-
-if exists('g:miniBufExplorerDebugLevel')
- let g:miniBufExplDebugLevel = g:miniBufExplorerDebugLevel
-endif
-
-if exists('g:miniBufExplorerDebugOutput')
- let g:miniBufExplDebugOutput = g:miniBufExplorerDebugOutput
-endif
-
-if exists('g:miniBufExplorerHideWhenDiff')
- let g:miniBufExplHideWhenDiff = g:miniBufExplorerHideWhenDiff
-endif
-
-" }}}
-"
-" Global Configuration Variables
-"
-" Start MBE automatically ? {{{
-"
-if !exists('g:miniBufExplAutoStart')
- let g:miniBufExplAutoStart = 1
-endif
-
-" }}}
-" Debug Mode {{{
-"
-" 0 = debug to a window
-" 1 = use vim's echo facility
-" 2 = write to a file named MiniBufExplorer.DBG
-" in the directory where vim was started
-" THIS IS VERY SLOW
-" 3 = Write into g:miniBufExplDebugOutput
-" global variable [This is the default]
-if !exists('g:miniBufExplDebugMode')
- let g:miniBufExplDebugMode = 3
-endif
-
-" }}}
-" Debug Level {{{
-"
-" 0 = no logging
-" 1=5 = errors ; 1 is the most important
-" 5-9 = info ; 5 is the most important
-" 10 = Entry/Exit
-if !exists('g:miniBufExplDebugLevel')
- let g:miniBufExplDebugLevel = 1
-endif
-
-" }}}
-" Stop auto starting MBE in diff mode? {{{
-if !exists('g:miniBufExplHideWhenDiff')
- let g:miniBufExplHideWhenDiff = 0
-endif
-
-" }}}
-" MoreThanOne? {{{
-" Display Mini Buf Explorer when there are 'More Than One' eligible buffers
-"
-if !exists('g:miniBufExplBuffersNeeded')
- let g:miniBufExplBuffersNeeded = 2
-endif
-
-" }}}
-" Set the updatetime? {{{
-if !exists('g:miniBufExplSetUT')
- let g:miniBufExplSetUT = 1
-endif
-
-" }}}
-" Horizontal or Vertical explorer? {{{
-" For folks that like vertical explorers, I'm caving in and providing for
-" veritcal splits. If this is set to 0 then the current horizontal
-" splitting logic will be run. If however you want a vertical split,
-" assign the width (in characters) you wish to assign to the MBE window.
-"
-if !exists('g:miniBufExplVSplit')
- let g:miniBufExplVSplit = 0
-endif
-
-" }}}
-" Split below/above/left/right? {{{
-" When opening a new -MiniBufExplorer- window, split the new windows below or
-" above the current window? 1 = below, 0 = above.
-"
-if !exists('g:miniBufExplBRSplit')
- let g:miniBufExplBRSplit = g:miniBufExplVSplit ? &splitright : &splitbelow
-endif
-
-" }}}
-" Split to edge? {{{
-" When opening a new -MiniBufExplorer- window, split the new windows to the
-" full edge? 1 = yes, 0 = no.
-"
-if !exists('g:miniBufExplSplitToEdge')
- let g:miniBufExplSplitToEdge = 1
-endif
-
-" }}}
-" MaxSize {{{
-" Same as MaxHeight but also works for vertical splits if specified with a
-" vertical split then vertical resizing will be performed. If left at 0
-" then the number of columns in g:miniBufExplVSplit will be used as a
-" static window width.
-if !exists('g:miniBufExplMaxSize')
- let g:miniBufExplMaxSize = 0
-endif
-
-" }}}
-" MinSize {{{
-" Same as MinHeight but also works for vertical splits. For vertical splits,
-" this is ignored unless g:miniBufExplMax(Size|Height) are specified.
-if !exists('g:miniBufExplMinSize')
- let g:miniBufExplMinSize = 1
-endif
-
-" }}}
-" TabWrap? {{{
-" By default line wrap is used (possibly breaking a tab name between two
-" lines.) Turning this option on (setting it to 1) can take more screen
-" space, but will make sure that each tab is on one and only one line.
-"
-if !exists('g:miniBufExplTabWrap')
- let g:miniBufExplTabWrap = 0
-endif
-
-" }}}
-" ShowBufNumber? {{{
-" By default buffers' numbers are shown in MiniBufExplorer. You can turn it off
-" by setting this option to 0.
-"
-if !exists('g:miniBufExplShowBufNumbers')
- let g:miniBufExplShowBufNumbers = 1
-endif
-
-" }}}
-" Single/Double Click? {{{
-" flag that can be set to 1 in a users .vimrc to allow
-" single click switching of tabs. By default we use
-" double click for tab selection.
-"
-if !exists('g:miniBufExplUseSingleClick')
- let g:miniBufExplUseSingleClick = 0
-endif
-
-" }}}
-" Close on Select? {{{
-" Flag that can be set to 1 in a users .vimrc to hide
-" the explorer when a user selects a buffer.
-"
-if !exists('g:miniBufExplCloseOnSelect')
- let g:miniBufExplCloseOnSelect = 0
-endif
-
-" }}}
-" Status Line Text for MBE window {{{
-"
-if !exists('g:miniBufExplStatusLineText')
- let g:miniBufExplStatusLineText = "-MiniBufExplorer-"
-endif
-
-" }}}
-" How to sort the buffers in MBE window {{{
-"
-if !exists('g:miniBufExplSortBy')
- let g:miniBufExplSortBy = "number"
-endif
-
-" }}}
-" Should buffer be cycled arround if hits the begining or the end while {{{
-" using MBE's buffer movement commands.
-"
-if !exists('g:miniBufExplCycleArround')
- let g:miniBufExplCycleArround = 0
-endif
-
-" }}}
-"
-" Variables used internally
-"
-" Script/Global variables {{{
-" In debug mode 3 this variable will hold the debug output
-let g:miniBufExplDebugOutput = ''
-
-" check to see what platform we are in
-if (has('unix'))
- let s:PathSeparator = '/'
-else
- let s:PathSeparator = '\'
-endif
-
-" Variable used to count debug output lines
-let s:debugIndex = 0
-
-" Variable used to pass maxTabWidth info between functions
-let s:maxTabWidth = 0
-
-" Variable used as a mutex to indicate the current state of MBEToggleAll
-let s:TabsMBEState = 0
-
-" List for all eligible buffers
-let s:BufList = []
-
-" List for tracking order of the buffer entering
-let s:MRUList = []
-
-" Whether MRU List should be updated.
-let s:MRUEnable = 1
-
-" Dictionary used to keep track of the modification state of buffers
-let s:bufStateDict = {}
-
-" Global used to store the buffer list so that we don't update the MBE
-" unless the list has changed.
-let s:miniBufExplBufList = ''
-
-" Variable used as a mutex so that AutoUpdates would not get nested.
-let s:miniBufExplInAutoUpdate = 0
-
-" Dictionary used to keep track of the names we have seen.
-let s:bufNameDict = {}
-
-" Dictionary used to map buffer numbers to names when the buffer
-" names are not unique.
-let s:bufUniqNameDict = {}
-
-" Dictionary used to hold the path parts for each buffer
-let s:bufPathDict = {}
-
-" Dictionary used to hold the path signature index for each buffer
-let s:bufPathSignDict = {}
-
-" We start out with this off for startup, but once vim is running we
-" turn this on. This prevent any BufEnter event from being triggered
-" before VimEnter event.
-let t:miniBufExplAutoUpdate = 0
-
-" If MBE was opened manually, then we should skip eligible buffers checking,
-" open MBE window no matter what value 'g:miniBufExplBuffersNeeded' is set.
-let t:skipEligibleBuffersCheck = 0
-
-" The order of buffer listing in MBE window is tab dependently.
-let t:miniBufExplSortBy = g:miniBufExplSortBy
-
-" }}}
-"
-" Auto Commands
-"
-" Setup an autocommand group and some autocommands {{{
-" that keep our explorer updated automatically.
-"
-
-" Set a lower value to 'updatetime' for the CursorHold/CursorHoldI event, so
-" that the MBE could be updated in time. It can not be set too low, otherwise
-" might breaks many things, 1500ms should be a reasonable value.
-" We only change it if we are allowed to and it has not been changed yet.
-if g:miniBufExplSetUT && &ut == 4000
- set updatetime=1500
-endif
-
-augroup MiniBufExpl
- autocmd!
- autocmd VimEnter * nested call <SID>VimEnterHandler()
- autocmd TabEnter * nested call <SID>TabEnterHandler()
- autocmd BufAdd * call <SID>BufAddHandler()
- autocmd BufEnter * nested call <SID>BufEnterHandler()
- autocmd BufDelete * call <SID>BufDeleteHandler()
- autocmd CursorHold,CursorHoldI,BufWritePost *
- \ call <SID>DEBUG('Entering UpdateBufferStateDict AutoCmd', 10) |
- \ call <SID>UpdateBufferStateDict(bufnr("%"),0) |
- \ call <SID>DEBUG('Leaving UpdateBufferStateDict AutoCmd', 10)
-if exists('##QuitPre')
- autocmd QuitPre *
- \ if <SID>NextNormalWindow() == -1 | call <SID>StopExplorer(0) | endif
-else
- autocmd BufEnter * nested call <SID>QuitIfLastOpen()
-endif
- autocmd FileType minibufexpl call <SID>RenderSyntax()
-augroup END
-
-function! <SID>VimEnterHandler()
- call <SID>DEBUG('Entering VimEnter Handler', 10)
-
- " Build initial MRUList.
- " This makes sure all the files specified on the command
- " line are picked up correctly.
- let s:BufList = range(1, bufnr('$'))
- let s:MRUList = range(1, bufnr('$'))
-
- for l:i in s:BufList
- if <SID>IsBufferIgnored(l:i)
- call <SID>ListPop(s:BufList,l:i)
- endif
- endfor
-
- for l:i in s:MRUList
- if <SID>IsBufferIgnored(l:i)
- call <SID>ListPop(s:MRUList,l:i)
- endif
- endfor
-
- if g:miniBufExplHideWhenDiff!=1 || !&diff
- let t:miniBufExplAutoUpdate = 1
- endif
-
- if g:miniBufExplAutoStart && t:miniBufExplAutoUpdate == 1
- \ && (t:skipEligibleBuffersCheck == 1 || <SID>HasEligibleBuffers() == 1)
- call <SID>StartExplorer(bufnr("%"))
-
- " Let the MBE open in the new tab
- let s:TabsMBEState = 1
- endif
-
- call <SID>DEBUG('Leaving VimEnter Handler', 10)
-endfunction
-
-function! <SID>TabEnterHandler()
- call <SID>DEBUG('Entering TabEnter Handler', 10)
-
- if !exists('t:miniBufExplSortBy')
- let t:miniBufExplSortBy = g:miniBufExplSortBy
- endif
-
- if !exists('t:miniBufExplAutoUpdate')
- let t:miniBufExplAutoUpdate = s:TabsMBEState
- endif
-
- if !exists('t:skipEligibleBuffersCheck')
- let t:skipEligibleBuffersCheck = 0
- endif
-
- if g:miniBufExplAutoStart && t:miniBufExplAutoUpdate == 1
- \ && (t:skipEligibleBuffersCheck == 1 || <SID>HasEligibleBuffers() == 1)
- call <SID>StartExplorer(bufnr("%"))
- endif
-
- call <SID>DEBUG('Leaving TabEnter Handler', 10)
-endfunction
-
-function! <SID>BufAddHandler()
- call <SID>DEBUG('Entering BufAdd Handler', 10)
-
- call <SID>ListAdd(s:BufList,str2nr(expand("<abuf>")))
- call <SID>ListAdd(s:MRUList,str2nr(expand("<abuf>")))
-
- call <SID>UpdateAllBufferDicts(expand("<abuf>"),0)
-
- call <SID>AutoUpdate(bufnr("%"),0)
-
- call <SID>DEBUG('Leaving BufAdd Handler', 10)
-endfunction
-
-function! <SID>BufEnterHandler() abort
- call <SID>DEBUG('Entering BufEnter Handler', 10)
-
- for l:i in s:BufList
- if <SID>IsBufferIgnored(l:i)
- call <SID>ListPop(s:BufList,l:i)
- endif
- endfor
-
- for l:i in s:MRUList
- if <SID>IsBufferIgnored(l:i)
- call <SID>ListPop(s:MRUList,l:i)
- endif
- endfor
-
- call <SID>AutoUpdate(bufnr("%"),0)
-
- call <SID>DEBUG('Leaving BufEnter Handler', 10)
-endfunction
-
-function! <SID>BufDeleteHandler()
- call <SID>DEBUG('Entering BufDelete Handler', 10)
-
- call <SID>ListPop(s:BufList,str2nr(expand("<abuf>")))
- call <SID>ListPop(s:MRUList,str2nr(expand("<abuf>")))
-
- call <SID>UpdateAllBufferDicts(expand("<abuf>"),1)
-
- " Handle ':bd' command correctly
- if (bufname('%') == '-MiniBufExplorer-' && <SID>NextNormalWindow() == -1 && len(s:BufList) > 0)
- if(tabpagenr('$') == 1)
- setlocal modifiable
- resize
- exec 'noautocmd sb'.s:BufList[0]
- call <SID>StopExplorer(0)
- call <SID>StartExplorer(bufnr("%"))
- else
- close
- endif
- endif
-
- call <SID>AutoUpdate(bufnr("%"),1)
-
- call <SID>DEBUG('Leaving BufDelete Handler', 10)
-endfunction
-" }}}
-"
-" Functions
-"
-" RenderSyntax {{{
-"
-function! <SID>RenderSyntax()
- if has("syntax")
- syn clear
- syn match MBENormal '\[[^\]]*\]'
- syn match MBEChanged '\[[^\]]*\]+'
- syn match MBEVisibleNormal '\[[^\]]*\]\*'
- syn match MBEVisibleChanged '\[[^\]]*\]\*+'
- syn match MBEVisibleActiveNormal '\[[^\]]*\]\*!'
- syn match MBEVisibleActiveChanged '\[[^\]]*\]\*+!'
-
- "MiniBufExpl Color Examples
- " hi MBENormal guifg=#808080 guibg=fg
- " hi MBEChanged guifg=#CD5907 guibg=fg
- " hi MBEVisibleNormal guifg=#5DC2D6 guibg=fg
- " hi MBEVisibleChanged guifg=#F1266F guibg=fg
- " hi MBEVisibleActiveNormal guifg=#A6DB29 guibg=fg
- " hi MBEVisibleActiveChanged guifg=#F1266F guibg=fg
-
- if !exists("g:did_minibufexplorer_syntax_inits")
- let g:did_minibufexplorer_syntax_inits = 1
- hi def link MBENormal Comment
- hi def link MBEChanged String
- hi def link MBEVisibleNormal Special
- hi def link MBEVisibleChanged Special
- hi def link MBEVisibleActiveNormal Underlined
- hi def link MBEVisibleActiveChanged Error
- endif
-
- let b:current_syntax = "minibufexpl"
- endif
-endfunction
-
-" }}}
-" StartExplorer - Sets up our explorer and causes it to be displayed {{{
-"
-function! <SID>StartExplorer(curBufNum)
- call <SID>DEBUG('Entering StartExplorer('.a:curBufNum.')',10)
-
- call <SID>DEBUG('Current state: '.winnr().' : '.bufnr('%').' : '.bufname('%'),10)
-
- call <SID>BuildAllBufferDicts()
-
- let t:miniBufExplAutoUpdate = 1
-
- let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if l:winNum != -1
- call <SID>DEBUG('There is already a MBE window, aborting...',1)
- call <SID>DEBUG('Leaving StartExplorer()',10)
- return
- endif
-
- call <SID>CreateWindow('-MiniBufExplorer-', g:miniBufExplVSplit, g:miniBufExplBRSplit, g:miniBufExplSplitToEdge, 1, 1)
-
- let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if l:winNum == -1
- call <SID>DEBUG('Failed to create the MBE window, aborting...',1)
- call <SID>DEBUG('Leaving StartExplorer()',10)
- return
- endif
-
- " Save current window number and switch to previous
- " window before entering MBE window so that the later
- " `wincmd p` command will get into this window, then
- " we can preserve a one level window movement history.
- let l:currWin = winnr()
- call s:SwitchWindow('p',1)
-
- " Switch into MBE allowing autocmd to run will
- " make the syntax highlight in MBE window working
- call s:SwitchWindow('w',0,l:winNum)
-
- " Make sure we are in our window
- if bufname('%') != '-MiniBufExplorer-'
- call <SID>DEBUG('StartExplorer called in invalid window',1)
- call <SID>DEBUG('Leaving StartExplorer()',10)
- return
- endif
-
- " Set filetype for MBE buffer
- set filetype=minibufexpl
-
- " !!! We may want to make the following optional -- Bindu
- " New windows don't cause all windows to be resized to equal sizes
- set noequalalways
-
- " !!! We may want to make the following optional -- Bindu
- " We don't want the mouse to change focus without a click
- set nomousefocus
-
- if g:miniBufExplVSplit == 0
- setlocal wrap
- else
- setlocal nowrap
- exec 'setlocal winwidth='.g:miniBufExplMinSize
- endif
-
- " If folks turn numbering and columns on by default we will turn
- " them off for the MBE window
- setlocal foldcolumn=0
- setlocal nonumber
- if exists("&norelativenumber")
- " relativenumber was introduced in Vim 7.3 - this provides compatibility
- " for older versions of Vim
- setlocal norelativenumber
- endif
- "don't highlight matching parentheses, etc.
- setlocal matchpairs=
- "Depending on what type of split, make sure the MBE buffer is not
- "automatically rezised by CTRL + W =, etc...
- setlocal winfixheight
- setlocal winfixwidth
-
- " Set the text of the statusline for the MBE buffer. See help:stl for
- " many options
- exec 'setlocal statusline='.g:miniBufExplStatusLineText
-
- " No spell check
- setlocal nospell
-
- " Restore colorcolumn for VIM >= 7.3
- if exists("+colorcolumn")
- setlocal colorcolumn&
- end
-
- " If you press return, o or e in the -MiniBufExplorer- then try
- " to open the selected buffer in the previous window.
- nnoremap <buffer> o :call <SID>MBESelectBuffer(0)<CR>:<BS>
- nnoremap <buffer> e :call <SID>MBESelectBuffer(0)<CR>:<BS>
- nnoremap <buffer> <CR> :call <SID>MBESelectBuffer(0)<CR>:<BS>
- " If you press s in the -MiniBufExplorer- then try
- " to open the selected buffer in a split in the previous window.
- nnoremap <buffer> s :call <SID>MBESelectBuffer(1)<CR>:<BS>
- " If you press j in the -MiniBufExplorer- then try
- " to open the selected buffer in a vertical split in the previous window.
- nnoremap <buffer> v :call <SID>MBESelectBuffer(2)<CR>:<BS>
- " If you press d in the -MiniBufExplorer- then try to
- " delete the selected buffer.
- nnoremap <buffer> d :call <SID>MBEDeleteBuffer()<CR>:<BS>
- " The following allow us to use regular movement keys to
- " scroll in a wrapped single line buffer
- nnoremap <buffer> k gk
- nnoremap <buffer> j gj
- nnoremap <buffer> <up> gk
- nnoremap <buffer> <down> gj
- " The following allows for quicker moving between buffer
- " names in the [MBE] window it also saves the last-pattern
- " and restores it.
- if !g:miniBufExplShowBufNumbers
- nnoremap <buffer> l :call search('\[[^\]]*\]')<CR>:<BS>
- nnoremap <buffer> h :call search('\[[^\]]*\]','b')<CR>:<BS>
- nnoremap <buffer> <right> :call search('\[[^\]]*\]')<CR>:<BS>
- nnoremap <buffer> <left> :call search('\[[^\]]*\]','b')<CR>:<BS>
- else
- nnoremap <buffer> l :call search('\[[0-9]*:[^\]]*\]')<CR>:<BS>
- nnoremap <buffer> h :call search('\[[0-9]*:[^\]]*\]','b')<CR>:<BS>
- nnoremap <buffer> <right> :call search('\[[0-9]*:[^\]]*\]')<CR>:<BS>
- nnoremap <buffer> <left> :call search('\[[0-9]*:[^\]]*\]','b')<CR>:<BS>
- endif
-
- " Attempt to perform single click mapping
- " It would be much nicer if we could 'nnoremap <buffer> ...', however
- " vim does not fire the '<buffer> <leftmouse>' when you use the mouse
- " to enter a buffer.
- if g:miniBufExplUseSingleClick == 1
- let l:mapcmd = ':nnoremap <silent> <LEFTMOUSE> <LEFTMOUSE>'
- let l:clickcmd = ':if bufname("%") == "-MiniBufExplorer-" <bar> call <SID>MBESelectBuffer(0) <bar> endif <CR>'
- " no mapping for leftmouse
- if maparg('<LEFTMOUSE>', 'n') == ''
- exec l:mapcmd . l:clickcmd
- " we have a mapping
- else
- let l:mapcmd = l:mapcmd . substitute(substitute(maparg('<LEFTMOUSE>', 'n'), '|', '<bar>', 'g'), '\c^<LEFTMOUSE>', '', '')
- let l:mapcmd = l:mapcmd . l:clickcmd
- exec l:mapcmd
- endif
- " If you DoubleClick in the MBE window then try to open the selected
- " buffer in the previous window.
- else
- nnoremap <buffer> <2-LEFTMOUSE> :call <SID>MBESelectBuffer(0)<CR>:<BS>
- endif
-
- call <SID>BuildBufferList(a:curBufNum)
-
- call <SID>DisplayBuffers(a:curBufNum)
-
- " Switch away from MBE allowing autocmd to run which will
- " trigger PowerLine's BufLeave event handler
- call s:SwitchWindow('p',0)
-
- " Now we are in the previous window, let's enter
- " the window current window, this will preserve
- " one-level backwards window movement history.
- call s:SwitchWindow('w',1,l:currWin)
-
- call <SID>DEBUG('Leaving StartExplorer()',10)
-endfunction
-
-" }}}
-" StopExplorer - Looks for our explorer and closes the window if it is open {{{
-"
-function! <SID>StopExplorer(force)
- call <SID>DEBUG('Entering StopExplorer()',10)
-
- if a:force || <SID>HasEligibleBuffers()
- let t:miniBufExplAutoUpdate = 0
- endif
-
- let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if l:winNum == -1
- call <SID>DEBUG('There is no MBE window, aborting...',1)
- call <SID>DEBUG('Leaving StopExplorer()',10)
- return
- endif
-
- call s:SwitchWindow('w',1,l:winNum)
- silent! close
- call s:SwitchWindow('p',1)
-
- " Work around a redraw bug in gVim (Confirmed present in 7.3.50)
- if has('gui_gtk') && has('gui_running')
- redraw!
- endif
-
- call <SID>DEBUG('Leaving StopExplorer()',10)
-endfunction
-
-" }}}
-" FocusExplorer {{{
-"
-function! <SID>FocusExplorer()
- call <SID>DEBUG('Entering FocusExplorer()',10)
-
- let t:miniBufExplAutoUpdate = 1
-
- let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if l:winNum == -1
- call <SID>DEBUG('There is no MBE window, aborting...',1)
- call <SID>DEBUG('Leaving FocusExplorer()',10)
- return
- endif
-
- call s:SwitchWindow('w',0,l:winNum)
-
- call <SID>DEBUG('Leaving FocusExplorer()',10)
-endfunction
-
-" }}}
-" ToggleMRU - Switch the order of buffer listing in MBE window {{{
-" between its default and most recently used.
-"
-function! <SID>ToggleMRU()
- call <SID>DEBUG('Entering ToggleMRU()',10)
-
- if t:miniBufExplSortBy == 'number'
- let t:miniBufExplSortBy = 'mru'
- else
- let t:miniBufExplSortBy = 'number'
- endif
-
- let l:winnr = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if (l:winnr == -1)
- call <SID>DEBUG('MiniBufExplorer was not running, starting...', 9)
- call <SID>StartExplorer(bufnr('%'))
- else
- call <SID>DEBUG('Updating MiniBufExplorer...', 9)
- call <SID>UpdateExplorer(bufnr('%'))
- endif
-
- call <SID>DEBUG('Leaving ToggleMRU()',10)
-endfunction
-
-" }}}
-" ToggleExplorer - Looks for our explorer and opens/closes the window {{{
-"
-" a:tabs, 0 no, 1 yes
-" toggle MBE in all tabs
-" a:force, 0 no, 1 yes
-" reopen MBE when it is already open
-" close MBE with auto-updating disabled
-"
-function! <SID>ToggleExplorer(tabs,force)
- call <SID>DEBUG('Entering ToggleExplorer()',10)
-
- if a:tabs
- if s:TabsMBEState
- tabdo let t:skipEligibleBuffersCheck = 0 | call <SID>StopExplorer(a:force)
- else
- tabdo let t:skipEligibleBuffersCheck = 1 | if a:force | call <SID>StopExplorer(0) | endif | call <SID>StartExplorer(bufnr("%"))
- endif
- let s:TabsMBEState = !s:TabsMBEState
- else
- let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if l:winNum != -1
- let t:skipEligibleBuffersCheck = 0
- call <SID>StopExplorer(a:force)
- else
- let t:skipEligibleBuffersCheck = 1
- call <SID>StartExplorer(bufnr("%"))
- endif
- endif
-
- call <SID>DEBUG('Leaving ToggleExplorer()',10)
-endfunction
-
-" }}}
-" UpdateExplorer {{{
-"
-function! <SID>UpdateExplorer(curBufNum)
- call <SID>DEBUG('Entering UpdateExplorer('.a:curBufNum.')',10)
-
- call <SID>DEBUG('Current state: '.winnr().' : '.bufnr('%').' : '.bufname('%'),10)
-
- if !<SID>BuildBufferList(a:curBufNum)
- call <SID>DEBUG('Buffer List have not changed, aborting...',10)
- call <SID>DEBUG('Leaving UpdateExplorer()',10)
- return
- endif
-
- let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if l:winNum == -1
- call <SID>DEBUG('Found no MBE window, aborting...',1)
- call <SID>DEBUG('Leaving UpdateExplorer()',10)
- return
- endif
-
- if l:winNum != winnr()
- let l:winChanged = 1
-
- " Save current window number and switch to previous
- " window before entering MBE window so that the later
- " `wincmd p` command will get into this window, then
- " we can preserve a one level window movement history.
- let l:currWin = winnr()
- call s:SwitchWindow('p',1)
-
- " Switch into MBE allowing autocmd to run will
- " make the syntax highlight in MBE window working
- call s:SwitchWindow('w',0,l:winNum)
- endif
-
- call <SID>DisplayBuffers(a:curBufNum)
-
- if exists('l:winChanged')
- " Switch away from MBE allowing autocmd to run which will
- " trigger PowerLine's BufLeave event handler
- call s:SwitchWindow('p',0)
-
- " Now we are in the previous window, let's enter
- " the window current window, this will preserve
- " one-level backwards window movement history.
- call s:SwitchWindow('w',1,l:currWin)
- endif
-
- call <SID>DEBUG('Leaving UpdateExplorer()',10)
-endfunction
-
-" }}}
-" FindWindow - Return the window number of a named buffer {{{
-" If none is found then returns -1.
-"
-function! <SID>FindWindow(bufName, doDebug)
- if a:doDebug
- call <SID>DEBUG('Entering FindWindow('.a:bufName.','.a:doDebug.')',10)
- endif
-
- " Try to find an existing window that contains
- " our buffer.
- let l:winnr = bufwinnr(a:bufName)
-
- if l:winnr != -1
- if a:doDebug
- call <SID>DEBUG('Found window '.l:winnr.' with buffer ('.winbufnr(l:winnr).' : '.bufname(winbufnr(l:winnr)).')',9)
- endif
- else
- if a:doDebug
- call <SID>DEBUG('Can not find window with buffer ('.a:bufName.')',9)
- endif
- endif
-
- if a:doDebug
- call <SID>DEBUG('Leaving FindWindow()',10)
- endif
-
- return l:winnr
-endfunction
-
-" }}}
-" CreateWindow {{{
-"
-" vSplit, 0 no, 1 yes
-" split vertically or horizontally
-" brSplit, 0 no, 1 yes
-" split the window below/right to current window
-" forceEdge, 0 no, 1 yes
-" split the window at the edege of the editor
-" isPluginWindow, 0 no, 1 yes
-" if it is a plugin window
-" doDebug, 0 no, 1 yes
-" show debugging message or not
-"
-function! <SID>CreateWindow(bufName, vSplit, brSplit, forceEdge, isPluginWindow, doDebug)
- if a:doDebug
- call <SID>DEBUG('Entering CreateWindow('.a:bufName.','.a:vSplit.','.a:brSplit.','.a:forceEdge.','.a:isPluginWindow.','.a:doDebug.')',10)
- endif
-
- " Window number will change after creating a new window,
- " we need to save both current and previous window number
- " so that we can canculate theire correct window number
- " after the new window creating.
- let l:currWin = winnr()
- call s:SwitchWindow('p',1)
- let l:prevWin = winnr()
- call s:SwitchWindow('p',1)
-
- " Save the user's split setting.
- let l:saveSplitBelow = &splitbelow
- let l:saveSplitRight = &splitright
-
- " Set to our new values.
- let &splitbelow = a:brSplit
- let &splitright = a:brSplit
-
- let l:bufNum = bufnr(a:bufName)
-
- if l:bufNum == -1
- let l:spCmd = 'sp'
- else
- let l:spCmd = 'sb'
- endif
-
- if a:forceEdge == 1
- let l:edge = a:vSplit ? &splitright : &splitbelow
-
- if l:edge
- if a:vSplit == 0
- silent exec 'noautocmd bo '.l:spCmd.' '.a:bufName
- else
- silent exec 'noautocmd bo vert '.l:spCmd.' '.a:bufName
- endif
- else
- if a:vSplit == 0
- silent exec 'noautocmd to '.l:spCmd.' '.a:bufName
- else
- silent exec 'noautocmd to vert '.l:spCmd.' '.a:bufName
- endif
- endif
- else
- if a:vSplit == 0
- silent exec 'noautocmd '.l:spCmd.' '.a:bufName
- else
- silent exec 'noautocmd vert '.l:spCmd.' '.a:bufName
- endif
- endif
-
- " Restore the user's split setting.
- let &splitbelow = l:saveSplitBelow
- let &splitright = l:saveSplitRight
-
- " Turn off the swapfile, set the buftype and bufhidden option, so that it
- " won't get written and will be deleted when it gets hidden.
- if a:isPluginWindow
- setlocal noswapfile
- setlocal nobuflisted
- setlocal buftype=nofile
- setlocal bufhidden=delete
- endif
-
- " Canculate the correct window number, for those whose window
- " number before the creating is greater than or equal to the
- " number of the newly created window, their window number should
- " increase by one.
- let l:prevWin = l:prevWin >= winnr() ? l:prevWin + 1 : l:prevWin
- let l:currWin = l:currWin >= winnr() ? l:currWin + 1 : l:currWin
- " This will preserve one-level backwards window movement history.
- call s:SwitchWindow('w',1,l:prevWin)
- call s:SwitchWindow('w',1,l:currWin)
-
- if a:doDebug
- call <SID>DEBUG('Leaving CreateWindow()',10)
- endif
-endfunction
-
-" }}}
-" FindCreateWindow - Attempts to find a window for a named buffer. {{{
-"
-" If it is found then moves there. Otherwise creates a new window and
-" configures it and moves there.
-"
-" vSplit, 0 no, 1 yes
-" split vertically or horizontally
-" brSplit, 0 no, 1 yes
-" split the window below/right to current window
-" forceEdge, 0 no, 1 yes
-" split the window at the edege of the editor
-" isPluginWindow, 0 no, 1 yes
-" if it is a plugin window
-" doDebug, 0 no, 1 yes
-" show debugging message or not
-"
-function! <SID>FindCreateWindow(bufName, vSplit, brSplit, forceEdge, isPluginWindow, doDebug)
- if a:doDebug
- call <SID>DEBUG('Entering FindCreateWindow('.a:bufName.','.a:vSplit.','.a:brSplit.','.a:forceEdge.','.a:isPluginWindow.','.a:doDebug.')',10)
- endif
-
- " Try to find an existing explorer window
- let l:winNum = <SID>FindWindow(a:bufName, a:doDebug)
-
- " If found goto the existing window, otherwise
- " split open a new window.
- if l:winNum == -1
- if a:doDebug
- call <SID>DEBUG('Creating a new window with buffer ('.a:bufName.')',9)
- endif
-
- call <SID>CreateWindow(a:bufName, a:vSplit, a:brSplit, a:forceEdge, a:isPluginWindow, a:doDebug)
-
- " Try to find an existing explorer window
- let l:winNum = <SID>FindWindow(a:bufName, 0)
-
- if l:winNum != -1
- if a:doDebug
- call <SID>DEBUG('Created window '.l:winNum.' with buffer ('.a:bufName.')',9)
- endif
- else
- if a:doDebug
- call <SID>DEBUG('Failed to create window with buffer ('.a:bufName.').',1)
- endif
- endif
- endif
-
- if a:doDebug
- call <SID>DEBUG('Leaving FindCreateWindow()',10)
- endif
-
- return l:winNum
-endfunction
-
-" }}}
-" DisplayBuffers - Wrapper for getting MBE window shown {{{
-"
-" Makes sure we are in our explorer, then erases the current buffer and turns
-" it into a mini buffer explorer window.
-"
-function! <SID>DisplayBuffers(curBufNum)
- call <SID>DEBUG('Entering DisplayExplorer('.a:curBufNum.')',10)
-
- " Make sure we are in our window
- if bufname('%') != '-MiniBufExplorer-'
- call <SID>DEBUG('DisplayBuffers called in invalid window',1)
- return
- endif
-
- call <SID>ShowBuffers()
- call <SID>ResizeWindow()
-
- " Place cursor at current buffer in MBE
- if !<SID>IsBufferIgnored(a:curBufNum)
- if !g:miniBufExplShowBufNumbers
- call search('\V['.s:bufUniqNameDict[a:curBufNum].']', 'w')
- else
- call search('\V['.a:curBufNum.':'.s:bufUniqNameDict[a:curBufNum].']', 'w')
- endif
- endif
-
- call <SID>DEBUG('Leaving DisplayExplorer()',10)
-endfunction
-
-" }}}
-" Resize Window - Set width/height of MBE window {{{
-"
-" Makes sure we are in our explorer, then sets the height/width for our explorer
-" window so that we can fit all of our information without taking extra lines.
-"
-function! <SID>ResizeWindow()
- call <SID>DEBUG('Entering ResizeWindow()',10)
-
- " Make sure we are in our window
- if bufname('%') != '-MiniBufExplorer-'
- call <SID>DEBUG('ResizeWindow called in invalid window',1)
- call <SID>DEBUG('Leaving ResizeWindow()',10)
- return
- endif
-
- " Prevent a report of our actions from showing up.
- let l:save_rep = &report
- let l:save_sc = &showcmd
- let &report = 10000
- set noshowcmd
-
- let l:width = winwidth('.')
-
- " Horizontal Resize
- if g:miniBufExplVSplit == 0
-
- if g:miniBufExplTabWrap == 0
- let l:length = strlen(getline('.'))
- let l:height = 0
- if (l:width == 0)
- let l:height = winheight('.')
- else
- let l:height = (l:length / l:width)
- " handle truncation from div
- if (l:length % l:width) != 0
- let l:height = l:height + 1
- endif
- endif
- else
- " We need to be able to modify the buffer
- setlocal modifiable
-
- exec "setlocal textwidth=".l:width
- normal gg
- normal gq}
- normal G
- let l:height = line('.')
- normal gg
-
- " Prevent the buffer from being modified.
- setlocal nomodifiable
- endif
-
- " enforce max window height
- if g:miniBufExplMaxSize != 0
- if g:miniBufExplMaxSize < l:height
- let l:height = g:miniBufExplMaxSize
- endif
- endif
-
- " enfore min window height
- if l:height < g:miniBufExplMinSize || l:height == 0
- let l:height = g:miniBufExplMinSize
- endif
-
- call <SID>DEBUG('ResizeWindow to '.l:height.' lines',9)
-
- if &winminheight > l:height
- let l:saved_winminheight = &winminheight
- let &winminheight = 1
- exec 'resize '.l:height
- let &winminheight = l:saved_winminheight
- else
- exec 'resize '.l:height
- endif
-
- let saved_ead = &ead
- let &ead = 'ver'
- set equalalways
- let &ead = saved_ead
- set noequalalways
-
- " Vertical Resize
- else
-
- if g:miniBufExplMaxSize != 0
- let l:newWidth = s:maxTabWidth
- if l:newWidth > g:miniBufExplMaxSize
- let l:newWidth = g:miniBufExplMaxSize
- endif
- if l:newWidth < g:miniBufExplMinSize
- let l:newWidth = g:miniBufExplMinSize
- endif
- else
- let l:newWidth = g:miniBufExplVSplit
- endif
-
- if l:width != l:newWidth
- call <SID>DEBUG('ResizeWindow to '.l:newWidth.' columns',9)
- exec 'vertical resize '.l:newWidth
- endif
-
- let saved_ead = &ead
- let &ead = 'hor'
- set equalalways
- let &ead = saved_ead
- set noequalalways
-
- endif
-
- normal! zz
-
- let &report = l:save_rep
- let &showcmd = l:save_sc
-
- call <SID>DEBUG('Leaving ResizeWindow()',10)
-endfunction
-
-" }}}
-" ShowBuffers - Clear current buffer and put the MBE text into it {{{
-"
-" Makes sure we are in our explorer, then adds a list of all modifiable
-" buffers to the current buffer. Special marks are added for buffers that
-" are in one or more windows (*) and buffers that have been modified (+)
-"
-function! <SID>ShowBuffers()
- call <SID>DEBUG('Entering ShowExplorer()',10)
-
- " Make sure we are in our window
- if bufname('%') != '-MiniBufExplorer-'
- call <SID>DEBUG('ShowBuffers called in invalid window',1)
- call <SID>DEBUG('Leaving ShowBuffers()',10)
- return
- endif
-
- let l:save_rep = &report
- let l:save_sc = &showcmd
- let &report = 10000
- set noshowcmd
-
- " We need to be able to modify the buffer
- setlocal modifiable
-
- " Delete all lines in buffer.
- silent 1,$d _
-
- " Goto the end of the buffer put the buffer list
- " and then delete the extra trailing blank line
- $
- put! =s:miniBufExplBufList
- silent $ d _
-
- " Prevent the buffer from being modified.
- setlocal nomodifiable
-
- let &report = l:save_rep
- let &showcmd = l:save_sc
-
- call <SID>DEBUG('Leaving ShowBuffers()',10)
-endfunction
-
-" }}}
-" CycleBuffer - Cycle Through Buffers {{{
-"
-" Move to next or previous buffer in the current window. If there
-" are no more modifiable buffers then stay on the current buffer.
-" can be called with no parameters in which case the buffers are
-" cycled forward. Otherwise a single argument is accepted, if
-" it's 0 then the buffers are cycled backwards, otherwise they
-" are cycled forward.
-"
-function! <SID>CycleBuffer(forward,...)
- if <SID>IsBufferIgnored(bufnr('%')) == 1
- return
- endif
-
- let curBufNum = bufnr('%')
-
- if exists('a:1') && a:1 == 1
- call <SID>DEBUG('MRUList is '.string(s:MRUList),1)
- let curBufIndex = index(s:MRUList, l:curBufNum)
- call <SID>DEBUG('curBufIndex is '.l:curBufIndex,1)
- let forBufIndex = l:curBufIndex - 1 < 0 ? len(s:MRUList) - 1 : l:curBufIndex - 1
- call <SID>DEBUG('forBufIndex is '.l:forBufIndex,1)
- let bacBufIndex = l:curBufIndex + 1 >= len(s:MRUList) ? 0 : l:curBufIndex + 1
- call <SID>DEBUG('bacBufIndex is '.l:bacBufIndex,1)
-
- if a:forward
- if !g:miniBufExplCycleArround && l:curBufIndex < l:forBufIndex
- echo "You have reached the most recent buffer!"
- return
- endif
- let l:moveCmd = 'b! '.s:MRUList[l:forBufIndex]
- else
- if !g:miniBufExplCycleArround && l:curBufIndex > l:bacBufIndex
- echo "You have reached the least recent buffer!"
- return
- endif
- let l:moveCmd = 'b! '.s:MRUList[l:bacBufIndex]
- endif
-
- let s:MRUEnable = 0
- else
- call <SID>DEBUG('BufList is '.string(s:BufList),1)
- let curBufIndex = index(s:BufList, l:curBufNum)
- call <SID>DEBUG('curBufIndex is '.l:curBufIndex,1)
- let forBufIndex = l:curBufIndex + 1 >= len(s:BufList) ? 0 : l:curBufIndex + 1
- call <SID>DEBUG('forBufIndex is '.l:forBufIndex,1)
- let bacBufIndex = l:curBufIndex - 1 < 0 ? len(s:BufList) - 1 : l:curBufIndex - 1
- call <SID>DEBUG('bacBufIndex is '.l:bacBufIndex,1)
-
- if a:forward
- if !g:miniBufExplCycleArround && l:curBufIndex > l:forBufIndex
- echo "You have reached the last buffer!"
- return
- endif
- let l:moveCmd = 'b! '.s:BufList[l:forBufIndex]
- else
- if !g:miniBufExplCycleArround && l:curBufIndex < l:bacBufIndex
- echo "You have reached the first buffer!"
- return
- endif
- let l:moveCmd = 'b! '.s:BufList[l:bacBufIndex]
- endif
-
- let s:MRUEnable = 1
- endif
-
- call <SID>DEBUG('===============move cmd is '.l:moveCmd,1)
-
- " Change buffer (keeping track of before and after buffers)
- exec l:moveCmd
-
- let s:MRUEnable = 1
-endfunction
-
-" }}}
-" DeleteBuffer {{{
-"
-" Delete/Unload/Wipeout a buffer but preserve the window it was in
-"
-" a:action 0 bd, 1 bw, 2 bun
-" delete/wipeout/unload a buffer
-" a:bufNum
-" number of the buffer to be deleted
-"
-function! <SID>DeleteBuffer(action,bang,...)
- call <SID>DEBUG('Entering DeleteBuffer('.a:action.','.a:bang.')',10)
-
- if a:0 == 0
- call <SID>DEBUG('No buffer is given, use current buffer',5)
- let l:bufNums = [ bufnr('%') ]
- else
- call <SID>DEBUG('Given buffers are '.string(a:000),5)
- let l:bufNums = map(copy(a:000),'v:val =~ ''\d\+'' ? bufnr(v:val + 0) : bufnr(v:val)')
- endif
-
- call <SID>DEBUG('Buffers to be deleted are '.string(l:bufNums),5)
-
- for l:bufNum in l:bufNums
- if <SID>IsBufferIgnored(l:bufNum)
- call <SID>DEBUG('Buffer '.l:bufNum.'is not a normal buffer, skip it',5)
- continue
- endif
-
- let l:bufName = bufname(l:bufNum)
- call <SID>DEBUG('Buffer to be deleted is <'.l:bufName.'>['.l:bufNum.']',5)
-
- " Don't want auto updates while we are processing a delete
- " request.
- let l:saveAutoUpdate = t:miniBufExplAutoUpdate
- let t:miniBufExplAutoUpdate = 0
-
- " Get the currently active buffer, so we can update the MBE
- " correctly. If that is the buffer to be deleted, then get
- " the window for that buffer, so we can find which buffer
- " is in that window after the detaching.
- let l:actBuf = <SID>GetActiveBuffer()
- if l:actBuf == l:bufNum
- let l:actBufWin = bufwinnr(l:actBuf)
- endif
-
- " Detach the buffer from all the windows that holding it
- " in every tab page.
- tabdo call <SID>DetachBuffer(l:bufNum)
-
- " Find which buffer is in the active window now
- if l:actBuf == l:bufNum
- let l:actBuf = winbufnr(l:actBufWin)
- endif
-
- " Delete the buffer selected.
- call <SID>DEBUG('About to delete buffer: '.l:bufNum,5)
-
- if a:action == 2
- let l:cmd = 'bun'
- elseif a:action == 1
- let l:cmd = 'bw'
- else
- let l:cmd = 'bd'
- endif
-
- if a:bang
- let l:cmd = l:cmd.'!'
- endif
-
- let l:cmd = 'silent! '.l:cmd.' '.l:bufNum
- call <SID>DEBUG('About to execute the command "'.l:cmd.'"',5)
-
- exec l:cmd
-
- let t:miniBufExplAutoUpdate = l:saveAutoUpdate
-
- call <SID>UpdateExplorer(l:actBuf)
- endfor
-
- call <SID>DEBUG('Leaving DeleteBuffer()',10)
-endfunction
-
-" }}}
-" DetachBuffer {{{
-"
-" Detach a buffer from all the windows in which it is displayed.
-"
-function! <SID>DetachBuffer(bufNum)
- call <SID>DEBUG('Entering DetachBuffer('.a:bufNum.')',10)
-
- call <SID>DEBUG('We are currently in tab page '.tabpagenr(),10)
-
- let l:bufNum = a:bufNum + 0
-
- let l:winNum = bufwinnr(l:bufNum)
- " while we have windows that contain our buffer
- while l:winNum != -1
- call <SID>DEBUG('Buffer '.l:bufNum.' is being displayed in window: '.l:winNum,5)
-
- " move to window that contains our selected buffer
- call s:SwitchWindow('w',1,l:winNum)
-
- call <SID>DEBUG('We are now in window: '.winnr(),5)
-
- call <SID>DEBUG('Window contains buffer: '.bufnr('%').' which should be: '.l:bufNum,5)
- let l:origBuf = bufnr('%')
- call <SID>CycleBuffer(0,1)
- let l:currBuf = bufnr('%')
- call <SID>DEBUG('Window now contains buffer: '.bufnr('%').' which should not be: '.l:bufNum,5)
-
- if l:origBuf == l:currBuf
- " we wrapped so we are going to have to delete a buffer
- " that is in an open window.
- let l:winNum = -1
- else
- " see if we have anymore windows with our selected buffer
- let l:winNum = bufwinnr(l:bufNum)
- endif
- endwhile
-
- call <SID>DEBUG('Leaving DetachBuffer()',10)
-endfunction
-
-" }}}
-" IsBufferIgnored - check to see if buffer should be ignored {{{
-"
-" Returns 0 if this buffer should be displayed in the list, 1 otherwise.
-"
-function! <SID>IsBufferIgnored(buf)
- call <SID>DEBUG('Entering IsBufferIgnored('.a:buf.')',10)
-
- " Skip unlisted buffers.
- if buflisted(a:buf) == 0 || index(s:BufList,a:buf) == -1
- call <SID>DEBUG('Buffer '.a:buf.' is unlisted, ignoring...',5)
- call <SID>DEBUG('Leaving IsBufferIgnored()',10)
- return 1
- endif
-
- " Skip non normal buffers.
- if getbufvar(a:buf, "&buftype") != ''
- call <SID>DEBUG('Buffer '.a:buf.' is not normal, ignoring...',5)
- call <SID>DEBUG('Leaving IsBufferIgnored()',10)
- return 1
- endif
-
- call <SID>DEBUG('Leaving IsBufferIgnored()',10)
- return 0
-endfunction
-
-" }}}
-" BuildBufferList - Build the text for the MBE window {{{
-"
-" Creates the buffer list string and returns 1 if it is different than
-" last time this was called and 0 otherwise.
-"
-function! <SID>BuildBufferList(curBufNum)
- call <SID>DEBUG('Entering BuildBufferList('.a:curBufNum.')',10)
-
- let l:CurBufNum = a:curBufNum
-
- " Get the number of the last buffer.
- let l:NBuffers = bufnr('$')
-
- let l:tabList = []
- let l:maxTabWidth = 0
-
- " Loop through every buffer less than the total number of buffers.
- for l:i in s:BufList
- let l:BufName = expand( "#" . l:i . ":p:t")
-
- " Establish the tab's content, including the differentiating root
- " dir if neccessary
- let l:tab = '['
- if g:miniBufExplShowBufNumbers == 1
- let l:tab .= l:i.':'
- endif
- let l:tab .= s:bufUniqNameDict[l:i]
- let l:tab .= ']'
-
- " If the buffer is open in a window mark it
- if bufwinnr(l:i) != -1
- let l:tab .= '*'
- endif
-
- " If the buffer is modified then mark it
- if(getbufvar(l:i, '&modified') == 1)
- let l:tab .= '+'
- endif
-
- " If the buffer matches the)current buffer name, then mark it
- call <SID>DEBUG('l:i is '.l:i.' and l:CurBufNum is '.l:CurBufNum,10)
- if(l:i == l:CurBufNum)
- let l:tab .= '!'
- endif
-
- let l:maxTabWidth = strlen(l:tab) > l:maxTabWidth ? strlen(l:tab) : l:maxTabWidth
-
- call add(l:tabList, l:tab)
- endfor
-
- if t:miniBufExplSortBy == "name"
- call sort(l:tabList, "<SID>NameCmp")
- elseif t:miniBufExplSortBy == "mru"
- call sort(l:tabList, "<SID>MRUCmp")
- endif
-
- let l:miniBufExplBufList = ''
- for l:tab in l:tabList
- let l:miniBufExplBufList = l:miniBufExplBufList.l:tab
-
- " If horizontal and tab wrap is turned on we need to add spaces
- if g:miniBufExplVSplit == 0
- if g:miniBufExplTabWrap != 0
- let l:miniBufExplBufList = l:miniBufExplBufList.' '
- endif
- " If not horizontal we need a newline
- else
- let l:miniBufExplBufList = l:miniBufExplBufList . "\n"
- endif
- endfor
-
- if (s:miniBufExplBufList != l:miniBufExplBufList)
- let s:maxTabWidth = l:maxTabWidth
- let s:miniBufExplBufList = l:miniBufExplBufList
- call <SID>DEBUG('Leaving BuildBufferList()',10)
- return 1
- else
- call <SID>DEBUG('Leaving BuildBufferList()',10)
- return 0
- endif
-endfunction
-
-" }}}
-" CreateBufferUniqName {{{
-"
-" Construct a unique buffer name using the parts from the signature index of
-" the path.
-"
-function! <SID>CreateBufferUniqName(bufNum)
- call <SID>DEBUG('Entering CreateBufferUniqName('.a:bufNum.')',10)
-
- let l:bufNum = 0 + a:bufNum
- let l:bufName = expand( "#" . l:bufNum . ":p:t")
- " Remove []'s & ()'s, these chars are preserved for buffer name locating
- let l:bufName = substitute(l:bufName, '[][()]', '', 'g')
-
- " Create a unique name for unamed buffer
- if empty(l:bufName)
- call <SID>DEBUG('Leaving CreateBufferUniqName()',10)
- return '--NO NAME--'.localtime()
- endif
-
- let l:bufPathPrefix = ""
-
- if(!has_key(s:bufPathSignDict, l:bufNum))
- call <SID>DEBUG(l:bufNum . ' is not in s:bufPathSignDict, aborting...',5)
- call <SID>DEBUG('Leaving CreateBufferUniqName()',10)
- return l:bufName
- endif
-
- let l:signs = s:bufPathSignDict[l:bufNum]
- if(empty(l:signs))
- call <SID>DEBUG('Signs for ' . l:bufNum . ' is empty, aborting...',5)
- call <SID>DEBUG('Leaving CreateBufferUniqName()',10)
- return l:bufName
- endif
-
- for l:sign in l:signs
- call <SID>DEBUG('l:sign is ' . l:sign,5)
- if empty(get(s:bufPathDict[l:bufNum],l:sign))
- continue
- endif
- let l:bufPathSignPart = get(s:bufPathDict[l:bufNum],l:sign).'/'
- " If the index is not right after the previous one and it is also not the
- " last one, then put a '-' before it
- if exists('l:last') && l:last + 1 != l:sign
- let l:bufPathSignPart = '-/'.l:bufPathSignPart
- endif
- let l:bufPathPrefix = l:bufPathPrefix.l:bufPathSignPart
- let l:last = l:sign
- endfor
- " If the last signature index is not the last index of the path, then put
- " a '-' after it
- if l:sign < len(s:bufPathDict[l:bufNum]) - 1
- let l:bufPathPrefix = l:bufPathPrefix.'-/'
- endif
-
- call <SID>DEBUG('Uniq name for ' . l:bufNum . ' is ' . l:bufPathPrefix.l:bufName,5)
-
- call <SID>DEBUG('Leaving CreateBufferUniqName()',10)
-
- return l:bufPathPrefix.l:bufName
-endfunction
-
-" }}}
-" UpdateBufferNameDict {{{
-"
-function! <SID>UpdateBufferNameDict(bufNum,deleted)
- call <SID>DEBUG('Entering UpdateBufferNameDict('.a:bufNum.','.a:deleted.')',10)
-
- let l:bufNum = 0 + a:bufNum
-
- let l:bufName = expand( "#" . l:bufNum . ":p:t")
-
- " Identify buffers with no name
- if empty(l:bufName)
- let l:bufName = '--NO NAME--'
- endif
-
- " Remove a deleted buffer from the buffer name dictionary
- if a:deleted
- if has_key(s:bufNameDict, l:bufName)
- call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5)
- let l:bufnrs = s:bufNameDict[l:bufName]
- call filter(l:bufnrs, 'v:val != '.l:bufNum)
- let s:bufNameDict[l:bufName] = l:bufnrs
- call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5)
- endif
- call <SID>DEBUG('Leaving UpdateBufferNameDict()',10)
- return
- endif
-
- if(!has_key(s:bufNameDict, l:bufName))
- call <SID>DEBUG('Adding empty list for ' . l:bufName,5)
- let s:bufNameDict[l:bufName] = []
- endif
-
- if index(s:bufNameDict[l:bufName],l:bufNum) == -1
- call add(s:bufNameDict[l:bufName], l:bufNum)
- endif
-
- call <SID>DEBUG('Leaving UpdateBufferNameDict()',10)
-endfunction
-
-" }}}
-" UpdateBufferPathDict {{{
-"
-function! <SID>UpdateBufferPathDict(bufNum,deleted)
- call <SID>DEBUG('Entering UpdateBufferPathDict('.a:bufNum.','.a:deleted.')',10)
-
- let l:bufNum = 0 + a:bufNum
- let l:bufPath = expand( "#" . l:bufNum . ":p:h")
- let l:bufName = expand( "#" . l:bufNum . ":p:t")
-
- " Identify buffers with no name
- if empty(l:bufName)
- let l:bufName = '--NO NAME--'
- endif
-
- " Remove a deleted buffer from the buffer path dictionary
- if a:deleted
- if has_key(s:bufNameDict, l:bufName)
- call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5)
- let l:bufnrs = s:bufNameDict[l:bufName]
- call filter(s:bufPathDict, 'v:key != '.l:bufNum)
- call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5)
- endif
- call <SID>DEBUG('Leaving UpdateBufferPathDict()',10)
- return
- endif
-
- let s:bufPathDict[l:bufNum] = split(l:bufPath,s:PathSeparator,0)
-
- call <SID>DEBUG('Leaving UpdateBufferPathDict()',10)
-endfunction
-
-" }}}
-" BuildBufferPathSignDict {{{
-"
-" Compare the parts from the same index of all the buffer's paths, if there
-" are differences, it means this index is a signature index for all the
-" buffer's paths, mark it. At this point, the buffers are splited into several
-" subsets. Then, doing the same check for each subset on the next index. We
-" should finally get a set of signature locations which will uniquely identify
-" the path. We could then construct a string with these locaitons using as
-" less characters as possible.
-"
-function! <SID>BuildBufferPathSignDict(bufnrs, ...)
- if a:0 == 0
- let index = 0
- else
- let index = a:1
- endif
-
- call <SID>DEBUG('Entering BuildBufferPathSignDict('.string(a:bufnrs).','.index.')',10)
-
- let bufnrs = a:bufnrs
-
- " Temporary dictionary to see if there is any different part
- let partDict = {}
-
- " Marker to see if there are more avaliable parts
- let moreParts = 0
-
- " Group the buffers by this part of the buffer's path
- for bufnr in bufnrs
- " Make sure each buffer has an entry in 's:bufPathSignDict'
- " If index is zero, we force re-initialize the entry
- if index == 0 || !has_key(s:bufPathSignDict, bufnr)
- let s:bufPathSignDict[bufnr] = []
- endif
-
- " If some buffers' path does not have this index, we skip it
- if len(s:bufPathDict[bufnr]) < index
- continue
- endif
-
- " Mark that there are still available paths
- let moreParts = 1
-
- " Get requested part of the path
- let part = get(s:bufPathDict[bufnr],index)
-
- if empty(part)
- let part = '--EMPTY--'
- endif
-
- " Group the buffers using dictionary by this part
- if(!has_key(partDict, part))
- let partDict[part] = []
- endif
- call add(partDict[part],bufnr)
- endfor
-
- " All the paths have been walked to the end
- if !moreParts
- call <SID>DEBUG('Leaving BuildBufferPathSignDict() '.index,10)
- return
- endif
-
- " We only need the buffer subsets from now on
- let subsets = values(partDict)
-
- " If the buffers have been splited into more than one subset, or all the
- " remaining buffers are still in the same subset but some buffers' path
- " have hit the end, then mark this index as signature index.
- if len(partDict) > 1 || ( len(partDict) == 1 && len(subsets[0]) < len(bufnrs) )
- " Store the signature index in the 's:bufPathSignDict' variable
- for bufnr in bufnrs
- call add(s:bufPathSignDict[bufnr],index)
- endfor
- " For all buffer subsets, increase the index by one, run again.
- for subset in subsets
- " If we only have one buffer left in the subset, it means there are
- " already enough signature index sufficient to identify the buffer
- if len(subset) <= 1
- continue
- endif
- call <SID>BuildBufferPathSignDict(subset, index + 1)
- endfor
- " If all the buffers are in the same subset, then this index is not a
- " signature index, increase the index by one, run again.
- else
- call <SID>BuildBufferPathSignDict(bufnrs, index + 1)
- endif
-
- call <SID>DEBUG('Leaving BuildBufferPathSignDict() '.index,10)
-endfunction
-
-" }}}
-" UpdateBufferPathSignDict {{{
-"
-function! <SID>UpdateBufferPathSignDict(bufNum,deleted)
- call <SID>DEBUG('Entering UpdateBufferPathSignDict('.a:bufNum.','.a:deleted.')',10)
-
- let l:bufNum = 0 + a:bufNum
-
- " Remove a deleted buffer from the buffer path signature dictionary
- if a:deleted
- if has_key(s:bufPathSignDict, l:bufNum)
- call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5)
- call filter(s:bufPathSignDict, 'v:key != '.l:bufNum)
- call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5)
- endif
- call <SID>DEBUG('Leaving UpdateBufferPathSignDict()',10)
- return
- endif
-
- call <SID>DEBUG('Leaving UpdateBufferPathSignDict()',10)
-endfunction
-
-" }}}
-" BuildBufferFinalDict {{{
-"
-function! <SID>BuildBufferFinalDict(arg,deleted)
- call <SID>DEBUG('Entering BuildBufferFinalDict('.string(a:arg).','.a:deleted.')',10)
-
- if type(a:arg) == 3
- let l:bufnrs = a:arg
- else
- let l:bufNum = 0 + a:arg
- let l:bufName = expand( "#" . l:bufNum . ":p:t")
-
- " Identify buffers with no name
- if empty(l:bufName)
- let l:bufName = '--NO NAME--'
- endif
-
- if(!has_key(s:bufNameDict, l:bufName))
- call <SID>DEBUG(l:bufName . ' is not in s:bufNameDict, aborting...',5)
- call <SID>DEBUG('Leaving BuildBufferFinalDict()',10)
- return
- endif
-
- let l:bufnrs = s:bufNameDict[l:bufName]
-
- " Remove a deleted buffer from the buffer unique name dictionary
- if a:deleted
- call <SID>UpdateBufferPathSignDict(l:bufNum, a:deleted)
- call <SID>UpdateBufferUniqNameDict(l:bufNum, a:deleted)
- endif
- endif
-
- call <SID>BuildBufferPathSignDict(l:bufnrs)
-
- call <SID>BuildBufferUniqNameDict(l:bufnrs)
-
- call <SID>DEBUG('Leaving BuildBufferFinalDict()',10)
-endfunction
-
-" }}}
-" BuildBufferUniqNameDict {{{
-"
-function! <SID>BuildBufferUniqNameDict(bufnrs)
- call <SID>DEBUG('Entering BuildBufferUniqNameDict('.string(a:bufnrs).')',10)
-
- let l:bufnrs = a:bufnrs
-
- for bufnr in l:bufnrs
- call <SID>UpdateBufferUniqNameDict(bufnr,0)
- endfor
-
- call <SID>DEBUG('Leaving BuildBufferUniqNameDict()',10)
-endfunction
-
-" }}}
-" UpdateBufferUniqNameDict {{{
-"
-function! <SID>UpdateBufferUniqNameDict(bufNum,deleted)
- call <SID>DEBUG('Entering UpdateBufferUniqNameDict('.a:bufNum.','.a:deleted.')',10)
-
- let l:bufNum = 0 + a:bufNum
-
- " Remove a deleted buffer from the buffer path dictionary
- if a:deleted
- if has_key(s:bufUniqNameDict, l:bufNum)
- call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5)
- call filter(s:bufUniqNameDict, 'v:key != '.l:bufNum)
- call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5)
- endif
- call <SID>DEBUG('Leaving UpdateBufferUniqNameDict()',10)
- return
- endif
-
- call <SID>DEBUG('Creating buffer name for ' . l:bufNum,5)
- let l:bufUniqName = <SID>CreateBufferUniqName(l:bufNum)
-
- call <SID>DEBUG('Setting ' . l:bufNum . ' to ' . l:bufUniqName,5)
- let s:bufUniqNameDict[l:bufNum] = l:bufUniqName
-
- call <SID>DEBUG('Leaving UpdateBufferUniqNameDict()',10)
-endfunction
-
-" }}}
-" BuildAllBufferDicts {{{
-"
-function! <SID>BuildAllBufferDicts()
- call <SID>DEBUG('Entering BuildAllBuffersDicts()',10)
-
- " Get the number of the last buffer.
- let l:NBuffers = bufnr('$')
-
- " Loop through every buffer less than the total number of buffers.
- let l:i = 0
- while(l:i <= l:NBuffers)
- if <SID>IsBufferIgnored(l:i)
- let l:i = l:i + 1
- continue
- endif
-
- call <SID>UpdateBufferNameDict(l:i,0)
- call <SID>UpdateBufferPathDict(l:i,0)
- call <SID>UpdateBufferStateDict(l:i,0)
-
- let l:i = l:i + 1
- endwhile
-
- for bufnrs in values(s:bufNameDict)
- call <SID>BuildBufferFinalDict(bufnrs,0)
- endfor
-
- call <SID>DEBUG('Leaving BuildAllBuffersDicts()',10)
-endfunction
-
-" }}}
-" UpdateAllBufferDicts {{{
-"
-function! <SID>UpdateAllBufferDicts(bufNum,deleted)
- call <SID>DEBUG('Entering UpdateAllBuffersDicts('.a:bufNum.','.a:deleted.')',10)
-
- call <SID>UpdateBufferNameDict(a:bufNum,a:deleted)
- call <SID>UpdateBufferPathDict(a:bufNum,a:deleted)
- call <SID>UpdateBufferStateDict(a:bufNum,a:deleted)
-
- call <SID>BuildBufferFinalDict(a:bufNum,a:deleted)
-
- call <SID>DEBUG('Leaving UpdateAllBuffersDicts()',10)
-endfunction
-
-" }}}
-" UpdateBufferStateDict {{{
-function! <SID>UpdateBufferStateDict(bufNum,deleted)
- call <SID>DEBUG('Entering UpdateBufferStateDict('.a:bufNum.','.a:deleted.')',10)
-
- let l:bufNum = 0 + a:bufNum
-
- if a:deleted && has_key(s:bufStateDict, l:bufNum)
- call filter(s:bufStateDict, 'v:key != '.l:bufNum)
- call <SID>DEBUG('Leaving UpdateBufferStateDict()',10)
- return
- endif
-
- if has_key(s:bufStateDict, l:bufNum)
- if s:bufStateDict[l:bufNum] != getbufvar(a:bufNum, '&modified')
- let s:bufStateDict[l:bufNum] = getbufvar(a:bufNum, '&modified')
- call <SID>AutoUpdate(bufnr(a:bufNum),0)
- endif
- else
- let s:bufStateDict[l:bufNum] = getbufvar(a:bufNum, '&modified')
- endif
-
- call <SID>DEBUG('Leaving UpdateBufferStateDict()',10)
-endfunction
-
-" }}}
-" NameCmp - compares tabs based on filename {{{
-"
-function! <SID>NameCmp(tab1, tab2)
- let l:name1 = matchstr(a:tab1, ":.*")
- let l:name2 = matchstr(a:tab2, ":.*")
- if l:name1 < l:name2
- return -1
- elseif l:name1 > l:name2
- return 1
- else
- return 0
- endif
-endfunction
-
-" }}}
-" MRUCmp - compares tabs based on MRU order {{{
-"
-function! <SID>MRUCmp(tab1, tab2)
- let l:buf1 = str2nr(matchstr(a:tab1, '[0-9]\+'))
- let l:buf2 = str2nr(matchstr(a:tab2, '[0-9]\+'))
- return index(s:MRUList, l:buf1) - index(s:MRUList, l:buf2)
-endfunction
-
-" }}}
-" HasEligibleBuffers - Are there enough MBE eligible buffers to open the MBE window? {{{
-"
-" Returns 1 if there are any buffers that can be displayed in a
-" mini buffer explorer. Otherwise returns 0.
-"
-function! <SID>HasEligibleBuffers()
- call <SID>DEBUG('Entering HasEligibleBuffers()',10)
-
- let l:found = len(s:BufList)
- let l:needed = g:miniBufExplBuffersNeeded
-
- call <SID>DEBUG('Eligible buffers are '.string(s:BufList),6)
- call <SID>DEBUG('Found '.l:found.' eligible buffers of '.l:needed.' needed',6)
-
- call <SID>DEBUG('Leaving HasEligibleBuffers()',10)
- return (l:found >= l:needed)
-endfunction
-
-" }}}
-" Auto Update - Function called by auto commands for auto updating the MBE {{{
-"
-" IF auto update is turned on AND
-" we are in a real buffer AND
-" we have enough eligible buffers THEN
-" Update our explorer and get back to the current window
-"
-" If we get a buffer number for a buffer that
-" is being deleted, we need to make sure and
-" remove the buffer from the list of eligible
-" buffers in case we are down to one eligible
-" buffer, in which case we will want to close
-" the MBE window.
-"
-function! <SID>AutoUpdate(curBufNum,force)
- call <SID>DEBUG('Entering AutoUpdate('.a:curBufNum.')',10)
-
- call <SID>DEBUG('Current state: '.winnr().' : '.bufnr('%').' : '.bufname('%'),10)
-
- if (s:miniBufExplInAutoUpdate == 1)
- call <SID>DEBUG('AutoUpdate recursion stopped',9)
- call <SID>DEBUG('Leaving AutoUpdate()',10)
- return
- else
- let s:miniBufExplInAutoUpdate = 1
- endif
-
- " Skip windows holding ignored buffer
- if !a:force && <SID>IsBufferIgnored(a:curBufNum) == 1
- call <SID>DEBUG('Leaving AutoUpdate()',10)
-
- let s:miniBufExplInAutoUpdate = 0
- return
- endif
-
- if s:MRUEnable == 1
- call <SID>ListPush(s:MRUList,a:curBufNum)
- endif
-
- " Only allow updates when the AutoUpdate flag is set
- " this allows us to stop updates on startup.
- if exists('t:miniBufExplAutoUpdate') && t:miniBufExplAutoUpdate == 1
- " if we don't have a window then create one
- let l:winnr = <SID>FindWindow('-MiniBufExplorer-', 1)
-
- if (exists('t:skipEligibleBuffersCheck') && t:skipEligibleBuffersCheck == 1) || <SID>HasEligibleBuffers() == 1
- if (l:winnr == -1)
- if g:miniBufExplAutoStart == 1
- call <SID>DEBUG('MiniBufExplorer was not running, starting...', 9)
- call <SID>StartExplorer(a:curBufNum)
- else
- call <SID>DEBUG('MiniBufExplorer was not running, aborting...', 9)
- call <SID>DEBUG('Leaving AutoUpdate()',10)
- let s:miniBufExplInAutoUpdate = 0
- return
- endif
- else
- call <SID>DEBUG('Updating MiniBufExplorer...', 9)
- call <SID>UpdateExplorer(a:curBufNum)
- endif
- else
- if (l:winnr == -1)
- call <SID>DEBUG('MiniBufExplorer was not running, aborting...', 9)
- call <SID>DEBUG('Leaving AutoUpdate()',10)
- let s:miniBufExplInAutoUpdate = 0
- return
- else
- call <SID>DEBUG('Failed in eligible check', 9)
- call <SID>StopExplorer(0)
- " we do not want to turn auto-updating off
- let t:miniBufExplAutoUpdate = 1
- endif
- endif
- else
- call <SID>DEBUG('AutoUpdates are turned off, terminating',9)
- endif
-
- call <SID>DEBUG('Leaving AutoUpdate()',10)
-
- let s:miniBufExplInAutoUpdate = 0
-endfunction
-
-" }}}
-" QuitIfLastOpen {{{
-"
-function! <SID>QuitIfLastOpen() abort
- " Quit MBE if no more mormal window left
- if (bufname('%') == '-MiniBufExplorer-') && (<SID>NextNormalWindow() == -1)
- call <SID>DEBUG('MBE is the last open window, quit it', 9)
- if tabpagenr('$') == 1
- " Before quitting Vim, delete the MBE buffer so that
- " the '0 mark is correctly set to the previous buffer.
- " Also disable autocmd on this command to avoid unnecessary
- " autocmd nesting.
- if winnr('$') == 1
- noautocmd bdelete
- endif
- quit
- else
- close
- endif
- endif
-endfunction
-
-" }}}
-" GetActiveBuffer {{{
-"
-function! <SID>GetActiveBuffer()
- call <SID>DEBUG('Entering GetActiveBuffer()',10)
- let l:bufNum = substitute(s:miniBufExplBufList,'\[\([0-9]*\):[^\]]*\][^\!]*!', '\1', '') + 0
- call <SID>DEBUG('Currently active buffer is '.l:bufNum,10)
- call <SID>DEBUG('Leaving GetActiveBuffer()',10)
- return l:bufNum
-endfunction
-
-" }}}
-" GetSelectedBuffer - From the MBE window, return the bufnum for buf under cursor {{{
-"
-" If we are in our explorer window then return the buffer number
-" for the buffer under the cursor.
-"
-function! <SID>GetSelectedBuffer()
- call <SID>DEBUG('Entering GetSelectedBuffer()',10)
-
- " Make sure we are in our window
- if bufname('%') != '-MiniBufExplorer-'
- call <SID>DEBUG('GetSelectedBuffer called in invalid window',1)
- call <SID>DEBUG('Leaving GetSelectedBuffer()',10)
- return -1
- endif
-
- let l:save_rep = &report
- let l:save_sc = &showcmd
- let &report = 10000
- set noshowcmd
-
- let l:save_reg = @"
- let @" = ""
- normal ""yi[
- if @" != ""
- if !g:miniBufExplShowBufNumbers
- " This is a bit ugly, but it works, unless we come up with a
- " better way to get the key for a dictionary by its value.
- let l:bufUniqNameDictKeys = keys(s:bufUniqNameDict)
- let l:bufUniqNameDictValues = values(s:bufUniqNameDict)
- let l:retv = l:bufUniqNameDictKeys[match(l:bufUniqNameDictValues,substitute(@",'[0-9]*:\(.*\)', '\1', ''))]
- else
- let l:retv = substitute(@",'\([0-9]*\):.*', '\1', '') + 0
- endif
- let @" = l:save_reg
- call <SID>DEBUG('Leaving GetSelectedBuffer()',10)
- return l:retv
- else
- let @" = l:save_reg
- call <SID>DEBUG('Leaving GetSelectedBuffer()',10)
- return -1
- endif
-
- let &report = l:save_rep
- let &showcmd = l:save_sc
-endfunction
-
-" }}}
-" MBESelectBuffer - From the MBE window, open buffer under the cursor {{{
-"
-" If we are in our explorer, then we attempt to open the buffer under the
-" cursor in the previous window.
-"
-" Split indicates whether to open with split, 0 no split, 1 split horizontally
-"
-function! <SID>MBESelectBuffer(split)
- call <SID>DEBUG('Entering MBESelectBuffer()',10)
-
- " Make sure we are in our window
- if bufname('%') != '-MiniBufExplorer-'
- call <SID>DEBUG('MBESelectBuffer called in invalid window',1)
- call <SID>DEBUG('Leaving MBESelectBuffer()',10)
- return
- endif
-
- let l:bufnr = <SID>GetSelectedBuffer()
-
- if(l:bufnr != -1) " If the buffer exists.
- let l:saveAutoUpdate = t:miniBufExplAutoUpdate
- let t:miniBufExplAutoUpdate = 0
-
- call s:SwitchWindow('p',1)
-
- if <SID>IsBufferIgnored(bufnr('%'))
- let l:winNum = <SID>NextNormalWindow()
- if l:winNum != -1
- call s:SwitchWindow('w',1,l:winNum)
- else
- call <SID>DEBUG('No elegible window avaliable',1)
- call <SID>DEBUG('Leaving MBESelectBuffer()',10)
- return
- endif
- endif
-
- if a:split == 0
- exec 'b! '.l:bufnr
- elseif a:split == 1
- exec 'sb! '.l:bufnr
- elseif a:split == 2
- exec 'vertical sb! '.l:bufnr
- endif
-
- let t:miniBufExplAutoUpdate = l:saveAutoUpdate
-
- call <SID>AutoUpdate(bufnr("%"),0)
- endif
-
- if g:miniBufExplCloseOnSelect == 1
- call <SID>StopExplorer(0)
- endif
-
- call <SID>DEBUG('Leaving MBESelectBuffer()',10)
-endfunction
-
-" }}}
-" MBEDeleteBuffer - From the MBE window, delete selected buffer from list {{{
-"
-" After making sure that we are in our explorer, This will delete the buffer
-" under the cursor. If the buffer under the cursor is being displayed in a
-" window, this routine will attempt to get different buffers into the
-" windows that will be affected so that windows don't get removed.
-"
-function! <SID>MBEDeleteBuffer()
- call <SID>DEBUG('Entering MBEDeleteBuffer()',10)
-
- " Make sure we are in our window
- if bufname('%') != '-MiniBufExplorer-'
- call <SID>DEBUG('MBEDeleteBuffer called in invalid window',1)
- call <SID>DEBUG('Leaving MBEDeleteBuffer()',10)
- return
- endif
-
- let l:selBuf = <SID>GetSelectedBuffer()
-
- if l:selBuf != -1
- call <SID>DeleteBuffer(0,0,l:selBuf)
- endif
-
- call <SID>DEBUG('Leaving MBEDeleteBuffer()',10)
-endfunction
-
-" }}}
-" NextNormalWindow {{{
-"
-function! <SID>NextNormalWindow()
- call <SID>DEBUG('Entering NextNormalWindow()',10)
-
- let l:winSum = winnr('$')
- call <SID>DEBUG('Total number of open windows are '.l:winSum,9)
-
- let l:i = 1
- while(l:i <= l:winSum)
- call <SID>DEBUG('window: '.l:i.', buffer: ('.winbufnr(l:i).':'.bufname(winbufnr(l:i)).')',9)
- if !<SID>IsBufferIgnored(winbufnr(l:i)) && l:i != winnr()
- call <SID>DEBUG('Found window '.l:i,8)
- call <SID>DEBUG('Leaving NextNormalWindow()',10)
- return l:i
- endif
- let l:i = l:i + 1
- endwhile
-
- call <SID>DEBUG('Found no window',8)
- call <SID>DEBUG('Leaving NextNormalWindow()',10)
- return -1
-endfunction
-
-" }}}
-" ListAdd {{{
-"
-function! <SID>ListAdd(list,val)
- call <SID>DEBUG('Entering ListAdd('.string(a:list).','.a:val.')',10)
- call add(a:list, a:val)
- call <SID>DEBUG('Leaving ListAdd()',10)
-endfunction
-
-" }}}
-" ListPop {{{
-"
-function! <SID>ListPop(list,val)
- call <SID>DEBUG('Entering ListPop('.string(a:list).','.a:val.')',10)
- call filter(a:list, 'v:val != '.a:val)
- call <SID>DEBUG('Leaving ListPop()',10)
-endfunction
-
-" }}}
-" ListPush {{{
-"
-function! <SID>ListPush(list,val)
- call <SID>DEBUG('Entering ListPush('.string(a:list).','.a:val.')',10)
- " Remove the buffer number from the list if it already exists.
- call <SID>ListPop(a:list,a:val)
-
- " Add the buffer number to the head of the list.
- call insert(a:list,a:val)
- call <SID>DEBUG('Leaving ListPush()',10)
-endfunction
-
-" }}}
-" DEBUG - Display debug output when debugging is turned on {{{
-"
-" Thanks to Charles E. Campbell, Jr. PhD <cec@NgrOyphSon.gPsfAc.nMasa.gov>
-" for Decho.vim which was the inspiration for this enhanced debugging
-" capability.
-"
-let g:miniBufExplFuncCallDepth = 0
-function! <SID>DEBUG(msg, level)
- if g:miniBufExplDebugLevel >= a:level
-
- if a:level == 10 && a:msg =~ '^Entering'
- let g:miniBufExplFuncCallDepth += 1
- endif
-
- if a:msg =~ '^Entering'
- let l:msg = repeat('│ ',g:miniBufExplFuncCallDepth - 1).'┌ '.a:msg
- elseif a:msg =~ '^Leaving'
- let l:msg = repeat('│ ',g:miniBufExplFuncCallDepth - 1).'└ '.a:msg
- else
- let l:msg = repeat('│ ',g:miniBufExplFuncCallDepth).a:msg
- endif
-
- " Prevent a report of our actions from showing up.
- let l:save_rep = &report
- let l:save_sc = &showcmd
- let &report = 10000
- set noshowcmd
-
- " Debug output to a buffer
- if g:miniBufExplDebugMode == 0
- if bufname('%') == 'MiniBufExplorer.DBG'
- return
- endif
-
- " Get into the debug window or create it if needed
- let l:winNum = <SID>FindCreateWindow('MiniBufExplorer.DBG', 0, 1, 1, 1, 0)
-
- if l:winNum == -1
- let g:miniBufExplDebugMode == 3
- call <SID>DEBUG('Failed to get the MBE debugging window, reset debugging mode to 3.',1)
- call <SID>DEBUG('Forwarding message...',1)
- call <SID>DEBUG(a:msg,1)
- call <SID>DEBUG('Forwarding message end.',1)
- return
- endif
-
- " Save the current window number so we can come back here
- let l:currWin = winnr()
- call s:SwitchWindow('p',1)
-
- " Change to debug window
- call s:SwitchWindow('w',1,l:winNum)
-
- " Make sure we really got to our window, if not we
- " will display a confirm dialog and turn debugging
- " off so that we won't break things even more.
- if bufname('%') != 'MiniBufExplorer.DBG'
- call confirm('Error in window debugging code. Dissabling MiniBufExplorer debugging.', 'OK')
- let g:miniBufExplDebugLevel = 0
- return
- endif
-
- set modified
-
- " Write Message to DBG buffer
- let res=append("$",s:debugIndex.':'.a:level.':'.a:msg)
-
- set nomodified
-
- norm G
-
- " Return to original window
- call s:SwitchWindow('p',1)
- call s:SwitchWindow('w',1,l:currWin)
- " Debug output using VIM's echo facility
- elseif g:miniBufExplDebugMode == 1
- echo s:debugIndex.':'.a:level.':'.a:msg
- " Debug output to a file -- VERY SLOW!!!
- " should be OK on UNIX and Win32 (not the 95/98 variants)
- elseif g:miniBufExplDebugMode == 2
- if has('system') || has('fork')
- if has('win32') && !has('win95')
- let l:result = system("cmd /c 'echo ".s:debugIndex.':'.a:level.':'.a:msg." >> MiniBufExplorer.DBG'")
- endif
- if has('unix')
- let l:result = system("echo '".s:debugIndex.':'.a:level.':'.a:msg." >> MiniBufExplorer.DBG'")
- endif
- else
- call confirm('Error in file writing version of the debugging code, vim not compiled with system or fork. Dissabling MiniBufExplorer debugging.', 'OK')
- let g:miniBufExplDebugLevel = 0
- endif
- elseif g:miniBufExplDebugMode == 3
- let g:miniBufExplDebugOutput = g:miniBufExplDebugOutput."\n".s:debugIndex."\t".':'.a:level."\t".':'.l:msg
- endif
-
- let s:debugIndex = s:debugIndex + 1
-
- if a:level == 10 && a:msg =~ '^Leaving'
- let g:miniBufExplFuncCallDepth -= 1
- endif
-
- let &report = l:save_rep
- let &showcmd = l:save_sc
- endif
-endfunc
-
-" }}}
-" SwitchWindow {{{
-"
-function! s:SwitchWindow(action, ...)
- call <SID>DEBUG('Entering SwitchWindow('.a:action.','.string(a:000).')',10)
-
- if a:action !~ '[hjkltbwWpP]'
- call <SID>DEBUG('invalid window action : '.a:action,10)
- call <SID>DEBUG('Leaving SwitchWindow()',10)
- return
- endif
-
- if exists('a:1') && a:1 == 1
- let l:aucmd = 'noautocmd '
- else
- let l:aucmd = ''
- endif
-
- if exists('a:2')
- let l:winnr = a:2
- else
- let l:winnr = ''
- endif
-
- call <SID>DEBUG('previous window is: '.winnr(),10)
- let l:wincmd = l:aucmd.l:winnr.'wincmd '.a:action
- call <SID>DEBUG('window switching command is: '.l:wincmd,10)
- exec l:wincmd
- call <SID>DEBUG('current window is: '.winnr(),10)
-
- call <SID>DEBUG('Leaving SwitchWindow()',10)
-endfunction
-
-" }}}
-
-" vim:ft=vim:fdm=marker:ff=unix:nowrap:tabstop=2:shiftwidth=2:softtabstop=2:smarttab:shiftround:expandtab