summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/options.txt28
-rw-r--r--runtime/doc/quickref.txt2
-rw-r--r--runtime/optwin.vim8
-rw-r--r--src/if_python.c13
-rw-r--r--src/if_python3.c15
-rw-r--r--src/option.c18
-rw-r--r--src/option.h6
-rw-r--r--src/version.c2
8 files changed, 86 insertions, 6 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index f933083559..75e4f97416 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -5967,6 +5967,20 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
+ *'pythonhome'*
+'pythonhome' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with the |+python/dyn|
+ feature}
+ Specifies the name of the Python 2.x home directory. When 'pythonhome'
+ and the PYTHONHOME environment variable are not set, PYTHON_HOME,
+ which was specified at compile time, will be used for the Python 2.x
+ home directory.
+ Environment variables are expanded |:set_env|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
*'pythonthreedll'*
'pythonthreedll' string (default depends on the build)
global
@@ -5979,6 +5993,20 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
+ *'pythonthreehome'*
+'pythonthreehome' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with the |+python3/dyn|
+ feature}
+ Specifies the name of the Python 3 home directory. When
+ 'pythonthreehome' and the PYTHONHOME environment variable are not set,
+ PYTHON3_HOME, which was specified at compile time, will be used for
+ the Python 3 home directory.
+ Environment variables are expanded |:set_env|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
*'pyxversion'* *'pyx'*
'pyxversion' 'pyx' number (default depends on the build)
global
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
index 06ae663bfa..516a1daf56 100644
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -839,7 +839,9 @@ Short explanation of each option: *option-list*
'prompt' 'prompt' enable prompt in Ex mode
'pumheight' 'ph' maximum height of the popup menu
'pythondll' name of the Python 2 dynamic library
+'pythonhome' name of the Python 2 home directory
'pythonthreedll' name of the Python 3 dynamic library
+'pythonthreehome' name of the Python 3 home directory
'pyxversion' 'pyx' Python version used for pyx* commands
'quoteescape' 'qe' escape characters used in a string
'readonly' 'ro' disallow writing the buffer
diff --git a/runtime/optwin.vim b/runtime/optwin.vim
index 74ebc9fd98..a417295fde 100644
--- a/runtime/optwin.vim
+++ b/runtime/optwin.vim
@@ -1354,10 +1354,18 @@ if exists("&pythondll")
call append("$", "pythondll\tname of the Python 2 dynamic library")
call <SID>OptionG("pythondll", &pythondll)
endif
+if exists("&pythonhome")
+ call append("$", "pythonhome\tname of the Python 2 home directory")
+ call <SID>OptionG("pythonhome", &pythonhome)
+endif
if exists("&pythonthreedll")
call append("$", "pythonthreedll\tname of the Python 3 dynamic library")
call <SID>OptionG("pythonthreedll", &pythonthreedll)
endif
+if exists("&pythonthreehome")
+ call append("$", "pythonthreehome\tname of the Python 3 home directory")
+ call <SID>OptionG("pythonthreehome", &pythonthreehome)
+endif
if exists("&rubydll")
call append("$", "rubydll\tname of the Ruby dynamic library")
call <SID>OptionG("rubydll", &rubydll)
diff --git a/src/if_python.c b/src/if_python.c
index f9fc5e1a5b..ab9c854b27 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -912,6 +912,8 @@ python_loaded(void)
}
#endif
+static char *py_home_buf = NULL;
+
static int
Python_Init(void)
{
@@ -929,10 +931,15 @@ Python_Init(void)
}
#endif
+ if (*p_pyhome != NUL)
+ {
+ /* The string must not change later, make a copy in static memory. */
+ py_home_buf = (char *)vim_strsave(p_pyhome);
+ if (py_home_buf != NULL)
+ Py_SetPythonHome(py_home_buf);
+ }
#ifdef PYTHON_HOME
-# ifdef DYNAMIC_PYTHON
- if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
-# endif
+ else if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
Py_SetPythonHome(PYTHON_HOME);
#endif
diff --git a/src/if_python3.c b/src/if_python3.c
index 7aa5f03e1d..02d913492c 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -842,6 +842,8 @@ python3_loaded(void)
}
#endif
+static wchar_t *py_home_buf = NULL;
+
static int
Python3_Init(void)
{
@@ -857,11 +859,18 @@ Python3_Init(void)
init_structs();
+ if (*p_py3home != NUL)
+ {
+ size_t len = mbstowcs(NULL, (char *)p_py3home, 0) + 1;
+ /* The string must not change later, make a copy in static memory. */
+ py_home_buf = (wchar_t *)alloc(len * sizeof(wchar_t));
+ if (py_home_buf != NULL && mbstowcs(
+ py_home_buf, (char *)p_py3home, len) != (size_t)-1)
+ Py_SetPythonHome(py_home_buf);
+ }
#ifdef PYTHON3_HOME
-# ifdef DYNAMIC_PYTHON3
- if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
-# endif
+ else if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
Py_SetPythonHome(PYTHON3_HOME);
#endif
diff --git a/src/option.c b/src/option.c
index 08fb789dad..ce54369968 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2248,6 +2248,15 @@ static struct vimoption options[] =
{(char_u *)NULL, (char_u *)0L}
#endif
SCRIPTID_INIT},
+ {"pythonthreehome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+#if defined(FEAT_PYTHON3)
+ (char_u *)&p_py3home, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+#else
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+#endif
+ SCRIPTID_INIT},
{"pythondll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
#if defined(DYNAMIC_PYTHON)
(char_u *)&p_pydll, PV_NONE,
@@ -2257,6 +2266,15 @@ static struct vimoption options[] =
{(char_u *)NULL, (char_u *)0L}
#endif
SCRIPTID_INIT},
+ {"pythonhome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+#if defined(FEAT_PYTHON)
+ (char_u *)&p_pyhome, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+#else
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+#endif
+ SCRIPTID_INIT},
{"pyxversion", "pyx", P_NUM|P_VI_DEF|P_SECURE,
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
(char_u *)&p_pyx, PV_NONE,
diff --git a/src/option.h b/src/option.h
index c9fa4d35fc..21be3a39f1 100644
--- a/src/option.h
+++ b/src/option.h
@@ -696,9 +696,15 @@ EXTERN char_u *p_perldll; /* 'perldll' */
#if defined(DYNAMIC_PYTHON3)
EXTERN char_u *p_py3dll; /* 'pythonthreedll' */
#endif
+#ifdef FEAT_PYTHON3
+EXTERN char_u *p_py3home; /* 'pythonthreehome' */
+#endif
#if defined(DYNAMIC_PYTHON)
EXTERN char_u *p_pydll; /* 'pythondll' */
#endif
+#ifdef FEAT_PYTHON
+EXTERN char_u *p_pyhome; /* 'pythonhome' */
+#endif
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
EXTERN long p_pyx; /* 'pyxversion' */
#endif
diff --git a/src/version.c b/src/version.c
index ea5dbefc00..e01f2be796 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1451,
+/**/
1450,
/**/
1449,