mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-04-13 14:59:10 +08:00
Merge branch 'drawing' into dev
This commit is contained in:
commit
69c132992c
104
autoload/SpaceVim/api/data/json.vim
Normal file
104
autoload/SpaceVim/api/data/json.vim
Normal file
@ -0,0 +1,104 @@
|
||||
let s:json = {}
|
||||
|
||||
|
||||
if exists('*json_decode')
|
||||
let g:spacevim_api_json_true = v:true
|
||||
let g:spacevim_api_json_true = v:false
|
||||
let g:spacevim_api_json_true = v:null
|
||||
function! s:json_decode(json) abort
|
||||
if a:json ==# ''
|
||||
return []
|
||||
endif
|
||||
return json_decode(a:json)
|
||||
endfunction
|
||||
else
|
||||
function! s:json_null() abort
|
||||
endfunction
|
||||
|
||||
function! s:json_true() abort
|
||||
endfunction
|
||||
|
||||
function! s:json_false() abort
|
||||
endfunction
|
||||
|
||||
let g:spacevim_api_json_true = [function('s:json_true')]
|
||||
let g:spacevim_api_json_false = [function('s:json_false')]
|
||||
let g:spacevim_api_json_null = [function('s:json_null')]
|
||||
" @vimlint(EVL102, 1, l:true)
|
||||
" @vimlint(EVL102, 1, l:false)
|
||||
" @vimlint(EVL102, 1, l:null)
|
||||
function! s:json_decode(json) abort
|
||||
let true = g:spacevim_api_json_true
|
||||
let false = g:spacevim_api_json_false
|
||||
let null = g:spacevim_api_json_null
|
||||
if substitute(a:json, '\v\"%(\\.|[^"\\])*\"|true|false|null|[+-]?\d+%(\.\d+%([Ee][+-]?\d+)?)?', '', 'g') !~# "[^,:{}[\\] \t]"
|
||||
|
||||
try
|
||||
let object = eval(a:json)
|
||||
catch
|
||||
" malformed JSON
|
||||
let object = ''
|
||||
endtry
|
||||
else
|
||||
let object = ''
|
||||
endif
|
||||
|
||||
return object
|
||||
endfunction
|
||||
" @vimlint(EVL102, 0, l:true)
|
||||
" @vimlint(EVL102, 0, l:false)
|
||||
" @vimlint(EVL102, 0, l:null)
|
||||
endif
|
||||
|
||||
lockvar g:spacevim_api_json_true
|
||||
lockvar g:spacevim_api_json_false
|
||||
lockvar g:spacevim_api_json_null
|
||||
|
||||
let s:json['json_decode'] = function('s:json_decode')
|
||||
|
||||
if exists('*json_encode')
|
||||
function! s:json_encode(val) abort
|
||||
return json_encode(a:val)
|
||||
endfunction
|
||||
else
|
||||
function! s:json_encode(val) abort
|
||||
if type(a:val) == type(0)
|
||||
return a:val
|
||||
elseif type(a:val) == type('')
|
||||
let json = '"' . escape(a:val, '\"') . '"'
|
||||
let json = substitute(json, "\r", '\\r', 'g')
|
||||
let json = substitute(json, "\n", '\\n', 'g')
|
||||
let json = substitute(json, "\t", '\\t', 'g')
|
||||
let json = substitute(json, '\([[:cntrl:]]\)', '\=printf("\x%02d", char2nr(submatch(1)))', 'g')
|
||||
return iconv(json, &encoding, 'utf-8')
|
||||
elseif type(a:val) == 2
|
||||
let s = string(a:val)
|
||||
if s == string(g:spacevim_api_json_null)
|
||||
return 'null'
|
||||
elseif s == string(g:spacevim_api_json_true)
|
||||
return 'true'
|
||||
elseif s == string(g:spacevim_api_json_false)
|
||||
return 'false'
|
||||
endif
|
||||
elseif type(a:val) == type([])
|
||||
if len(a:val) == 1 && a:val[0] == g:spacevim_api_json_false[0]
|
||||
return 'false'
|
||||
elseif len(a:val) == 1 && a:val[0] == g:spacevim_api_json_true[0]
|
||||
return 'true'
|
||||
elseif len(a:val) == 1 && a:val[0] == g:spacevim_api_json_null[0]
|
||||
return 'null'
|
||||
endif
|
||||
return '[' . join(map(copy(a:val), 's:json_encode(v:val)'), ',') . ']'
|
||||
elseif type(a:val) == 4
|
||||
return '{' . join(map(keys(a:val), "s:json_encode(v:val) . ':' . s:json_encode(a:val[v:val])"), ',') . '}'
|
||||
else
|
||||
return string(a:val)
|
||||
endif
|
||||
endfunction
|
||||
endif
|
||||
|
||||
let s:json['json_encode'] = function('s:json_encode')
|
||||
|
||||
function! SpaceVim#api#data#json#get() abort
|
||||
return deepcopy(s:json)
|
||||
endfunction
|
@ -7,6 +7,25 @@ endfunction
|
||||
|
||||
let s:file['trim'] = function('s:trim')
|
||||
|
||||
function! s:fill(str, length) abort
|
||||
if strwidth(a:str) <= a:length
|
||||
return a:str . repeat(' ', a:length - strwidth(a:str))
|
||||
else
|
||||
let l = 0
|
||||
for i in range(strchars(a:str) - 1)
|
||||
if strwidth(strcharpart(a:str, 0, i)) > a:length
|
||||
break
|
||||
else
|
||||
let l = i
|
||||
endif
|
||||
endfor
|
||||
let str = strcharpart(a:str, 0, l)
|
||||
return str . repeat(' ', a:length - strwidth(str))
|
||||
endif
|
||||
endfunction
|
||||
|
||||
let s:file['fill'] = function('s:fill')
|
||||
|
||||
function! s:trim_start(str) abort
|
||||
return substitute(a:str, '^\s*', '', 'g')
|
||||
endfunction
|
||||
|
@ -151,6 +151,30 @@ endfunction
|
||||
|
||||
let s:file['fticon'] = function('s:filetypeIcon')
|
||||
|
||||
function! s:write(msg, fname) abort
|
||||
let flags = filewritable(a:fname) ? 'a' : ''
|
||||
call writefile([a:msg], a:fname, flags)
|
||||
endfunction
|
||||
|
||||
let s:file['write'] = function('s:write')
|
||||
|
||||
function! s:override(msg, fname) abort
|
||||
let flags = filewritable(a:fname) ? 'b' : ''
|
||||
call writefile([a:msg], a:fname, flags)
|
||||
endfunction
|
||||
|
||||
let s:file['override'] = function('s:override')
|
||||
|
||||
function! s:read(fname) abort
|
||||
if filereadable(a:fname)
|
||||
return readfile(a:fname, '')
|
||||
else
|
||||
return ''
|
||||
endif
|
||||
endfunction
|
||||
|
||||
let s:file['read'] = function('s:read')
|
||||
|
||||
function! SpaceVim#api#file#get() abort
|
||||
return deepcopy(s:file)
|
||||
endfunction
|
||||
|
81
autoload/SpaceVim/api/unicode/box.vim
Normal file
81
autoload/SpaceVim/api/unicode/box.vim
Normal file
@ -0,0 +1,81 @@
|
||||
let s:box = {}
|
||||
let s:json = SpaceVim#api#import('data#json')
|
||||
let s:string = SpaceVim#api#import('data#string')
|
||||
scriptencoding utf-8
|
||||
" http://jrgraphix.net/r/Unicode/2500-257F
|
||||
" http://www.alanflavell.org.uk/unicode/unidata.html
|
||||
|
||||
" json should be a list of items which have same keys
|
||||
function! s:drawing_table(json, ...) abort
|
||||
if empty(a:json)
|
||||
return []
|
||||
endif
|
||||
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 items = s:json.json_decode(a:json)
|
||||
let col = len(keys(items[0]))
|
||||
let top_line = top_left_corner
|
||||
\ . repeat(repeat(top_bottom_side, 15) . top_middle, col - 1)
|
||||
\ . repeat(top_bottom_side, 15)
|
||||
\ . top_right_corner
|
||||
let middle_line = left_middle
|
||||
\ . repeat(repeat(top_bottom_side, 15) . middle, col - 1)
|
||||
\ . repeat(top_bottom_side, 15)
|
||||
\ . right_middle
|
||||
let bottom_line = bottom_left_corner
|
||||
\ . repeat(repeat(top_bottom_side, 15) . bottom_middle, col - 1)
|
||||
\ . repeat(top_bottom_side, 15)
|
||||
\ . bottom_right_corner
|
||||
call add(table, top_line)
|
||||
let tytle = side
|
||||
if a:0 == 0
|
||||
let keys = keys(items[0])
|
||||
else
|
||||
let keys = a:1
|
||||
endif
|
||||
for key in keys
|
||||
let tytle .= s:string.fill(key , 15) . side
|
||||
endfor
|
||||
call add(table, tytle)
|
||||
call add(table, middle_line)
|
||||
for item in items
|
||||
let value_line = side
|
||||
for key in keys
|
||||
let value_line .= s:string.fill(item[key], 15) . side
|
||||
endfor
|
||||
call add(table, value_line)
|
||||
call add(table, middle_line)
|
||||
endfor
|
||||
let table[-1] = bottom_line
|
||||
return table
|
||||
endfunction
|
||||
|
||||
let s:box['drawing_table'] = function('s:drawing_table')
|
||||
|
||||
function! SpaceVim#api#unicode#box#get() abort
|
||||
return deepcopy(s:box)
|
||||
endfunction
|
@ -22,38 +22,36 @@ let $NVIM_TUI_ENABLE_CURSOR_SHAPE=2
|
||||
"silent! let &t_SR = "\<Esc>]50;CursorShape=2\x7"
|
||||
"silent! let &t_EI = "\<Esc>]50;CursorShape=0\x7"
|
||||
" dark0 + gray
|
||||
let g:terminal_color_0 = "#282828"
|
||||
let g:terminal_color_8 = "#928374"
|
||||
let g:terminal_color_0 = '#282828'
|
||||
let g:terminal_color_8 = '#928374'
|
||||
|
||||
" neurtral_red + bright_red
|
||||
let g:terminal_color_1 = "#cc241d"
|
||||
let g:terminal_color_9 = "#fb4934"
|
||||
let g:terminal_color_1 = '#cc241d'
|
||||
let g:terminal_color_9 = '#fb4934'
|
||||
|
||||
" neutral_green + bright_green
|
||||
let g:terminal_color_2 = "#98971a"
|
||||
let g:terminal_color_10 = "#b8bb26"
|
||||
let g:terminal_color_2 = '#98971a'
|
||||
let g:terminal_color_10 = '#b8bb26'
|
||||
|
||||
" neutral_yellow + bright_yellow
|
||||
let g:terminal_color_3 = "#d79921"
|
||||
let g:terminal_color_11 = "#fabd2f"
|
||||
let g:terminal_color_3 = '#d79921'
|
||||
let g:terminal_color_11 = '#fabd2f'
|
||||
|
||||
" neutral_blue + bright_blue
|
||||
let g:terminal_color_4 = "#458588"
|
||||
let g:terminal_color_12 = "#83a598"
|
||||
let g:terminal_color_4 = '#458588'
|
||||
let g:terminal_color_12 = '#83a598'
|
||||
|
||||
" neutral_purple + bright_purple
|
||||
let g:terminal_color_5 = "#b16286"
|
||||
let g:terminal_color_13 = "#d3869b"
|
||||
let g:terminal_color_5 = '#b16286'
|
||||
let g:terminal_color_13 = '#d3869b'
|
||||
|
||||
" neutral_aqua + faded_aqua
|
||||
let g:terminal_color_6 = "#689d6a"
|
||||
let g:terminal_color_14 = "#8ec07c"
|
||||
let g:terminal_color_6 = '#689d6a'
|
||||
let g:terminal_color_14 = '#8ec07c'
|
||||
|
||||
" light4 + light1
|
||||
let g:terminal_color_7 = "#a89984"
|
||||
let g:terminal_color_15 = "#ebdbb2"
|
||||
nnoremap <nowait> <FocusGained> <Nop>
|
||||
nnoremap <nowait> <FocusLost> <Nop>
|
||||
let g:terminal_color_7 = '#a89984'
|
||||
let g:terminal_color_15 = '#ebdbb2'
|
||||
augroup Terminal
|
||||
au!
|
||||
au TermOpen * let g:last_terminal_job_id = b:terminal_job_id | IndentLinesDisable
|
||||
|
Loading…
x
Reference in New Issue
Block a user