spacevim/autoload/SpaceVim/plugins/windisk.vim
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

98 lines
2.9 KiB
VimL

"=============================================================================
" windisk.vim --- disk manager for windows
" Copyright (c) 2016-2023 Wang Shidong & Contributors
" Author: Wang Shidong < wsdjeg@outlook.com >
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
let s:ICONV = SpaceVim#api#import('iconv')
let s:LOGGER = SpaceVim#logger#derive('windisk')
func! SpaceVim#plugins#windisk#open() abort
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 <buffer><silent> <Cr> :call <SID>open_disk(getline('.'))<cr>
else
" TODO: print warnning, not sure if it is needed.
endif
endf
function! s:diskinfo() abort
if !executable('wmic')
call s:LOGGER.warn('windisk requires wmic.exe!')
return []
endif
let rst = systemlist('wmic LOGICALDISK LIST BRIEF')
if !empty(rst)
let diskinfo = rst[1:]
else
let diskinfo = []
endif
let rst = []
call s:LOGGER.debug('start to parse diskinfo!')
for line in diskinfo
call s:LOGGER.debug(line)
let info = split(s:ICONV.iconv(line, g:spacevim_windisk_encoding, &enc))
call s:LOGGER.debug('iconv ' . g:spacevim_windisk_encoding . ' result:' . string(info))
if len(info) >= 4
let diskid = info[0]
let freespace = info[2]
let size = info[3]
let name = get(info, 4, '')
call add(rst, {
\ 'disk' : diskid,
\ 'free' : freespace,
\ 'size' : size,
\ 'name' : name,
\ })
endif
endfor
return rst
endfunction
func! s:get_disks() abort
" use wmic command is better
" return map(filter(range(65, 97), "isdirectory(nr2char(v:val) . ':/')"), 'nr2char(v:val) . ":/"')
let diskinfo = s:diskinfo()
let line = map(diskinfo, 's:diskToLine(v:val)')
return line
endf
function! s:diskToLine(disk) abort
return a:disk.disk . '/' . ' ' . (empty(a:disk.name) ? '本地磁盘' : a:disk.name)
endfunction
function! s:open_disk(d) abort
let disk = split(a:d)[0]
call s:close_disk_buffer()
if g:spacevim_filemanager ==# 'vimfiler'
exe 'VimFiler -no-toggle ' . disk
elseif g:spacevim_filemanager ==# 'nerdtree'
silent! exe 'NERDTree ' . disk
elseif g:spacevim_filemanager ==# 'defx'
exe 'Defx -no-toggle -no-resume ' . disk
endif
doautocmd WinEnter
endfunction
function! s:close_disk_buffer() abort
exe 'bd ' . s:disk_buffer_nr
endfunction