Patch 8.0.1832
Problem: Cannot use :unlet for an environment variable.
Solution: Make it work. Use unsetenv() if available. (Ken Takata,
closes #2855)
Files: runtime/doc/eval.txt, src/config.h.in, src/configure.ac,
src/auto/configure, src/eval.c, src/misc1.c, src/proto/misc1.pro,
src/testdir/test_unlet.vim
*** ../vim-8.0.1831/runtime/doc/eval.txt 2018-05-01 15:01:56.934414650
+0200
--- runtime/doc/eval.txt 2018-05-13 15:50:04.404705633 +0200
***************
*** 9894,9899 ****
--- 9939,9952 ----
variables are automatically deleted when the function
ends.
+ :unl[et] ${env-name} ... *:unlet-environment* *:unlet-$*
+ Remove environment variable {env-name}.
+ Can mix {name} and ${env-name} in one :unlet command.
+ No error message is given for a non-existing
+ variable, also without !.
+ If the system does not support deleting an environment
+ variable, it is made emtpy.
+
:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv*
Lock the internal variable {name}. Locking means that
it can no longer be changed (until it is unlocked).
*** ../vim-8.0.1831/src/config.h.in 2017-11-16 17:03:41.952727829 +0100
--- src/config.h.in 2018-05-13 15:37:01.313297576 +0200
***************
*** 211,216 ****
--- 211,217 ----
#undef HAVE_TOWLOWER
#undef HAVE_TOWUPPER
#undef HAVE_ISWUPPER
+ #undef HAVE_UNSETENV
#undef HAVE_USLEEP
#undef HAVE_UTIME
#undef HAVE_BIND_TEXTDOMAIN_CODESET
*** ../vim-8.0.1831/src/configure.ac 2018-05-12 21:38:09.983347669 +0200
--- src/configure.ac 2018-05-13 15:37:01.313297576 +0200
***************
*** 3709,3715 ****
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
! usleep utime utimes mblen ftruncate)
AC_FUNC_FSEEKO
dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
--- 3709,3715 ----
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
! usleep utime utimes mblen ftruncate unsetenv)
AC_FUNC_FSEEKO
dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
*** ../vim-8.0.1831/src/auto/configure 2018-05-12 21:38:09.987347656 +0200
--- src/auto/configure 2018-05-13 15:38:02.532890230 +0200
***************
*** 12609,12615 ****
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
! usleep utime utimes mblen ftruncate
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
--- 12609,12615 ----
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
! usleep utime utimes mblen ftruncate unsetenv
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
*** ../vim-8.0.1831/src/eval.c 2018-05-12 15:38:22.474714244 +0200
--- src/eval.c 2018-05-13 15:42:40.823049133 +0200
***************
*** 2758,2763 ****
--- 2758,2777 ----
do
{
+ if (*arg == '$')
+ {
+ char_u *name = ++arg;
+
+ if (get_env_len(&arg) == 0)
+ {
+ EMSG2(_(e_invarg2), name - 1);
+ return;
+ }
+ vim_unsetenv(name);
+ arg = skipwhite(arg);
+ continue;
+ }
+
/* Parse the name and find the end. */
name_end = get_lval(arg, NULL, &lv, TRUE, eap->skip || error, 0,
FNE_CHECK_START);
*** ../vim-8.0.1831/src/misc1.c 2018-05-01 15:47:30.292975459 +0200
--- src/misc1.c 2018-05-13 15:49:32.820799092 +0200
***************
*** 4479,4484 ****
--- 4479,4495 ----
return pend;
}
+ void
+ vim_unsetenv(char_u *var)
+ {
+ #ifdef HAVE_UNSETENV
+ unsetenv((char *)var);
+ #else
+ mch_setenv((char *)var, "", 0);
+ #endif
+ }
+
+
/*
* Our portable version of setenv.
*/
*** ../vim-8.0.1831/src/proto/misc1.pro 2017-09-02 20:30:31.167315016 +0200
--- src/proto/misc1.pro 2018-05-13 15:37:01.317297550 +0200
***************
*** 60,65 ****
--- 60,66 ----
void expand_env_esc(char_u *srcp, char_u *dst, int dstlen, int esc, int one,
char_u *startstr);
char_u *vim_getenv(char_u *name, int *mustfree);
void vim_setenv(char_u *name, char_u *val);
+ void vim_unsetenv(char_u *name);
char_u *get_env_name(expand_T *xp, int idx);
char_u *get_users(expand_T *xp, int idx);
int match_user(char_u *name);
*** ../vim-8.0.1831/src/testdir/test_unlet.vim 2017-02-20 23:07:00.478656212
+0100
--- src/testdir/test_unlet.vim 2018-05-13 15:58:22.966685950 +0200
***************
*** 21,23 ****
--- 21,47 ----
func Test_unlet_fails()
call assert_fails('unlet v:["count"]', 'E46:')
endfunc
+
+ func Test_unlet_env()
+ let envcmd = has('win32') ? 'set' : 'env'
+
+ let $FOOBAR = 'test'
+ let found = 0
+ for kv in split(system(envcmd), "\r*\n")
+ if kv == 'FOOBAR=test'
+ let found = 1
+ endif
+ endfor
+ call assert_equal(1, found)
+
+ unlet $FOOBAR
+ let found = 0
+ for kv in split(system(envcmd), "\r*\n")
+ if kv == 'FOOBAR=test'
+ let found = 1
+ endif
+ endfor
+ call assert_equal(0, found)
+
+ unlet $MUST_NOT_BE_AN_ERROR
+ endfunc
*** ../vim-8.0.1831/src/version.c 2018-05-13 15:28:59.848552204 +0200
--- src/version.c 2018-05-13 15:37:57.152925987 +0200
***************
*** 763,764 ****
--- 763,766 ----
{ /* Add new patch number below this line */
+ /**/
+ 1832,
/**/
--
Sorry, no fortune today.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.