mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 14:50:04 +08:00
98 lines
2.5 KiB
VimL
98 lines
2.5 KiB
VimL
|
"=============================================================================
|
||
|
" FILE: size.vim
|
||
|
" AUTHOR: Shougo Matsushita <Shougo.Matsu at gmail.com>
|
||
|
" License: MIT license
|
||
|
"=============================================================================
|
||
|
|
||
|
function! vimfiler#columns#size#define() abort
|
||
|
return s:column
|
||
|
endfunction
|
||
|
|
||
|
let s:column = {
|
||
|
\ 'name' : 'size',
|
||
|
\ 'description' : 'get filesize by human',
|
||
|
\ 'syntax' : 'vimfilerColumn__Size',
|
||
|
\ }
|
||
|
|
||
|
function! s:column.length(files, context) abort
|
||
|
return 6
|
||
|
endfunction
|
||
|
|
||
|
function! s:column.define_syntax(context) abort
|
||
|
syntax match vimfilerColumn__SizeLine
|
||
|
\ '.*' contained containedin=vimfilerColumn__Size
|
||
|
highlight def link vimfilerColumn__SizeLine Constant
|
||
|
endfunction
|
||
|
|
||
|
function! s:column.get(file, context) abort
|
||
|
if a:file.vimfiler__is_directory
|
||
|
return ' '
|
||
|
endif
|
||
|
|
||
|
" Get human file size.
|
||
|
let filesize = a:file.vimfiler__filesize
|
||
|
let size = 0
|
||
|
if filesize < 0
|
||
|
if a:file.action__path !~ '^\a\w\+:'
|
||
|
\ && has('lua')
|
||
|
\ && getftype(a:file.action__path) !=# 'link'
|
||
|
let pattern = s:get_lua_file_size(a:file.action__path)
|
||
|
elseif filesize == -2
|
||
|
" Above 2GB?
|
||
|
let pattern = '>2.00'
|
||
|
else
|
||
|
let pattern = ''
|
||
|
endif
|
||
|
let suffix = (pattern != '') ? 'G' : ''
|
||
|
elseif filesize < 1000
|
||
|
" B.
|
||
|
let suffix = 'B'
|
||
|
let float = ''
|
||
|
let pattern = printf('%5d', filesize)
|
||
|
else
|
||
|
if filesize >= 1000000000
|
||
|
" GB.
|
||
|
let suffix = 'G'
|
||
|
let size = filesize / 1024 / 1024
|
||
|
elseif filesize >= 1000000
|
||
|
" MB.
|
||
|
let suffix = 'M'
|
||
|
let size = filesize / 1024
|
||
|
elseif filesize >= 1000
|
||
|
" KB.
|
||
|
let suffix = 'K'
|
||
|
let size = filesize
|
||
|
endif
|
||
|
|
||
|
let float = (size%1024)*100/1024
|
||
|
let digit = size / 1024
|
||
|
let pattern = (digit < 100) ?
|
||
|
\ printf('%2d.%02d', digit, float) :
|
||
|
\ printf('%2d.%01d', digit, float/10)
|
||
|
endif
|
||
|
|
||
|
return pattern . suffix
|
||
|
endfunction
|
||
|
|
||
|
" @vimlint(EVL101, 1, l:pattern)
|
||
|
function! s:get_lua_file_size(filename) abort
|
||
|
lua << EOF
|
||
|
do
|
||
|
local file = io.open(vim.eval('iconv(a:filename, &encoding, "char")'))
|
||
|
local pattern
|
||
|
if file ~= nil then
|
||
|
local mega = math.floor(file:seek('end') / (1024 * 1024) + 0.5)
|
||
|
local float = math.floor((mega%1024)*100/1024 + 0.5)
|
||
|
pattern = string.format('%2d.%02d', math.floor(mega/1024), float)
|
||
|
file:close()
|
||
|
else
|
||
|
pattern = ''
|
||
|
end
|
||
|
vim.command('let pattern = "' .. pattern .. '"')
|
||
|
end
|
||
|
EOF
|
||
|
|
||
|
return pattern
|
||
|
endfunction
|
||
|
" @vimlint(EVL101, 0, l:pattern)
|