diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2020-04-25 20:44:05 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2020-04-25 20:51:28 +1200 |
commit | 5d6110fc87651d39eb82737cac9f5c3bad412926 (patch) | |
tree | dcc8d9b00f591ec8befbc2e45384cc4b2a99b655 | |
parent | Factor out XDG env defaults for readability (diff) | |
download | dotfiles-5d6110fc87651d39eb82737cac9f5c3bad412926.tar.gz dotfiles-5d6110fc87651d39eb82737cac9f5c3bad412926.zip |
Handle ignoring relative paths in XDG env dirs
From <https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#basics>:
> All paths set in these environment variables must be absolute. If an
> implementation encounters a relative path in any of these variables it
> should consider the path invalid and ignore it.
-rw-r--r-- | vim/autoload/xdg.vim | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/vim/autoload/xdg.vim b/vim/autoload/xdg.vim index b83d7208..9e6d6553 100644 --- a/vim/autoload/xdg.vim +++ b/vim/autoload/xdg.vim @@ -19,9 +19,16 @@ function! s:Get(name) abort endif endfunction +function! s:Absolute(path) abort + return a:path !=# '^[/~]' +endfunction + function! xdg#CacheDir(name) abort let name = a:name let home = s:Get('XDG_CACHE_HOME') + if !s:Absolute(home) + return + endif return join([home, name], '/') endfunction @@ -30,7 +37,7 @@ function! xdg#ConfigDirs(name) abort let home = s:Get('XDG_CONFIG_HOME') let dirs = split(s:Get('XDG_CONFIG_DIRS'), ':') return map( - \ insert(dirs, home) + \ filter(insert(dirs, home), 's:Absolute(v:val)') \,'join([v:val, name], "/")' \) endfunction @@ -40,7 +47,7 @@ function! xdg#DataDirs(name) abort let home = s:Get('XDG_DATA_HOME') let dirs = split(s:Get('XDG_DATA_DIRS'), ':') return map( - \ insert(dirs, home) + \ filter(insert(dirs, home), 's:Absolute(v:val)') \,'join([v:val, name], "/")' \) endfunction |