From df6fc70f1ca38cbbf7483e4d0699eb0e8f5e74a8 Mon Sep 17 00:00:00 2001 From: przepompownia Date: Tue, 5 Jan 2021 22:24:07 +0100 Subject: [PATCH 1/7] Respect NERDTreeCustomOpenArgs when opening bookmark --- autoload/nerdtree/ui_glue.vim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim index 78b3fa1f..4ef4d6e1 100644 --- a/autoload/nerdtree/ui_glue.vim +++ b/autoload/nerdtree/ui_glue.vim @@ -500,9 +500,15 @@ function! nerdtree#ui_glue#openBookmark(name) abort endtry if l:bookmark.path.isDirectory call l:bookmark.open(b:NERDTree) - else - call l:bookmark.open(b:NERDTree, {'where': 'p'}) + return endif + + let l:openArgs = get(g:, 'NERDTreeCustomOpenArgs', {}) + let l:options = ( + \ type(l:openArgs) ==# v:t_dict + \ && has_key(l:openArgs, 'file') + \ ) ? l:openArgs.file : {'where': 'p'} + call l:bookmark.open(b:NERDTree, l:options) endfunction " FUNCTION: s:openHSplit(target) {{{1 From 01bd5e79d6c206bc0172342867c6bf7955b10bcb Mon Sep 17 00:00:00 2001 From: przepompownia Date: Tue, 5 Jan 2021 23:12:04 +0100 Subject: [PATCH 2/7] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9c1b453..a1ec8430 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - **.PATCH**: Pull Request Title (PR Author) [PR Number](Link to PR) --> #### 6.9 +- **.12**: Respect NERDTreeCustomOpenArgs when opening bookmark (przepompownia) [#1200](https://github.com/preservim/nerdtree/pull/1200) - **.11**: Revamp the README. (buncis, PhilRunninger) [#1192](https://github.com/preservim/nerdtree/pull/1192), [#1193](https://github.com/preservim/nerdtree/pull/1193) - **.10**: Open a mirrored NERDTree with correct width (PhilRunninger) [#1177](https://github.com/preservim/nerdtree/pull/1177) - **.9**: Updated Readme, removed typo (H3RSKO) [#1167](https://github.com/preservim/nerdtree/pull/1167) From 81517bae321ebc78e01a07ab521653d2048c6d85 Mon Sep 17 00:00:00 2001 From: przepompownia Date: Mon, 11 Jan 2021 01:00:22 +0100 Subject: [PATCH 3/7] Do not duplicate s:initCustomOpenArgs() --- autoload/nerdtree/ui_glue.vim | 38 +++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim index 4ef4d6e1..15becfa7 100644 --- a/autoload/nerdtree/ui_glue.vim +++ b/autoload/nerdtree/ui_glue.vim @@ -110,8 +110,35 @@ endfunction "FUNCTION: s:initCustomOpenArgs() {{{1 " Make sure NERDTreeCustomOpenArgs has needed keys function! s:initCustomOpenArgs() abort - let g:NERDTreeCustomOpenArgs = get(g:, 'NERDTreeCustomOpenArgs', {}) - return extend(g:NERDTreeCustomOpenArgs, {'file':{'reuse': 'all', 'where': 'p'}, 'dir':{}}, 'keep') + let l:defaultOpenArgs = {'file': {'reuse': 'all', 'where': 'p'}, 'dir': {}} + let l:customOpenArgs = get(g:, 'NERDTreeCustomOpenArgs', {}) + + if v:false is# s:validateType(l:customOpenArgs, v:t_dict) + return l:defaultOpenArgs + endif + + for l:typeKey in keys(l:defaultOpenArgs) + if v:false is# s:validateType(get(l:customOpenArgs, l:typeKey, {}), v:t_dict) + let l:customOpenArgs[l:typeKey] = l:defaultOpenArgs[l:typeKey] + continue + endif + + for l:optionName in keys(l:defaultOpenArgs[l:typeKey]) + if !s:validateType(get(l:customOpenArgs[l:typeKey], l:optionName, v:null), v:t_string) + let l:customOpenArgs[l:typeKey][l:optionName] = l:defaultOpenArgs[l:typeKey][l:optionName] + endif + endfor + endfor + + return extend(l:customOpenArgs, l:defaultOpenArgs, 'keep') +endfunction + +function s:validateType(variable, type) abort + if type(a:variable) is# a:type + return v:true + endif + + return v:false endfunction "FUNCTION: s:activateAll() {{{1 @@ -503,12 +530,7 @@ function! nerdtree#ui_glue#openBookmark(name) abort return endif - let l:openArgs = get(g:, 'NERDTreeCustomOpenArgs', {}) - let l:options = ( - \ type(l:openArgs) ==# v:t_dict - \ && has_key(l:openArgs, 'file') - \ ) ? l:openArgs.file : {'where': 'p'} - call l:bookmark.open(b:NERDTree, l:options) + call l:bookmark.open(b:NERDTree, s:initCustomOpenArgs().file) endfunction " FUNCTION: s:openHSplit(target) {{{1 From dbea37d77f748e7cd9dc3c63bb189c285021ec8e Mon Sep 17 00:00:00 2001 From: przepompownia Date: Mon, 11 Jan 2021 01:05:46 +0100 Subject: [PATCH 4/7] Restore missing assignment --- autoload/nerdtree/ui_glue.vim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim index 15becfa7..3ae8074d 100644 --- a/autoload/nerdtree/ui_glue.vim +++ b/autoload/nerdtree/ui_glue.vim @@ -130,6 +130,8 @@ function! s:initCustomOpenArgs() abort endfor endfor + let g:NERDTreeCustomOpenArgs = l:defaultOpenArgs + return extend(l:customOpenArgs, l:defaultOpenArgs, 'keep') endfunction From 785f5dfd4a279e6689076de98667872902910200 Mon Sep 17 00:00:00 2001 From: przepompownia Date: Mon, 11 Jan 2021 01:15:51 +0100 Subject: [PATCH 5/7] fixup! Restore missing assignment --- autoload/nerdtree/ui_glue.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim index 3ae8074d..b2f20a93 100644 --- a/autoload/nerdtree/ui_glue.vim +++ b/autoload/nerdtree/ui_glue.vim @@ -130,7 +130,7 @@ function! s:initCustomOpenArgs() abort endfor endfor - let g:NERDTreeCustomOpenArgs = l:defaultOpenArgs + let g:NERDTreeCustomOpenArgs = l:customOpenArgs return extend(l:customOpenArgs, l:defaultOpenArgs, 'keep') endfunction From cac4eef3c4591492341406f0db19eaaef544bfd4 Mon Sep 17 00:00:00 2001 From: przepompownia Date: Mon, 11 Jan 2021 01:20:05 +0100 Subject: [PATCH 6/7] fixup! Do not duplicate s:initCustomOpenArgs() --- autoload/nerdtree/ui_glue.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim index b2f20a93..f8116712 100644 --- a/autoload/nerdtree/ui_glue.vim +++ b/autoload/nerdtree/ui_glue.vim @@ -135,7 +135,7 @@ function! s:initCustomOpenArgs() abort return extend(l:customOpenArgs, l:defaultOpenArgs, 'keep') endfunction -function s:validateType(variable, type) abort +function! s:validateType(variable, type) abort if type(a:variable) is# a:type return v:true endif From fe75e3bf83231db042b811a70a0c6cbda59df316 Mon Sep 17 00:00:00 2001 From: przepompownia Date: Mon, 11 Jan 2021 01:25:19 +0100 Subject: [PATCH 7/7] Simplify loop iteration --- autoload/nerdtree/ui_glue.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim index f8116712..b0cedee9 100644 --- a/autoload/nerdtree/ui_glue.vim +++ b/autoload/nerdtree/ui_glue.vim @@ -124,9 +124,10 @@ function! s:initCustomOpenArgs() abort endif for l:optionName in keys(l:defaultOpenArgs[l:typeKey]) - if !s:validateType(get(l:customOpenArgs[l:typeKey], l:optionName, v:null), v:t_string) - let l:customOpenArgs[l:typeKey][l:optionName] = l:defaultOpenArgs[l:typeKey][l:optionName] + if s:validateType(get(l:customOpenArgs[l:typeKey], l:optionName, v:null), v:t_string) + continue endif + let l:customOpenArgs[l:typeKey][l:optionName] = l:defaultOpenArgs[l:typeKey][l:optionName] endfor endfor