1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-03-24 10:47:07 +08:00

Compare commits

..

No commits in common. "057c0d5ed0879739d8136dd99820322198844d2e" and "f7256667837d98cfeb0b1b099a4ba5c222c3e822" have entirely different histories.

6 changed files with 163 additions and 209 deletions

View File

@ -179,39 +179,6 @@ main () {
rm -rf detach/$1
exit 0
;;
SourceCounter.vim)
git clone https://github.com/wsdjeg/SourceCounter.vim.git detach/$1
cd detach/$1
_checkdir plugin
_detact_bundle SourceCounter.vim plugin/SourceCounter.vim
_checkdir autoload
_detact_bundle SourceCounter.vim autoload/SourceCounter.vim
_checkdir doc
_detact_bundle SourceCounter.vim doc/SourceCounter.vim.txt
_detact_bundle SourceCounter.vim README.md
_detact_bundle SourceCounter.vim addon-info.json
_detact LICENSE
_checkdir pic
_detact_bundle SourceCounter.vim pic/screen.png
_checkdir autoload/SpaceVim/api/vim
_checkdir autoload/SpaceVim/api/data
_detact autoload/SpaceVim/api/notify.vim
_detact autoload/SpaceVim/api/data/string.vim
_detact autoload/SpaceVim/api/data/number.vim
_detact autoload/SpaceVim/api/vim/buffer.vim
_detact autoload/SpaceVim/api/vim/floatting.vim
_checkdir autoload/SpaceVim/api/neovim
_detact autoload/SpaceVim/api/neovim/floatting.vim
git add .
git config user.email "eric@wsdjeg.net"
git config user.name "Eric Wong"
git commit -m "Auto Update based on https://github.com/SpaceVim/SpaceVim/commit/${GITHUB_SHA}"
git remote add wsdjeg_sourcecounter https://SpaceVimBot:${BOTSECRET}@github.com/wsdjeg/SourceCounter.vim.git
git push wsdjeg_sourcecounter master
cd -
rm -rf detach/$1
exit 0
;;
iedit)
git clone https://github.com/wsdjeg/iedit.vim.git detach/$1
cd detach/$1

View File

@ -7,7 +7,7 @@ jobs:
strategy:
fail-fast: false
matrix:
detachPlugin: ["flygrep", "dein-ui", "vim-todo", "iedit", "scrollbar.vim", "vim-chat", "vim-cheat", "xmake.vim", "github.vim", "JavaUnit.vim", "git.vim", "cpicker.nvim", "SourceCounter.vim"]
detachPlugin: ["flygrep", "dein-ui", "vim-todo", "iedit", "scrollbar.vim", "vim-chat", "vim-cheat", "xmake.vim", "github.vim", "JavaUnit.vim", "git.vim", "cpicker.nvim"]
runs-on: ubuntu-latest
steps:
- name: Checkout

View File

