summaryrefslogtreecommitdiffstats
path: root/ftplugin/vifm-rename.vim
diff options
context:
space:
mode:
Diffstat (limited to 'ftplugin/vifm-rename.vim')
-rw-r--r--ftplugin/vifm-rename.vim62
1 files changed, 62 insertions, 0 deletions
diff --git a/ftplugin/vifm-rename.vim b/ftplugin/vifm-rename.vim
new file mode 100644
index 00000000..0cb82351
--- /dev/null
+++ b/ftplugin/vifm-rename.vim
@@ -0,0 +1,62 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
+
+" Filetype plugin for vifm rename buffer
+" Maintainer: xaizek <xaizek@posteo.net>
+" Last Change: October 05, 2014
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let b:did_ftplugin = 1
+
+" Copy list of original file names
+let s:files = getline(1, '$')
+
+" Closes window/tab/Vim when buffer is left alone in there
+function! s:QuitIfOnlyWindow()
+ " Boil out if there is more than one window
+ if winbufnr(2) != -1
+ return
+ endif
+
+ " Just close tab with this single window or quit Vim with last tab
+ if tabpagenr('$') == 1
+ bdelete
+ quit
+ else
+ close
+ endif
+endfunction
+
+" Create a vertical split window for original file names and configure it
+belowright vsplit __VifmRenameOrig__
+enew
+call setline(1, s:files)
+setlocal buftype=nofile
+setlocal bufhidden=hide
+setlocal noswapfile
+setlocal nobuflisted
+setlocal cursorbind
+setlocal scrollbind
+setlocal nocursorline
+
+" Free now useless list of file names
+unlet s:files
+
+" Setup a hook in auxiliary local window to do not leave it alone, when it's
+" useless
+augroup VifmRenameAutoCmds
+ autocmd! * <buffer>
+ autocmd BufEnter <buffer> call s:QuitIfOnlyWindow()
+augroup END
+
+" Go back to the original window and ensure it will remain synchronized with
+" the auxiliary one
+wincmd w
+setlocal cursorbind
+setlocal scrollbind
+
+" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
+
+endif