let cmd_textwidth = 80
let blankmax = 10
function! Sh_list(format, target, alltype, sort)
let l:lists = []
let l:alltype = a:alltype
if a:format == 'long'
let l:method = 'LongList'
let l:alltype = 1
else
let l:method = 'ShortList'
endif
if a:target == ""
let l:target = '*'
else
let l:target = a:target
endif
if a:sort == ''
let l:sort = 'name'
endif
if (l:alltype == 1 && a:target == '')
let l:lists += GlobList('.*')
endif
let l:lists += GlobList(l:target)
exec 'return ' .l:method .'(l:lists)'
endfunction
function! ArrangeNumber(num)
if a:num < 1
return a:num
endif
let l:len = strlen(a:num)
if l:len <= 3
return a:num
endif
let l:result = ""
let l:modulo = l:len % 3
if l:modulo != 0
let l:result .= a:num[0:(l:modulo -1)] .','
endif
for l:i in range(l:modulo, l:len -1, 3)
let l:result .= a:num[(l:i):(l:i +2)] .','
endfor
return l:result[:-2]
endfunction
function! GlobList(elm)
return split(glob(a:elm), '\n')
endfunction
function! Blank(limit)
if a:limit < 1
return ""
endif
let l:blank = ""
for l:count in range(0, a:limit)
let l:blank .= " "
endfor
return l:blank
endfunction
function! LongList(list)
if exists('l:text')
unlet l:text
endif
let l:text = ""
let l:max = len(a:list) -1
for l:i in range(0, l:max)
let l:fsize = ArrangeNumber(getfsize(a:list[l:i]))
if getftype(a:list[l:i]) == 'dir'
let a:list[l:i] .= "/"
endif
let l:text .= Blank(g:blankmax - len(l:fsize)) .l:fsize ." "
\.strftime("%Y-%m-%d %H:%M", getftime(a:list[l:i])) ." " .a:list[l:i] ."\n"
endfor
return l:text
endfunction
function! ShortList(list)
if exists('l:text')
unlet l:text
endif
let l:text = ""
let l:max = len(a:list) -1
let l:string_ml = 0
for l:i in range(0, l:max)
if l:string_ml < len(a:list[l:i])
let l:string_ml = len(a:list[l:i])
endif
endfor
let l:string_ml += 1
let l:row = g:cmd_textwidth / l:string_ml
let l:g = 0
let l:ftype = ""
for l:i in range(0, l:max)
let l:ftype = getftype(a:list[l:i])
if l:ftype == 'dir'
let a:list[l:i] .= "/"
endif
if l:g < l:row
let l:text .= a:list[l:i] .Blank(l:string_ml - len(a:list[l:i]))
let l:g += 1
else
let l:text .= a:list[l:i] ."\n"
let l:g = 0
endif
endfor
return l:text
endfunction
fini