diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2020-04-25 20:52:00 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2020-04-25 20:52:00 +1200 |
commit | d588b617b93b7e485ec6c3f918572feda8051df2 (patch) | |
tree | b2a3dc917c6ff64a4b242cc8d711ac59fc84fcbf | |
parent | Merge branch 'release/v8.20.0' (diff) | |
parent | Bump VERSION (diff) | |
download | dotfiles-d588b617b93b7e485ec6c3f918572feda8051df2.tar.gz dotfiles-d588b617b93b7e485ec6c3f918572feda8051df2.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
-rw-r--r-- | VERSION | 4 | ||||
-rw-r--r-- | vim/autoload/xdg.vim | 52 |
2 files changed, 37 insertions, 19 deletions
@@ -1,2 +1,2 @@ -tejr dotfiles v8.20.0 -Sat, 25 Apr 2020 07:34:11 +0000 +tejr dotfiles v8.20.1 +Sat, 25 Apr 2020 08:46:20 +0000 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 |