aboutsummaryrefslogtreecommitdiff
path: root/vim/autoload/patch.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/autoload/patch.vim')
-rw-r--r--vim/autoload/patch.vim35
1 files changed, 35 insertions, 0 deletions
diff --git a/vim/autoload/patch.vim b/vim/autoload/patch.vim
new file mode 100644
index 00000000..3a17ccda
--- /dev/null
+++ b/vim/autoload/patch.vim
@@ -0,0 +1,35 @@
+" Wrapper to emulate the nicer has() syntax for simultaneous version and patch
+" level checking that was introduced in v7.4.236 and fixed in v7.4.237.
+"
+" * <https://github.com/vim/vim/releases/tag/v7.4.236>
+" * <https://github.com/vim/vim/releases/tag/v7.4.237>
+"
+function! patch#(version) abort
+
+ " If the Vim running is new enough for its has() function to support
+ " checking patch levels with version prefixes, we can just add a "patch-"
+ " prefix to the query, and pass it on to has().
+ "
+ if has('patch-7.4.237')
+ return has('patch-'.a:version)
+ endif
+
+ " Failing that, we need to do our own version number and patch number
+ " comparisons; split the queried version on dots.
+ "
+ let [major, minor, patch] = split(a:version, '\.')
+
+ " The internal variable v:version describing the running Vim looks like
+ " e.g. 801 for v8.1; reproduce that logic for the queried version.
+ "
+ let l:version = major * 100 + minor
+
+ " If the running version number is the same as the required one, return
+ " whether we have the specific patch requested; otherwise, return whether
+ " the running version number is greater than the required one.
+ "
+ return v:version == l:version
+ \ ? has('patch-'.patch)
+ \ : v:version > l:version
+
+endfunction