Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion plugin/bbye.vim
Original file line number Diff line number Diff line change
@@ -1,6 +1,39 @@
if exists("g:loaded_bbye") || &cp | finish | endif
let g:loaded_bbye = 1

function! s:bdeleteexcept(bang, buffer_name)
let except_buffer = s:str2bufnr(a:buffer_name)

" Pass a:buffer_name in as -1 to delete all buffers
if a:buffer_name == -1
let except_buffer = -1
endif

let last_buffer_nr = bufnr('$')
let buffer_nr = 1
let warn_modified = 0

while buffer_nr <= last_buffer_nr
if buffer_nr != except_buffer && buflisted(buffer_nr)
if getbufvar(buffer_nr, "&modified") && empty(a:bang)
let warn_modified = 1
else
call s:bdelete(a:bang, buffer_nr)
endif
endif
let buffer_nr = buffer_nr + 1
endwhile

if warn_modified
let error = "E89: No write since last change for some buffers "
return s:warn(error . " (add ! to override)")
endif
endfunction

function! s:bdeleteall(bang)
call s:bdeleteexcept(a:bang, -1)
endfunction

function! s:bdelete(bang, buffer_name)
let buffer = s:str2bufnr(a:buffer_name)
let w:bbye_back = 1
Expand Down Expand Up @@ -35,7 +68,7 @@ function! s:bdelete(bang, buffer_name)
" If found a new buffer for this window, mission accomplished:
if bufnr("%") != buffer | continue | endif

call s:new(a:bang)
call s:new(a:bang)
endfor

" Because tabbars and other appearing/disappearing windows change
Expand Down Expand Up @@ -82,3 +115,9 @@ endfunction

command! -bang -complete=buffer -nargs=? Bdelete
\ :call s:bdelete(<q-bang>, <q-args>)

command! -bang -complete=buffer -nargs=? Bdeleteexcept
\ :call s:bdeleteexcept(<q-bang>, <q-args>)

command! -bang -complete=buffer -nargs=? Bdeleteall
\ :call s:bdeleteall(<q-bang>)