summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-12-27 13:49:24 +0100
committerBram Moolenaar <Bram@vim.org>2019-12-27 13:49:24 +0100
commit0c1e3744ff0cd6c17af773046b876b428ff3dded (patch)
tree9e438566d524c8d980b5bc853915d90425999369
parent5666fcd0bd794dd46813824cce63a38bcae63794 (diff)
downloadvim-git-8.2.0047.tar.gz
patch 8.2.0047: cannot skip tests for specific MS-Windows platformv8.2.0047
Problem: Cannot skip tests for specific MS-Windows platform. Solution: Add windowsversion().
-rw-r--r--runtime/doc/eval.txt7
-rw-r--r--src/evalfunc.c12
-rw-r--r--src/globals.h3
-rw-r--r--src/os_win32.c8
-rw-r--r--src/testdir/gen_opt_test.vim4
-rw-r--r--src/testdir/test_options.vim9
-rw-r--r--src/version.c2
7 files changed, 39 insertions, 6 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index a20f56270..e34cd4b42 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -10382,6 +10382,13 @@ wincol() The result is a Number, which is the virtual column of the
cursor in the window. This is counting screen cells from the
left side of the window. The leftmost column is one.
+ *windowsversion()*
+windowsversion()
+ The result is a String. For MS-Windows it indicates the OS
+ version. E.g, Windows 10 is "10.0", Windows 8 is "6.2",
+ Windows XP is "5.1". For non-MS-Windows systems the result is
+ an empty string.
+
winheight({nr}) *winheight()*
The result is a Number, which is the height of window {nr}.
{nr} can be the window number or the |window-ID|.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 892a7538f..610eca46b 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -276,6 +276,7 @@ static void f_type(typval_T *argvars, typval_T *rettv);
static void f_virtcol(typval_T *argvars, typval_T *rettv);
static void f_visualmode(typval_T *argvars, typval_T *rettv);
static void f_wildmenumode(typval_T *argvars, typval_T *rettv);
+static void f_windowsversion(typval_T *argvars, typval_T *rettv);
static void f_wordcount(typval_T *argvars, typval_T *rettv);
static void f_xor(typval_T *argvars, typval_T *rettv);
@@ -864,6 +865,7 @@ static funcentry_T global_functions[] =
{"win_splitmove", 2, 3, FEARG_1, f_win_splitmove},
{"winbufnr", 1, 1, FEARG_1, f_winbufnr},
{"wincol", 0, 0, 0, f_wincol},
+ {"windowsversion", 0, 0, 0, f_windowsversion},
{"winheight", 1, 1, FEARG_1, f_winheight},
{"winlayout", 0, 1, FEARG_1, f_winlayout},
{"winline", 0, 0, 0, f_winline},
@@ -8408,6 +8410,16 @@ f_wildmenumode(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
}
/*
+ * "windowsversion()" function
+ */
+ static void
+f_windowsversion(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
+{
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = vim_strsave((char_u *)windowsVersion);
+}
+
+/*
* "wordcount()" function
*/
static void
diff --git a/src/globals.h b/src/globals.h
index 33082d514..87f7b0be5 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1724,6 +1724,9 @@ EXTERN int did_echo_string_emsg INIT(= FALSE);
// Used for checking if local variables or arguments used in a lambda.
EXTERN int *eval_lavars_used INIT(= NULL);
+
+// Only filled for Win32.
+EXTERN char windowsVersion[20] INIT(= {0});
#endif
#ifdef MSWIN
diff --git a/src/os_win32.c b/src/os_win32.c
index c5670afd3..844d7941d 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -758,8 +758,6 @@ null_libintl_wputenv(const wchar_t *envstring UNUSED)
# define VER_PLATFORM_WIN32_WINDOWS 1
#endif
-DWORD g_PlatformId;
-
#ifdef HAVE_ACL
# ifndef PROTO
# include <aclapi.h>
@@ -806,8 +804,7 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
#endif
/*
- * Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or
- * VER_PLATFORM_WIN32_WINDOWS (Win95).
+ * Set "win8_or_later" and fill in "windowsVersion".
*/
void
PlatformId(void)
@@ -821,7 +818,8 @@ PlatformId(void)
ovi.dwOSVersionInfoSize = sizeof(ovi);
GetVersionEx(&ovi);
- g_PlatformId = ovi.dwPlatformId;
+ vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d",
+ (int)ovi.dwMajorVersion, (int)ovi.dwMinorVersion);
if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion >= 2)
|| ovi.dwMajorVersion > 6)
diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim
index f70623b0a..91415e49d 100644
--- a/src/testdir/gen_opt_test.vim
+++ b/src/testdir/gen_opt_test.vim
@@ -10,6 +10,8 @@ set nomore
" The terminal size is restored at the end.
" Clear out t_WS, we don't want to resize the actual terminal.
let script = [
+ \ '" DO NOT EDIT: Generated with gen_opt_test.vim',
+ \ '',
\ 'let save_columns = &columns',
\ 'let save_lines = &lines',
\ 'let save_term = &term',
@@ -123,7 +125,7 @@ let test_values = {
\ 'printmbfont': [['', 'r:some', 'b:Bold,c:yes'], ['xxx']],
\ 'printoptions': [['', 'header:0', 'left:10pc,top:5pc'], ['xxx']],
\ 'scrollopt': [['', 'ver', 'ver,hor'], ['xxx']],
- \ 'renderoptions': [['', 'type:directx'], ['xxx']],
+ \ 'renderoptions': [[''], ['xxx']],
\ 'selection': [['old', 'inclusive'], ['', 'xxx']],
\ 'selectmode': [['', 'mouse', 'key,cmd'], ['xxx']],
\ 'sessionoptions': [['', 'blank', 'help,options,slash'], ['xxx']],
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index 65600eea9..048356ae7 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -389,6 +389,15 @@ func Test_set_values()
endif
endfunc
+func Test_renderoptions()
+ " Only do this for Windows Vista and later, fails on Windows XP and earlier.
+ " Doesn't hurt to do this on a non-Windows system.
+ if windowsversion() !~ '^[345]\.'
+ set renderoptions=type:directx
+ set rop=type:directx
+ endif
+endfunc
+
func ResetIndentexpr()
set indentexpr=
endfunc
diff --git a/src/version.c b/src/version.c
index 0185a78c1..420c722d2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 47,
+/**/
46,
/**/
45,