summaryrefslogtreecommitdiff
path: root/.vim/available_plugins/minibufexpl
diff options
context:
space:
mode:
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