From 153150b8d9ec4e4a001d730075667233971386b9 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Sat, 20 Oct 2018 11:13:01 +0900 Subject: [PATCH 01/16] Add: gettag [WIP] --- autoload/qiita.vim | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 66bb007..593c2b8 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -257,6 +257,26 @@ function! s:fix_tags(tags) endfor endfunction + +function! Gettag(tag_string) + if ! len(a:tag_string) + return [] + else + let tag_string = deepcopy(a:tag_string) + tag_string = substitute(tag_string, '\zs[^\[\]]*\ze\[[^\]]*\]', '', '') " remove non-tag strings + tag_string = substitute(tag_string, '\[[^\]]*\]\zs[^\[]*\ze', '', '') " + + " generate expr + let expr = "" + for i in len(substitute(tag_string, '[^\[]', '', 'g')) + expr += '\[\([^\[]*\)\]' + endfor + + let tag_list = matchlist(tag_string, expr) + return tag_list +endfunction + + function! s:write_item(api, id, title, content) if len(a:id) redraw | echon 'Updating item... ' From e6791b310214a5565a06ce458517964df0af43bf Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Sat, 20 Oct 2018 11:48:26 +0900 Subject: [PATCH 02/16] Fix: use 'tags_*' instead of 'tag_*' Because 'tag' seems to be conflict with vim command --- autoload/qiita.vim | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 593c2b8..3322396 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -258,22 +258,22 @@ function! s:fix_tags(tags) endfunction -function! Gettag(tag_string) - if ! len(a:tag_string) +function! Gettag(tags_string) + if ! len(a:tags_string) return [] else - let tag_string = deepcopy(a:tag_string) - tag_string = substitute(tag_string, '\zs[^\[\]]*\ze\[[^\]]*\]', '', '') " remove non-tag strings - tag_string = substitute(tag_string, '\[[^\]]*\]\zs[^\[]*\ze', '', '') " + let tags_string = deepcopy(a:tags_string) + let tags_string = substitute(tags_string, '\zs[^\[\]]*\ze\[[^\]]*\]', '', '') + let tags_string = substitute(tags_string, '\[[^\]]*\]\zs[^\[]*\ze', '', '') " generate expr let expr = "" - for i in len(substitute(tag_string, '[^\[]', '', 'g')) expr += '\[\([^\[]*\)\]' + for i in range(len(substitute(tags_string, '[^\[]', '', 'g'))) endfor - let tag_list = matchlist(tag_string, expr) - return tag_list + let tags_list = matchlist(tags_string, expr) + return tags_list endfunction From 09466b4e0891f1e21f50cefb8244c04db5ddfd22 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Sat, 20 Oct 2018 11:49:06 +0900 Subject: [PATCH 03/16] Fix: expression to create expr --- autoload/qiita.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 3322396..e24f8aa 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -268,8 +268,8 @@ function! Gettag(tags_string) " generate expr let expr = "" - expr += '\[\([^\[]*\)\]' for i in range(len(substitute(tags_string, '[^\[]', '', 'g'))) + let expr = expr . '\[\([^\[]*\)\]' endfor let tags_list = matchlist(tags_string, expr) From 33eaf3ccd1d4282066880ca6a1d25880dc3444ce Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Sat, 20 Oct 2018 13:04:00 +0900 Subject: [PATCH 04/16] Change: return only tag names --- autoload/qiita.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index e24f8aa..4c2e9ae 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -273,7 +273,7 @@ function! Gettag(tags_string) endfor let tags_list = matchlist(tags_string, expr) - return tags_list + return tags_list[1:] endfunction From d4be87044f3b891736c0c1d426bec536b19e5188 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Sat, 20 Oct 2018 13:04:32 +0900 Subject: [PATCH 05/16] Fix: erase all non-tag strings --- autoload/qiita.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 4c2e9ae..d832512 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -263,8 +263,8 @@ function! Gettag(tags_string) return [] else let tags_string = deepcopy(a:tags_string) - let tags_string = substitute(tags_string, '\zs[^\[\]]*\ze\[[^\]]*\]', '', '') - let tags_string = substitute(tags_string, '\[[^\]]*\]\zs[^\[]*\ze', '', '') + let tags_string = substitute(tags_string, '\zs[^\[\]]*\ze\[[^\]]*\]', '', 'g') + let tags_string = substitute(tags_string, '\[[^\]]*\]\zs[^\[]*\ze', '', 'g') " generate expr let expr = "" From 373afda1375826f71517d8832d192e67149318dd Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Sat, 20 Oct 2018 13:04:57 +0900 Subject: [PATCH 06/16] Change: throw exception if either of `[]` Because I couldn't make good regex which support `[]` I think this is caused because I use `[]` as the IFS of each tag. --- autoload/qiita.vim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index d832512..fd95cd3 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -262,13 +262,18 @@ function! Gettag(tags_string) if ! len(a:tags_string) return [] else + let bracket_s = len(substitute(a:tags_string, '[^\[]', '', 'g')) + let brachet_e = len(substitute(a:tags_string, '[^\]]', '', 'g')) + if bracket_s != brachet_e + throw "you can't use [] in tag" + endif let tags_string = deepcopy(a:tags_string) let tags_string = substitute(tags_string, '\zs[^\[\]]*\ze\[[^\]]*\]', '', 'g') let tags_string = substitute(tags_string, '\[[^\]]*\]\zs[^\[]*\ze', '', 'g') " generate expr let expr = "" - for i in range(len(substitute(tags_string, '[^\[]', '', 'g'))) + for i in range(bracket_s) let expr = expr . '\[\([^\[]*\)\]' endfor From d2a836a441ed2f89e5b931d4b794d5ad103e9d4d Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Sat, 20 Oct 2018 16:16:05 +0900 Subject: [PATCH 07/16] Change: add 'tags' for write_item --- autoload/qiita.vim | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index fd95cd3..365588c 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -461,16 +461,18 @@ function! qiita#Qiita(...) else if editpost let title = getline(1) - let content = join(getline(2, line('$')), "\n") - call s:write_item(api, id, title, content) + let tags = s:gettags(getline(2)) + let content = join(getline(3, line('$')), "\n") + call s:write_item(api, id, title, tags, content) elseif deletepost call s:delete_item(api, id) elseif len(id) > 0 call s:open_item(api, id) else let title = getline(1) - let content = join(getline(2, line('$')), "\n") - call s:write_item(api, '', title, content) + let tags = s:gettags(getline(2)) + let content = join(getline(3, line('$')), "\n") + call s:write_item(api, '', title, tags, content) endif endif return 1 From d99ae0021048cb6d8042e6c956adecad855a8c7e Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 19:01:36 +0900 Subject: [PATCH 08/16] Change: make Gettag function local --- autoload/qiita.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 365588c..9cc9685 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -258,7 +258,7 @@ function! s:fix_tags(tags) endfunction -function! Gettag(tags_string) +function! s:gettags(tags_string) if ! len(a:tags_string) return [] else From a886b8a210705d8fd9bd5758ee4a8375fa92cbd2 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 19:04:04 +0900 Subject: [PATCH 09/16] Change: use ' '(space) as IFS instead of '[]' I finally notice that qiita's tag can't contain ' '!! Why don't we use it as separator So that we don't have to parse '[]'.(that was difficult for me) ;) --- autoload/qiita.vim | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 9cc9685..7f43676 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -262,23 +262,16 @@ function! s:gettags(tags_string) if ! len(a:tags_string) return [] else - let bracket_s = len(substitute(a:tags_string, '[^\[]', '', 'g')) - let brachet_e = len(substitute(a:tags_string, '[^\]]', '', 'g')) - if bracket_s != brachet_e - throw "you can't use [] in tag" - endif - let tags_string = deepcopy(a:tags_string) - let tags_string = substitute(tags_string, '\zs[^\[\]]*\ze\[[^\]]*\]', '', 'g') - let tags_string = substitute(tags_string, '\[[^\]]*\]\zs[^\[]*\ze', '', 'g') - - " generate expr - let expr = "" - for i in range(bracket_s) - let expr = expr . '\[\([^\[]*\)\]' + let tags_list = split(a:tags_string, ' ') + let ret = [] + " generate tags list. + for id in tags_list + if id != '' + call add(ret, {'name': id}) + endif endfor - let tags_list = matchlist(tags_string, expr) - return tags_list[1:] + return ret endfunction From 32f679f96ccec9dd3834cf31175043b3c99efacc Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 19:09:20 +0900 Subject: [PATCH 10/16] Change: wrote_item can treat tags object Tag object is in arg? |--- yes -----> set it as tag no | V Is `filetype` set? |--- yes -----> set it as tag no | V set 'text' as tag --- autoload/qiita.vim | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 7f43676..9bc51b4 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -275,12 +275,13 @@ function! s:gettags(tags_string) endfunction -function! s:write_item(api, id, title, content) +function! s:write_item(api, id, title, tags, content) if len(a:id) redraw | echon 'Updating item... ' let item = a:api.item(a:id) let item.title = a:title let item.body = a:content + let item.tags = a:tags call s:fix_tags(item.tags) try call item.update() @@ -291,18 +292,20 @@ function! s:write_item(api, id, title, content) endtry else redraw | echon 'Posting item... ' - let tag = expand('%:e') - if len(tag) == 0 - let tag = &ft - endif - if len(tag) == 0 - let tag = 'text' + if len(a:tags) == 0 + if len(&ft) == 0 + let l:tags = [{'name': 'text'}] + else + let l:tags = [{'name': &ft}] + endif + else + let l:tags = a:tags endif try let item = a:api.post_item({ \ 'title': a:title, \ 'body': a:content, - \ 'tags': [{'name': tag}], + \ 'tags': l:tags, \ 'private': v:false, \}) catch From 3cebf200243094097d310f8550b1547e397246e2 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 21:30:00 +0900 Subject: [PATCH 11/16] Change: gettags can treat version infomation in tag. To specify version, please follow the format: : --- autoload/qiita.vim | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 9bc51b4..86c0bb5 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -266,7 +266,14 @@ function! s:gettags(tags_string) let ret = [] " generate tags list. for id in tags_list - if id != '' + if id == '' + continue + endif + + if match(id, ":") > 0 + call add(ret, {'name': matchstr(id, "\\zs[^:]*\\ze:"), + \ 'versions': [matchstr(id, ":\\zs.*\\ze")]}) + else call add(ret, {'name': id}) endif endfor From 2dbdbbe73a7a3f494a62038330092713109759e8 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 21:30:49 +0900 Subject: [PATCH 12/16] Change: display tags at 2nd line --- autoload/qiita.vim | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 86c0bb5..30920fe 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -353,7 +353,16 @@ function! s:open_item(api, id) redraw let item = a:api.item(a:id) - call setline(1, [webapi#html#decodeEntityReference(item.title)]+split(item.body, "\n")) + let l:tag_line = '' + for tag in item.tags + if tag['versions'] == [] + let tag_line.=tag['name'] . ' ' + else + let tag_line.=tag['name'] . ':' . tag['versions'][0] . ' ' + endif + " [{'name': '', 'versions': ''}, ...] + endfor + call setline(1, [webapi#html#decodeEntityReference(item.title), tag_line]+split(item.body, "\n")) setlocal buftype=acwrite bufhidden=delete noswapfile setlocal nomodified setlocal ft=markdown From 2f307206c3a1407428bcdbdd309fed6f90909ee5 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 23:00:32 +0900 Subject: [PATCH 13/16] Fix: Remove a indent --- autoload/qiita.vim | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 30920fe..564642c 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -259,26 +259,27 @@ endfunction function! s:gettags(tags_string) - if ! len(a:tags_string) + if len(a:tags_string) == 0 return [] - else - let tags_list = split(a:tags_string, ' ') - let ret = [] - " generate tags list. - for id in tags_list - if id == '' - continue - endif + endif - if match(id, ":") > 0 - call add(ret, {'name': matchstr(id, "\\zs[^:]*\\ze:"), - \ 'versions': [matchstr(id, ":\\zs.*\\ze")]}) - else - call add(ret, {'name': id}) - endif - endfor + let tags_list = split(a:tags_string, ' ') + let ret = [] + " generate tags list. + for id in tags_list + if id == '' + continue + endif + + if match(id, ":") > 0 + call add(ret, {'name': matchstr(id, "\\zs[^:]*\\ze:"), + \ 'versions': [matchstr(id, ":\\zs.*\\ze")]}) + else + call add(ret, {'name': id}) + endif + endfor - return ret + return ret endfunction From 4f8299e2678856f043887a8af51f4a7314840b1f Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 23:01:52 +0900 Subject: [PATCH 14/16] Fix: Remove `line()` method --- autoload/qiita.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 564642c..999b6c1 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -475,7 +475,7 @@ function! qiita#Qiita(...) if editpost let title = getline(1) let tags = s:gettags(getline(2)) - let content = join(getline(3, line('$')), "\n") + let content = join(getline(3, '$'), "\n") call s:write_item(api, id, title, tags, content) elseif deletepost call s:delete_item(api, id) @@ -484,7 +484,7 @@ function! qiita#Qiita(...) else let title = getline(1) let tags = s:gettags(getline(2)) - let content = join(getline(3, line('$')), "\n") + let content = join(getline(3, '$'), "\n") call s:write_item(api, '', title, tags, content) endif endif From 07f55fcd8a4845e9d54ea297b4698fe24516cebd Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Mon, 12 Nov 2018 23:02:47 +0900 Subject: [PATCH 15/16] Fix: use '\s' to specify whitespace --- autoload/qiita.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 999b6c1..41c03fc 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -263,7 +263,7 @@ function! s:gettags(tags_string) return [] endif - let tags_list = split(a:tags_string, ' ') + let tags_list = split(a:tags_string, '\s') let ret = [] " generate tags list. for id in tags_list From 6a12b3aa2e25b8d6bde898dc031de2b2b7c40bf4 Mon Sep 17 00:00:00 2001 From: Cj-bc Date: Tue, 13 Nov 2018 06:38:20 +0900 Subject: [PATCH 16/16] Fix: use `+` in pattern match to ignore '' --- autoload/qiita.vim | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/autoload/qiita.vim b/autoload/qiita.vim index 41c03fc..565b6d4 100644 --- a/autoload/qiita.vim +++ b/autoload/qiita.vim @@ -263,14 +263,10 @@ function! s:gettags(tags_string) return [] endif - let tags_list = split(a:tags_string, '\s') + let tags_list = split(a:tags_string, '\s+') let ret = [] " generate tags list. for id in tags_list - if id == '' - continue - endif - if match(id, ":") > 0 call add(ret, {'name': matchstr(id, "\\zs[^:]*\\ze:"), \ 'versions': [matchstr(id, ":\\zs.*\\ze")]})