@ -26,22 +26,26 @@ if has('nvim-0.10.0')
call SpaceVim#logger#info('run root changed callback on VimEnter!')
call SpaceVim#plugins#projectmanager#RootchandgeCallback()
if !empty(get(g:, '_spacevim_bootstrap_after', ''))
function! s:bootstrap_after(...) abort
try
call call(g:_spacevim_bootstrap_after, [])
let g:_spacevim_bootstrap_after_success = 1
catch
call SpaceVim#logger#error('failed to call bootstrap_after function: ' . g:_spacevim_bootstrap_after)
call SpaceVim#logger#error(' exception: ' . v:exception)
call SpaceVim#logger#error(' throwpoint: ' . v:throwpoint)
let g:_spacevim_bootstrap_after_success = 0
endtry
endfunction
if has('timers')
call timer_start(g:spacevim_lazy_conf_timeout, function('s:bootstrap_after'))
else
call s:bootstrap_after()
endif
try
call call(g:_spacevim_bootstrap_after, [])
let g:_spacevim_bootstrap_after_success = 1
catch
call SpaceVim#logger#error('failed to call bootstrap_after function: ' . g:_spacevim_bootstrap_after)
call SpaceVim#logger#error(' exception: ' . v:exception)
call SpaceVim#logger#error(' throwpoint: ' . v:throwpoint)
let g:_spacevim_bootstrap_after_success = 0
endtry
endif
if !get(g:, '_spacevim_bootstrap_before_success', 1)
echohl Error
echom 'bootstrap_before function failed to execute. Check `SPC h L` for errors.'
echohl None
endif
if !get(g:, '_spacevim_bootstrap_after_success', 1)
echohl Error
echom 'bootstrap_after function failed to execute. Check `SPC h L` for errors.'
echohl None
endif
if !filereadable('.SpaceVim.d/init.toml') && filereadable('.SpaceVim.d/init.vim')

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016 Wang Shidong
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,188 +1,150 @@
let s:JOB = SpaceVim#api#import('job')
let s:NOTI = SpaceVim#api#import('notify')
scriptencoding utf-8
let s:support_ft = ['vim', 'java', 'c', 'py', 'md', 'txt']
function! SourceCounter#View(bang, ...) abort
call s:NOTI.notify(string(a:000))
let fts = []
let dirs = []
let result = {}
let argv_type = ''
for argv in a:000
if argv == '-d'
let argv_type = 'dir'
continue
elseif argv == '-ft'
let argv_type = 'filetype'
continue
let result = []
if a:0
let fts = a:000
else
let fts = s:support_ft
endif
if argv_type == 'dir'
call add(dirs, argv)
elseif argv_type == 'filetype'
call add(fts, argv)
endif
endfor
call s:NOTI.notify('counting for: ' . join(fts, ', '))
" return
for dir in dirs
call s:NOTI.notify('counting for: ' . join(fts, ', '))
" return
for ft in fts
let _rs = s:counter(ft, dir)
if !empty(_rs)
if has_key(result, ft)
let result[ft].files = result[ft].files + _rs.files
let result[ft].lines = result[ft].lines + _rs.lines
else
let result[ft] = {
\ 'files' : _rs.files,
\ 'lines' : _rs.lines,
\ }
let _rs = s:counter(ft)
if !empty(_rs)
call add(result, _rs)
endif
endif
endfor
endfor
let result = sort(s:build(result), function('s:compare'))
let table = s:draw_table(result)
if a:bang
tabnew
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonumber norelativenumber
setlocal modifiable
noautocmd normal! gg"_dG
for line in table
call append(line('$'), line)
endfor
normal! G
setlocal nomodifiable
nnoremap <buffer><silent> q :bd<CR>
else
call s:NOTI.notify(join(table, "\n"))
endif
endfunction
function! s:build(rst) abort
let rst = []
for k in keys(a:rst)
call add(rst, [k, a:rst[k].files, a:rst[k].lines])
endfor
return rst
let result = sort(deepcopy(result), function('s:compare'))
let table = s:draw_table(result)
if a:bang
tabnew
for line in table
call append(line('$'), line)
endfor
else
call s:NOTI.notify(join(table, "\n"))
endif
endfunction
function! s:compare(a, b) abort
let m = get(g:, 'source_counter_sort', 'files')
if m ==# 'lines'
return a:a[2] == a:b[2] ? 0 : a:a[2] > a:b[2] ? -1 : 1
else
return a:a[1] == a:b[1] ? 0 : a:a[1] > a:b[1] ? -1 : 1
endif
let m = get(g:, 'source_counter_sort', 'files')
if m ==# 'lines'
return a:a[2] == a:b[2] ? 0 : a:a[2] > a:b[2] ? -1 : 1
else
return a:a[1] == a:b[1] ? 0 : a:a[1] > a:b[1] ? -1 : 1
endif
endfunction
" https://en.wikipedia.org/wiki/Box-drawing_character
function! s:draw_table(rst) abort
if &encoding ==# 'utf-8'
let top_left_corner = '╭'
let top_right_corner = '╮'
let bottom_left_corner = '╰'
let bottom_right_corner = '╯'
let side = '│'
let top_bottom_side = '─'
let middle = '┼'
let top_middle = '┬'
let left_middle = '├'
let right_middle = '┤'
let bottom_middle = '┴'
else
let top_left_corner = '*'
let top_right_corner = '*'
let bottom_left_corner = '*'
let bottom_right_corner = '*'
let side = '|'
let top_bottom_side = '-'
let middle = '*'
let top_middle = '*'
let left_middle = '*'
let right_middle = '*'
let bottom_middle = '*'
endif
let table = []
let top_line = top_left_corner
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_right_corner
if &encoding ==# 'utf-8'
let top_left_corner = '╭'
let top_right_corner = '╮'
let bottom_left_corner = '╰'
let bottom_right_corner = '╯'
let side = '│'
let top_bottom_side = '─'
let middle = '┼'
let top_middle = '┬'
let left_middle = '├'
let right_middle = '┤'
let bottom_middle = '┴'
else
let top_left_corner = '*'
let top_right_corner = '*'
let bottom_left_corner = '*'
let bottom_right_corner = '*'
let side = '|'
let top_bottom_side = '-'
let middle = '*'
let top_middle = '*'
let left_middle = '*'
let right_middle = '*'
let bottom_middle = '*'
endif
let table = []
let top_line = top_left_corner
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_right_corner
let middle_line = left_middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . right_middle
let middle_line = left_middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . right_middle
let bottom_line = bottom_left_corner
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_right_corner
let bottom_line = bottom_left_corner
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_right_corner
call add(table, top_line)
let result = [['filetype', 'files', 'lines']] + a:rst
for rsl in result
let ft_line = side
\ . rsl[0] . repeat(' ', 15 - strwidth(rsl[0]))
\ . side
\ . rsl[1] . repeat(' ', 15 - strwidth(rsl[1]))
\ . side
\ . rsl[2] . repeat(' ', 15 - strwidth(rsl[2]))
\ . side
call add(table, ft_line)
call add(table, middle_line)
endfor
let table[-1] = bottom_line
return table
call add(table, top_line)
let result = [['filetype', 'files', 'lines']] + a:rst
for rsl in result
let ft_line = side
\ . rsl[0] . repeat(' ', 15 - strwidth(rsl[0]))
\ . side
\ . rsl[1] . repeat(' ', 15 - strwidth(rsl[1]))
\ . side
\ . rsl[2] . repeat(' ', 15 - strwidth(rsl[2]))
\ . side
call add(table, ft_line)
call add(table, middle_line)
endfor
let table[-1] = bottom_line
return table
endfunction
function! s:list_files_stdout(id, data, event) abort
endfunction
function! s:list_files_exit(id, data, event) abort
endfunction
function! s:counter(ft, dir) abort
if executable('ag')
if has('nvim')
let files = systemlist(['ag','-g', '.' . a:ft . '$'])
else
let files = split(system('ag -g .'.a:ft.'$'),nr2char(10))
endif
else
function! s:counter(ft) abort
let path = getcwd()
let partten = '**/*.' . a:ft
let files = globpath(a:dir, l:partten, 0, 1)
endif
if len(files) == 0
return []
endif
let lines = 0
let _file_count = len(files)
if has('nvim')
if len(files) > 380
while !empty(files)
let _fs = remove(files, 0, min([380, len(files) - 1]))
let _rst = systemlist(['wc', '-l'] + _fs)[-1]
let lines += matchstr(_rst, '\d\+')
endwhile
if executable('ag')
if has('nvim')
let files = systemlist(['ag','-g', '.' . a:ft . '$'])
else
let files = split(system('ag -g .'.a:ft.'$'),nr2char(10))
endif
else
let lines = matchstr(systemlist(['wc', '-l'] + files)[-1], '\d\+')
let files = globpath(l:path, l:partten, 0, 1)
endif
else
for fl in files
let lines += str2nr(matchstr(system('wc -l '. fl), '\d\+'))
endfor
endif
return {'files' : _file_count, 'lines' : lines}
if len(files) == 0
return []
endif
let lines = 0
if has('nvim')
if len(files) > 380
while !empty(files)
let lines += matchstr(systemlist(['wc', '-l'] + remove(files, 0, min([380, len(files) - 1])))[-1], '\d\+')
endwhile
else
let lines = matchstr(systemlist(['wc', '-l'] + files)[-1], '\d\+')
endif
else
for fl in files
let lines += str2nr(matchstr(system('wc -l '. fl), '\d\+'))
endfor
endif
return [a:ft, len(files), lines]
endfunction

View File

@ -3,9 +3,9 @@ wsdjeg *SourceCounter.vim*
==============================================================================
CONTENTS *SourceCounter.vim-contents*
1. Introduction..................................... |SourceCounter.vim-intro|
2. Configuration................................... |SourceCounter.vim-config|
3. Commands...................................... |SourceCounter.vim-commands|
1. Introduction....................................|SourceCounter.vim-intro|
2. Configuration..................................|SourceCounter.vim-config|
3. Commands.....................................|SourceCounter.vim-commands|
==============================================================================
INTRODUCTION *SourceCounter.vim-intro*