From 472b71c0855f6dbf1270dda980ba95e6454c5ea1 Mon Sep 17 00:00:00 2001 From: Wang Shidong Date: Tue, 22 Jan 2019 00:04:36 +0800 Subject: [PATCH] Add disk explorer for windows (#2165) * Add disk explorer for windows * Update windisk.vim * Fix windows support * add key binding * add functions for manager disk * Use SPC f d only in windows os --- autoload/SpaceVim/layers/core.vim | 3 ++ autoload/SpaceVim/layers/core/statusline.vim | 3 +- autoload/SpaceVim/plugins/windisk.vim | 46 ++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 autoload/SpaceVim/plugins/windisk.vim diff --git a/autoload/SpaceVim/layers/core.vim b/autoload/SpaceVim/layers/core.vim index 46635b475..695e248cc 100644 --- a/autoload/SpaceVim/layers/core.vim +++ b/autoload/SpaceVim/layers/core.vim @@ -170,6 +170,9 @@ function! SpaceVim#layers#core#config() abort \ 'delete-current-buffer-file', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'F'], 'normal! gf', 'open-cursor-file', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', '/'], 'call SpaceVim#plugins#find#open()', 'find-files', 1) + if s:SYS.isWindows + call SpaceVim#mapping#space#def('nnoremap', ['f', 'd'], 'call SpaceVim#plugins#windisk#open()', 'open-windisk-manager', 1) + endif if g:spacevim_filemanager ==# 'vimfiler' call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'VimFiler', 'toggle_file_tree', 1) call SpaceVim#mapping#space#def('nnoremap', ['f', 'T'], 'VimFiler -no-toggle', 'show_file_tree', 1) diff --git a/autoload/SpaceVim/layers/core/statusline.vim b/autoload/SpaceVim/layers/core/statusline.vim index 5821b1f15..cf2fc6732 100644 --- a/autoload/SpaceVim/layers/core/statusline.vim +++ b/autoload/SpaceVim/layers/core/statusline.vim @@ -386,7 +386,8 @@ function! SpaceVim#layers#core#statusline#get(...) abort \ . '%#SpaceVim_statusline_b# LayerManager %#SpaceVim_statusline_b_SpaceVim_statusline_c#' . s:lsep elseif &filetype ==# 'SpaceVimGitLogPopup' return '%#SpaceVim_statusline_a# Git log popup %#SpaceVim_statusline_a_SpaceVim_statusline_b#' . s:lsep - + elseif &filetype ==# 'SpaceVimWinDiskManager' + return '%#SpaceVim_statusline_a# WinDisk %#SpaceVim_statusline_a_SpaceVim_statusline_b#' . s:lsep elseif &filetype ==# 'SpaceVimTodoManager' return '%#SpaceVim_statusline_a# TODO manager %#SpaceVim_statusline_a_SpaceVim_statusline_b#' . s:lsep diff --git a/autoload/SpaceVim/plugins/windisk.vim b/autoload/SpaceVim/plugins/windisk.vim new file mode 100644 index 000000000..19d775ec3 --- /dev/null +++ b/autoload/SpaceVim/plugins/windisk.vim @@ -0,0 +1,46 @@ +"============================================================================= +" windisk.vim --- disk manager for windows +" Copyright (c) 2016-2017 Wang Shidong & Contributors +" Author: Wang Shidong < wsdjeg at 163.com > +" URL: https://spacevim.org +" License: GPLv3 +"============================================================================= + +func! SpaceVim#plugins#windisk#open() + let disks = s:get_disks() + if !empty(disks) + " 1. open plugin buffer + noautocmd vsplit __windisk__ + vertical resize 20 + let s:disk_buffer_nr = bufnr('%') + set ft=SpaceVimWinDiskManager + setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber winfixwidth + " 2. init buffer option and syntax + let lines = disks + setlocal modifiable + call setline(1, lines) + setlocal nomodifiable + " 2. updated content + " 3. init buffer key bindings + nnoremap :call open_disk(getline('.')) + else + " TODO: print warnning, not sure if it is needed. + endif +endf + +func! s:get_disks() + return map(filter(range(65, 97), "isdirectory(nr2char(v:val) . ':/')"), 'nr2char(v:val) . ":/"') +endf + + +function! s:open_disk(d) abort + call s:close_disk_buffer() + exe 'VimFiler -no-toggle ' . a:d + doautocmd WinEnter +endfunction + + +function! s:close_disk_buffer() abort + exe 'bd ' . s:disk_buffer_nr +endfunction +