function! xdg#CacheDir(name) abort let name = a:name let home = exists('$XDG_CACHE_HOME') \ ? $XDG_CACHE_HOME \ : '~/.cache' 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, ':') \ : [] return map( \ insert(dirs, home) \,'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, ':') \ : [] return map( \ insert(dirs, home) \,'join([v:val, name], "/")' \) endfunction