From 74ac6ab4b6a23c570d8bdc5c2ec9795d222010a3 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Mon, 27 Feb 2017 23:40:55 +0800 Subject: [PATCH 1/8] Add box api --- autoload/SpaceVim/api/unicode/box.vim | 45 +++++++++++++++++++++++++++ config/neovim.vim | 34 ++++++++++---------- 2 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 autoload/SpaceVim/api/unicode/box.vim diff --git a/autoload/SpaceVim/api/unicode/box.vim b/autoload/SpaceVim/api/unicode/box.vim new file mode 100644 index 000000000..88762568d --- /dev/null +++ b/autoload/SpaceVim/api/unicode/box.vim @@ -0,0 +1,45 @@ +let s:box = {} +scriptencoding utf-8 +" http://jrgraphix.net/r/Unicode/2500-257F + +" 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 col = len(keys(a:json[0])) + + + + +endfunction + +function! SpaceVim#api#file#get() abort + return deepcopy(s:box) +endfunction diff --git a/config/neovim.vim b/config/neovim.vim index b558d8b24..a1253467f 100644 --- a/config/neovim.vim +++ b/config/neovim.vim @@ -22,38 +22,36 @@ let $NVIM_TUI_ENABLE_CURSOR_SHAPE=2 "silent! let &t_SR = "\]50;CursorShape=2\x7" "silent! let &t_EI = "\]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 -nnoremap +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 From 96e2c38d933cbe4d52d6cf8d90bd6bbfae08fcc3 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Tue, 28 Feb 2017 01:54:49 +0800 Subject: [PATCH 2/8] Update box api --- autoload/SpaceVim/api/data/json.vim | 22 ++++++++++++++ autoload/SpaceVim/api/data/string.vim | 19 ++++++++++++ autoload/SpaceVim/api/unicode/box.vim | 43 +++++++++++++++++++++++---- 3 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 autoload/SpaceVim/api/data/json.vim diff --git a/autoload/SpaceVim/api/data/json.vim b/autoload/SpaceVim/api/data/json.vim new file mode 100644 index 000000000..acfc36e41 --- /dev/null +++ b/autoload/SpaceVim/api/data/json.vim @@ -0,0 +1,22 @@ +let s:json = {} + +function! s:json_encode(expr) abort + " TODO + " support old vim version + return json_encode(a:expr) +endfunction + +let s:json['json_encode'] = function('s:json_encode') + +function! s:json_decode(json) abort + " TODO + " support old vim version + return json_decode(a:json) +endfunction + +let s:json['json_decode'] = function('s:json_decode') + + +function! SpaceVim#api#data#json#get() abort + return deepcopy(s:json) +endfunction diff --git a/autoload/SpaceVim/api/data/string.vim b/autoload/SpaceVim/api/data/string.vim index 148b0a96b..26398425a 100644 --- a/autoload/SpaceVim/api/data/string.vim +++ b/autoload/SpaceVim/api/data/string.vim @@ -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 diff --git a/autoload/SpaceVim/api/unicode/box.vim b/autoload/SpaceVim/api/unicode/box.vim index 88762568d..2c2ea358c 100644 --- a/autoload/SpaceVim/api/unicode/box.vim +++ b/autoload/SpaceVim/api/unicode/box.vim @@ -1,6 +1,9 @@ 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 @@ -33,13 +36,41 @@ function! s:drawing_table(json) abort let bottom_middle = '*' endif let table = [] - let col = len(keys(a:json[0])) - - - - + 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 + let keys = keys(items[0]) + for key in keys + let tytle .= s:string.fill(items[0][key], 15) . side + endfor + call add(table, tytle) + 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 -function! SpaceVim#api#file#get() abort +let s:box['drawing_table'] = function('s:drawing_table') + +function! SpaceVim#api#unicode#box#get() abort return deepcopy(s:box) endfunction From f687f841fda47e8d3cd46cb79dc740b106b010ac Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Tue, 28 Feb 2017 18:51:56 +0800 Subject: [PATCH 3/8] Fix box drawing table func --- autoload/SpaceVim/api/unicode/box.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoload/SpaceVim/api/unicode/box.vim b/autoload/SpaceVim/api/unicode/box.vim index 2c2ea358c..8e74ec3ef 100644 --- a/autoload/SpaceVim/api/unicode/box.vim +++ b/autoload/SpaceVim/api/unicode/box.vim @@ -54,9 +54,10 @@ function! s:drawing_table(json) abort let tytle = side let keys = keys(items[0]) for key in keys - let tytle .= s:string.fill(items[0][key], 15) . side + 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 From 6036899300ae684a221103276c757437b50d2594 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Tue, 28 Feb 2017 21:42:05 +0800 Subject: [PATCH 4/8] Update file api --- autoload/SpaceVim/api/data/json.vim | 3 +++ autoload/SpaceVim/api/file.vim | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/autoload/SpaceVim/api/data/json.vim b/autoload/SpaceVim/api/data/json.vim index acfc36e41..3d6532486 100644 --- a/autoload/SpaceVim/api/data/json.vim +++ b/autoload/SpaceVim/api/data/json.vim @@ -9,6 +9,9 @@ endfunction let s:json['json_encode'] = function('s:json_encode') function! s:json_decode(json) abort + if empty(a:json) && type(a:json) == type('') + return '' + endif " TODO " support old vim version return json_decode(a:json) diff --git a/autoload/SpaceVim/api/file.vim b/autoload/SpaceVim/api/file.vim index 5704ddcd9..48258c8fb 100644 --- a/autoload/SpaceVim/api/file.vim +++ b/autoload/SpaceVim/api/file.vim @@ -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 From 57d332d8c6f38dc21f7bca9a52b95eba1a8064b7 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Tue, 28 Feb 2017 23:31:52 +0800 Subject: [PATCH 5/8] Add order support --- autoload/SpaceVim/api/unicode/box.vim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/autoload/SpaceVim/api/unicode/box.vim b/autoload/SpaceVim/api/unicode/box.vim index 8e74ec3ef..2a2d553c2 100644 --- a/autoload/SpaceVim/api/unicode/box.vim +++ b/autoload/SpaceVim/api/unicode/box.vim @@ -6,7 +6,7 @@ scriptencoding utf-8 " 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 +function! s:drawing_table(json, ...) abort if empty(a:json) return [] endif @@ -52,7 +52,11 @@ function! s:drawing_table(json) abort \ . bottom_right_corner call add(table, top_line) let tytle = side - let keys = keys(items[0]) + 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 From e69cfe158a8c305cf3de0b8e056778cfd96d8c5f Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Wed, 1 Mar 2017 17:03:26 +0800 Subject: [PATCH 6/8] Fix json api --- autoload/SpaceVim/api/data/json.vim | 104 +++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 16 deletions(-) diff --git a/autoload/SpaceVim/api/data/json.vim b/autoload/SpaceVim/api/data/json.vim index 3d6532486..d7a0947c3 100644 --- a/autoload/SpaceVim/api/data/json.vim +++ b/autoload/SpaceVim/api/data/json.vim @@ -1,25 +1,97 @@ let s:json = {} -function! s:json_encode(expr) abort - " TODO - " support old vim version - return json_encode(a:expr) + +if exists('*json_decode') && 0 + 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')] + + 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 +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') + +function! s:json_encode(val) abort + if exists('*json_decode') && 0 + return json_encode(a:val) + else + 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 + endif endfunction let s:json['json_encode'] = function('s:json_encode') -function! s:json_decode(json) abort - if empty(a:json) && type(a:json) == type('') - return '' - endif - " TODO - " support old vim version - return json_decode(a:json) -endfunction - -let s:json['json_decode'] = function('s:json_decode') - - function! SpaceVim#api#data#json#get() abort return deepcopy(s:json) endfunction From 3d1581b599a470d2f43d3322acd494ab4f14f851 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Wed, 1 Mar 2017 17:07:56 +0800 Subject: [PATCH 7/8] Fix lint --- autoload/SpaceVim/api/data/json.vim | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/autoload/SpaceVim/api/data/json.vim b/autoload/SpaceVim/api/data/json.vim index d7a0947c3..f649d9a86 100644 --- a/autoload/SpaceVim/api/data/json.vim +++ b/autoload/SpaceVim/api/data/json.vim @@ -1,7 +1,7 @@ let s:json = {} -if exists('*json_decode') && 0 +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 @@ -51,10 +51,12 @@ lockvar g:spacevim_api_json_null let s:json['json_decode'] = function('s:json_decode') -function! s:json_encode(val) abort - if exists('*json_decode') && 0 +if exists('*json_encode') + function! s:json_encode(val) abort return json_encode(a:val) - else + endfunction +else + function! s:json_encode(val) abort if type(a:val) == type(0) return a:val elseif type(a:val) == type('') @@ -87,8 +89,8 @@ function! s:json_encode(val) abort else return string(a:val) endif - endif -endfunction + endfunction +endif let s:json['json_encode'] = function('s:json_encode') From ae3c08a75824c5318699e7dde2629642f0e83976 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Wed, 1 Mar 2017 19:26:25 +0800 Subject: [PATCH 8/8] Fix EVL102 --- autoload/SpaceVim/api/data/json.vim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/autoload/SpaceVim/api/data/json.vim b/autoload/SpaceVim/api/data/json.vim index f649d9a86..707248680 100644 --- a/autoload/SpaceVim/api/data/json.vim +++ b/autoload/SpaceVim/api/data/json.vim @@ -24,7 +24,9 @@ else 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 @@ -43,6 +45,9 @@ else 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