Respect user's &shellslash setting in CopyNode and RemoveNode functions (#1150)

* Replace s:Path.Slash() with nerdtree#slash().

* Check the value of &shell when determining the slash under Windows.

* Leave &shellslash unchanged when forming copy/delete commands.

* Fix fold marker.

* Update version number in change log.

* Add abort attribute to nerdtree#slash() to satisfy Vim style guide.

Co-authored-by: Phil Runninger <prunninger@vhtcx.com>
This commit is contained in:
Phil Runninger 2020-07-14 08:53:00 -04:00 committed by GitHub
parent 2af10e3589
commit 96e247ba74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 15 additions and 35 deletions

View File

@ -7,6 +7,7 @@
#### 6.9 #### 6.9
- **.3**: Fix new NERDTrees' width when previous one was in the only window. (PhilRunninger) [#1153](https://github.com/preservim/nerdtree/pull/1153) - **.3**: Fix new NERDTrees' width when previous one was in the only window. (PhilRunninger) [#1153](https://github.com/preservim/nerdtree/pull/1153)
- **.2**: Fix the scope of several key mappings (lifecrisis, PhilRunninger) [#1151](https://github.com/preservim/nerdtree/pull/1151) - **.2**: Fix the scope of several key mappings (lifecrisis, PhilRunninger) [#1151](https://github.com/preservim/nerdtree/pull/1151)
- **.1**: Respect user's `&shellslash` setting in CopyNode and RemoveNode functions (PhilRunninger) [#1150](https://github.com/preservim/nerdtree/pull/1150)
- **.0**: Enable opening bookmarks in split windows. (PhilRunninger) [#1144](https://github.com/preservim/nerdtree/pull/1144) - **.0**: Enable opening bookmarks in split windows. (PhilRunninger) [#1144](https://github.com/preservim/nerdtree/pull/1144)
#### 6.8 #### 6.8
- **.0**: Allow concealed characters to show another character. (PhilRunninger) [#1138](https://github.com/preservim/nerdtree/pull/1138) - **.0**: Allow concealed characters to show another character. (PhilRunninger) [#1138](https://github.com/preservim/nerdtree/pull/1138)

View File

@ -31,8 +31,10 @@ endfunction
"============================================================ "============================================================
" FUNCTION: nerdtree#slash() {{{2 " FUNCTION: nerdtree#slash() {{{2
" Return the path separator used by the underlying file system. Special
" consideration is taken for the use of the 'shellslash' option on Windows
" systems.
function! nerdtree#slash() abort function! nerdtree#slash() abort
if nerdtree#runningWindows() if nerdtree#runningWindows()
if exists('+shellslash') && &shellslash if exists('+shellslash') && &shellslash
return '/' return '/'

View File

@ -247,7 +247,7 @@ function! s:Creator._pathForString(str)
"hack to get an absolute path if a relative path is given "hack to get an absolute path if a relative path is given
if dir =~# '^\.' if dir =~# '^\.'
let dir = getcwd() . g:NERDTreePath.Slash() . dir let dir = getcwd() . nerdtree#slash() . dir
endif endif
"hack to prevent removing slash if dir is the root of the file system. "hack to prevent removing slash if dir is the root of the file system.

View File

@ -25,10 +25,10 @@ function! s:Path.AbsolutePathFor(pathStr)
if l:prependWorkingDir if l:prependWorkingDir
let l:result = getcwd() let l:result = getcwd()
if l:result[-1:] ==# s:Path.Slash() if l:result[-1:] == nerdtree#slash()
let l:result = l:result . a:pathStr let l:result = l:result . a:pathStr
else else
let l:result = l:result . s:Path.Slash() . a:pathStr let l:result = l:result . nerdtree#slash() . a:pathStr
endif endif
endif endif
@ -614,23 +614,6 @@ function! s:Path.New(pathStr)
return l:newPath return l:newPath
endfunction endfunction
" FUNCTION: Path.Slash() {{{1
" Return the path separator used by the underlying file system. Special
" consideration is taken for the use of the 'shellslash' option on Windows
" systems.
function! s:Path.Slash()
if nerdtree#runningWindows()
if exists('+shellslash') && &shellslash
return '/'
endif
return '\'
endif
return '/'
endfunction
" FUNCTION: Path.Resolve() {{{1 " FUNCTION: Path.Resolve() {{{1
" Invoke the vim resolve() function and return the result " Invoke the vim resolve() function and return the result
" This is necessary because in some versions of vim resolve() removes trailing " This is necessary because in some versions of vim resolve() removes trailing
@ -815,7 +798,7 @@ function! s:Path._strForEdit()
" On Windows, the drive letter may be removed by "fnamemodify()". Add it " On Windows, the drive letter may be removed by "fnamemodify()". Add it
" back, if necessary. " back, if necessary.
if nerdtree#runningWindows() && l:result[0] ==# s:Path.Slash() if nerdtree#runningWindows() && l:result[0] == nerdtree#slash()
let l:result = self.drive . l:result let l:result = self.drive . l:result
endif endif
@ -830,14 +813,14 @@ endfunction
" FUNCTION: Path._strForGlob() {{{1 " FUNCTION: Path._strForGlob() {{{1
function! s:Path._strForGlob() function! s:Path._strForGlob()
let lead = s:Path.Slash() let lead = nerdtree#slash()
"if we are running windows then slap a drive letter on the front "if we are running windows then slap a drive letter on the front
if nerdtree#runningWindows() if nerdtree#runningWindows()
let lead = self.drive . '\' let lead = self.drive . '\'
endif endif
let toReturn = lead . join(self.pathSegments, s:Path.Slash()) let toReturn = lead . join(self.pathSegments, nerdtree#slash())
if !nerdtree#runningWindows() if !nerdtree#runningWindows()
let toReturn = escape(toReturn, self._escChars()) let toReturn = escape(toReturn, self._escChars())
@ -849,7 +832,7 @@ endfunction
" Return the absolute pathname associated with this Path object. The pathname " Return the absolute pathname associated with this Path object. The pathname
" returned is appropriate for the underlying file system. " returned is appropriate for the underlying file system.
function! s:Path._str() function! s:Path._str()
let l:separator = s:Path.Slash() let l:separator = nerdtree#slash()
let l:leader = l:separator let l:leader = l:separator
if nerdtree#runningWindows() if nerdtree#runningWindows()

View File

@ -278,8 +278,8 @@ function! s:TreeDirNode._glob(pattern, all)
else else
let l:pathSpec = escape(fnamemodify(self.path.str({'format': 'Glob'}), ':.'), ',') let l:pathSpec = escape(fnamemodify(self.path.str({'format': 'Glob'}), ':.'), ',')
" On Windows, the drive letter may be removed by fnamemodify(). " On Windows, the drive letter may be removed by "fnamemodify()".
if nerdtree#runningWindows() && l:pathSpec[0] ==# g:NERDTreePath.Slash() if nerdtree#runningWindows() && l:pathSpec[0] == nerdtree#slash()
let l:pathSpec = self.path.drive . l:pathSpec let l:pathSpec = self.path.drive . l:pathSpec
endif endif
endif endif

View File

@ -165,7 +165,7 @@ endfunction
function! NERDTreeAddNode() function! NERDTreeAddNode()
let curDirNode = g:NERDTreeDirNode.GetSelected() let curDirNode = g:NERDTreeDirNode.GetSelected()
let prompt = s:inputPrompt('add') let prompt = s:inputPrompt('add')
let newNodeName = input(prompt, curDirNode.path.str() . g:NERDTreePath.Slash(), 'file') let newNodeName = input(prompt, curDirNode.path.str() . nerdtree#slash(), 'file')
if newNodeName ==# '' if newNodeName ==# ''
call nerdtree#echo('Node Creation Aborted.') call nerdtree#echo('Node Creation Aborted.')
@ -252,8 +252,6 @@ endfunction
" FUNCTION: NERDTreeDeleteNode() {{{1 " FUNCTION: NERDTreeDeleteNode() {{{1
function! NERDTreeDeleteNode() function! NERDTreeDeleteNode()
let l:shellslash = &shellslash
let &shellslash = 0
let currentNode = g:NERDTreeFileNode.GetSelected() let currentNode = g:NERDTreeFileNode.GetSelected()
let confirmed = 0 let confirmed = 0
@ -289,7 +287,6 @@ function! NERDTreeDeleteNode()
else else
call nerdtree#echo('delete aborted') call nerdtree#echo('delete aborted')
endif endif
let &shellslash = l:shellslash
endfunction endfunction
" FUNCTION: NERDTreeListNode() {{{1 " FUNCTION: NERDTreeListNode() {{{1
@ -334,8 +331,6 @@ endfunction
" FUNCTION: NERDTreeCopyNode() {{{1 " FUNCTION: NERDTreeCopyNode() {{{1
function! NERDTreeCopyNode() function! NERDTreeCopyNode()
let l:shellslash = &shellslash
let &shellslash = 0
let currentNode = g:NERDTreeFileNode.GetSelected() let currentNode = g:NERDTreeFileNode.GetSelected()
let prompt = s:inputPrompt('copy') let prompt = s:inputPrompt('copy')
let newNodePath = input(prompt, currentNode.path.str(), 'file') let newNodePath = input(prompt, currentNode.path.str(), 'file')
@ -371,7 +366,6 @@ function! NERDTreeCopyNode()
else else
call nerdtree#echo('Copy aborted.') call nerdtree#echo('Copy aborted.')
endif endif
let &shellslash = l:shellslash
redraw! redraw!
endfunction endfunction