Browse Source

Remove new keybinding and use confirmation dialog instead

Igor Prusov 7 years ago
parent
commit
33c0db85f7
1 changed files with 22 additions and 6 deletions
  1. 22 6
      plugin/bufexplorer.vim

+ 22 - 6
plugin/bufexplorer.vim

@@ -526,7 +526,6 @@ function! s:MapKeys()
     nnoremap <script> <silent> <nowait> <buffer> u             :call <SID>ToggleShowUnlisted()<CR>
     nnoremap <script> <silent> <nowait> <buffer> v             :call <SID>SelectBuffer("split", "vr")<CR>
     nnoremap <script> <silent> <nowait> <buffer> V             :call <SID>SelectBuffer("split", "vl")<CR>
-    nnoremap <script> <silent> <nowait> <buffer> x             :call <SID>RemoveBuffer("force_delete")<CR>
 
     for k in ["G", "n", "N", "L", "M", "H"]
         execute "nnoremap <buffer> <silent>" k ":keepjumps normal!" k."<CR>"
@@ -649,7 +648,6 @@ function! s:CreateHelp()
         call add(header, '" u : toggle showing unlisted buffers')
         call add(header, '" V : open buffer in another window on the left of the current')
         call add(header, '" v : open buffer in another window on the right of the current')
-        call add(header, '" x : delete buffer without saving changes')
     else
         call add(header, '" Press <F1> for Help')
     endif
@@ -952,6 +950,8 @@ function! s:RemoveBuffer(mode)
         return
     endif
 
+    let mode = a:mode
+
     " Do not allow this buffer to be deleted if it is the last one.
     if len(s:MRUList) == 1
         call s:Error("Sorry, you are not allowed to delete the last buffer")
@@ -965,13 +965,27 @@ function! s:RemoveBuffer(mode)
 
     let _bufNbr = str2nr(getline('.'))
 
-    if getbufvar(_bufNbr, '&modified') == 1 && a:mode != "force_delete"
-        call s:Error("Sorry, no write since last change for buffer "._bufNbr.", unable to delete")
-        return
+    if getbufvar(_bufNbr, '&modified') == 1
+    if a:mode == "delete"
+        let answer = confirm('No write since last change for buffer '._bufNbr.'. Delete anyway?', "&Yes\n&No", 2)
+        if answer == 1
+            let mode = "force_delete"
+        else
+            return
+        endif
+    elseif a:mode == "wipe"
+        let answer = confirm('No write since last change for buffer '._bufNbr.'. Wipe anyway?', "&Yes\n&No", 2)
+        if answer == 1
+            let mode = "force_wipe"
+        else
+            return
+        endif
+    endif
+
     endif
 
     " Okay, everything is good, delete or wipe the buffer.
-    call s:DeleteBuffer(_bufNbr, a:mode)
+    call s:DeleteBuffer(_bufNbr, mode)
 
     " Reactivate winmanager autocommand activity.
     if exists("b:displayMode") && b:displayMode == "winmanager"
@@ -987,6 +1001,8 @@ function! s:DeleteBuffer(buf, mode)
         " Wipe/Delete buffer from Vim.
         if a:mode == "wipe"
             execute "silent bwipe" a:buf
+        elseif a:mode == "force_wipe"
+            execute "silent bwipe!" a:buf
         elseif a:mode == "force_delete"
             execute "silent bdelete!" a:buf
         else