aboutsummaryrefslogtreecommitdiff
path: root/vim/autoload/xdg.vim
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2020-04-25 20:52:00 +1200
committerTom Ryder <tom@sanctum.geek.nz>2020-04-25 20:52:00 +1200
commitd588b617b93b7e485ec6c3f918572feda8051df2 (patch)
treeb2a3dc917c6ff64a4b242cc8d711ac59fc84fcbf /vim/autoload/xdg.vim
parentMerge branch 'release/v8.20.0' (diff)
parentBump VERSION (diff)
downloaddotfiles-3657c022f490f9c4681903f2bb68711cb85e2dae.tar.gz (sig)
dotfiles-3657c022f490f9c4681903f2bb68711cb85e2dae.zip
Merge branch 'hotfix/v8.20.1'v8.20.1
* hotfix/v8.20.1: Handle ignoring relative paths in XDG env dirs Factor out XDG env defaults for readability Implement specified fallbacks for $XDG_*_DIRS
Diffstat (limited to 'vim/autoload/xdg.vim')
-rw-r--r--vim/autoload/xdg.vim52
1 files changed, 35 insertions, 17 deletions
diff --git a/vim/autoload/xdg.vim b/vim/autoload/xdg.vim
index ab756f73..9e6d6553 100644
--- a/vim/autoload/xdg.vim
+++ b/vim/autoload/xdg.vim
@@ -1,35 +1,53 @@
+" <https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables>
+let s:defaults = {
+ \ 'XDG_CACHE_HOME': '~/.cache',
+ \ 'XDG_CONFIG_HOME': '~/.config',
+ \ 'XDG_CONFIG_DIRS': '/etc/xdg',
+ \ 'XDG_DATA_HOME': '~/.local/share',
+ \ 'XDG_DATA_DIRS': '/usr/local/share/:/usr/share/',
+ \}
+
+function! s:Get(name) abort
+ let name = a:name
+ let env = environ()
+ if has_key(env, name) && strlen(env[name]) > 0
+ return env[name]
+ elseif has_key(s:defaults, name)
+ return s:defaults[name]
+ else
+ return ''
+ endif
+endfunction
+
+function! s:Absolute(path) abort
+ return a:path !=# '^[/~]'
+endfunction
+
function! xdg#CacheDir(name) abort
let name = a:name
- let home = exists('$XDG_CACHE_HOME')
- \ ? $XDG_CACHE_HOME
- \ : '~/.cache'
+ let home = s:Get('XDG_CACHE_HOME')
+ if !s:Absolute(home)
+ return
+ endif
return join([home, name], '/')
endfunction
function! xdg#ConfigDirs(name) abort
let name = a:name
- let home = exists('$XDG_CONFIG_HOME')
- \ ? $XDG_CONFIG_HOME
- \ : '~/.config'
- let dirs = exists('$XDG_CONFIG_DIRS')
- \ ? split($XDG_CONFIG_DIRS, ':')
- \ : []
+ 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
function! xdg#DataDirs(name) abort
let name = a:name
- let home = exists('$XDG_DATA_HOME')
- \ ? $XDG_DATA_HOME
- \ : '~/.local/share'
- let dirs = exists('$XDG_DATA_DIRS')
- \ ? split($XDG_DATA_DIRS, ':')
- \ : []
+ 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