aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2020-04-25 20:44:05 +1200
committerTom Ryder <tom@sanctum.geek.nz>2020-04-25 20:51:28 +1200
commit5d6110fc87651d39eb82737cac9f5c3bad412926 (patch)
treedcc8d9b00f591ec8befbc2e45384cc4b2a99b655
parentFactor out XDG env defaults for readability (diff)
downloaddotfiles-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.vim11
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