aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--VERSION4
-rw-r--r--vim/autoload/getenv.vim22
-rw-r--r--vim/autoload/xdg.vim23
-rw-r--r--vim/vimrc47
4 files changed, 62 insertions, 34 deletions
diff --git a/VERSION b/VERSION
index b9757eea..c7443ec1 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-tejr dotfiles v8.23.0
-Sat, 02 May 2020 11:39:33 +0000
+tejr dotfiles v8.24.0
+Sat, 02 May 2020 14:16:31 +0000
diff --git a/vim/autoload/getenv.vim b/vim/autoload/getenv.vim
new file mode 100644
index 00000000..2b8fef1b
--- /dev/null
+++ b/vim/autoload/getenv.vim
@@ -0,0 +1,22 @@
+" Backport getenv() from v8.1.1305
+"
+" <https://github.com/vim/vim/releases/tag/v8.1.1305>
+"
+function! getenv#(name) abort
+
+ " Use native if available
+ if exists('*getenv')
+ return getenv(a:name)
+ endif
+
+ " Backport
+ if a:name !~# '^[A-Z][A-Z0-9_]*$'
+ throw 'Illegal env var name'
+ endif
+ let value = v:null
+ if exists('$'.a:name)
+ execute 'let value = $'.a:name
+ endif
+ return value
+
+endfunction
diff --git a/vim/autoload/xdg.vim b/vim/autoload/xdg.vim
index 2b1e7c56..2b90f5f1 100644
--- a/vim/autoload/xdg.vim
+++ b/vim/autoload/xdg.vim
@@ -11,28 +11,25 @@ let s:subdir = 'vim'
function! s:Get(name) abort
let name = a:name
- if name !~# '^[A-Z][A-Z0-9_]*$'
- throw 'Illegal env var name'
- endif
- let value = ''
- execute 'let value = $'.name
- if value !=# ''
- return value
- elseif has_key(s:defaults, name)
- return s:defaults[name]
- else
- return ''
+ if !has_key(s:defaults, name)
+ throw 'Illegal XDG basedirs env var name'
endif
+ let value = getenv#(name)
+ return value !=# v:null
+ \ ? value
+ \ : s:defaults[name]
endfunction
function! s:Absolute(path) abort
- return a:path =~# '^[/~]'
+ return a:path =~# '^/'
+ \ || a:path =~# '^\~/'
+ \ || a:path ==# '~'
endfunction
function! s:Home(name) abort
let home = s:Get(a:name)
if !s:Absolute(home)
- return ''
+ return v:null
endif
return join([home, s:subdir], '/')
endfunction
diff --git a/vim/vimrc b/vim/vimrc
index d34ce24d..a5814aa7 100644
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -2,7 +2,7 @@
" Tom Ryder (tejr)’s Literate Vimrc
" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
"
-" Last updated: Wed, 29 Apr 2020 02:53:22 UTC
+" Last updated: Sat, 02 May 2020 14:04:10 UTC
"
" │ And I was lifted up in heart, and thought
" │ Of all my late-shown prowess in the lists,
@@ -103,22 +103,30 @@ endif
" We'll use the XDG directories as machine-local configuration and storage.
" <https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables>
"
-" Add all the configuration directories to 'runtimepath', and then put the
-" cache home at the very front, so that e.g. 'spellfile' gets created in there
-" rather than in the configuration directories.
+" Add all the configuration directories to 'runtimepath', including "after"
+" directories to the end of it, in reverse order, forming the desired layers
+" of configuration.
"
-let s:xdgruntimepaths = xdg#['config']['dirs']
-if xdg#['config']['home'] !=# ''
- call insert(s:xdgruntimepaths, xdg#['config']['home'])
+let s:xdgconfigpaths = xdg#['config']['dirs']
+if xdg#['config']['home'] !=# v:null
+ call insert(s:xdgconfigpaths, xdg#['config']['home'])
endif
-if xdg#['cache']['home'] !=# ''
- call insert(s:xdgruntimepaths, xdg#['cache']['home'])
-endif
-for s:xdgruntimepath in reverse(s:xdgruntimepaths)
+for s:xdgconfigpath in reverse(s:xdgconfigpaths)
execute 'set runtimepath^='
- \.option#Escape(option#item#Escape(s:xdgruntimepath))
+ \.option#Escape(option#item#Escape(s:xdgconfigpath))
+ execute 'set runtimepath+='
+ \.option#Escape(option#item#Escape(s:xdgconfigpath.'/after'))
endfor
-unlet s:xdgruntimepaths s:xdgruntimepath
+unlet! s:xdgconfigpath
+unlet s:xdgconfigpaths
+
+" Now put the XDG cache home at the very front, so that e.g. 'spellfile' gets
+" created in there rather than in the configuration directories.
+"
+if xdg#['cache']['home'] !=# v:null
+ execute 'set runtimepath^='
+ \.option#Escape(option#item#Escape(xdg#['cache']['home']))
+endif
" We need a command to reliably establish a full path, whether or not the
" directories already exist. We create a wrapper for the autoloaded function
@@ -145,7 +153,7 @@ command! -bang -bar -complete=dir -nargs=1 CreatePath
" v8.1.716 introduced a way to set this with an option named 'viminfofile',
" but I don't see a reason to use that.
"
-if xdg#['cache']['home'] !=# '' && path#Create(xdg#['cache']['home'])
+if xdg#['cache']['home'] !=# v:null && path#Create(xdg#['cache']['home'])
execute 'set viminfo+='.option#Escape(
\ 'n'.xdg#['cache']['home'].'/viminfo'
\)
@@ -194,7 +202,7 @@ set history=10000
" 'backupfullname', 'swapfilefullname' would have been clearer.
"
set backup
-if xdg#['cache']['home'] !=# ''
+if xdg#['cache']['home'] !=# v:null
let s:backupdir = xdg#['cache']['home'].'/backup'
if path#Create(s:backupdir)
execute 'set backupdir^='.option#Escape(option#item#Escape(
@@ -238,7 +246,7 @@ endif
" option has supported that hint for much longer than 'backupdir' has. We
" apply path#Create() to attempt to create the path, if needed.
"
-if xdg#['cache']['home'] !=# ''
+if xdg#['cache']['home'] !=# v:null
let s:directory = xdg#['cache']['home'].'/swap'
if path#Create(s:directory)
execute 'set directory^='.option#Escape(option#item#Escape(
@@ -263,7 +271,7 @@ endif
"
if has#('persistent_undo')
set undofile
- if xdg#['cache']['home'] !=# ''
+ if xdg#['cache']['home'] !=# v:null
let s:undodir = xdg#['cache']['home'].'/undo'
if path#Create(s:undodir)
execute 'set undodir^='.option#Escape(option#item#Escape(
@@ -402,7 +410,7 @@ set spellcapcheck=[.?!]\\%(\ \ \\\|[\\n\\r\\t]\\)
set dictionary^=/usr/share/dict/words
try
let s:refdirs = xdg#['data']['dirs']
- if xdg#['data']['home'] !=# ''
+ if xdg#['data']['home'] !=# v:null
call insert(s:refdirs, xdg#['data']['home'])
endif
for s:refdir in reverse(s:refdirs)
@@ -411,7 +419,8 @@ try
execute 'set thesaurus^='
\.option#Escape(option#item#Escape(s:refdir.'/thesaurus.txt'))
endfor
- unlet s:refdirs s:refdir
+ unlet! s:refdir
+ unlet s:refdirs
catch /^Vim\%((\a\+)\)\=:E474:/
endtry