changeset 30417:6a1862bfb280 v9.0.0544

patch 9.0.0544: minor issues with setting a string option Commit: https://github.com/vim/vim/commit/fcba86c0316dc0d6341078b50e7967206a1627a0 Author: zeertzjq <zeertzjq@outlook.com> Date: Thu Sep 22 13:57:32 2022 +0100 patch 9.0.0544: minor issues with setting a string option Problem: Minor issues with setting a string option. Solution: Adjust the code, add a test. (closes https://github.com/vim/vim/issues/11192)
author Bram Moolenaar <Bram@vim.org>
date Thu, 22 Sep 2022 15:00:05 +0200
parents 41b0b57c4ebd
children d8065e2a62d7
files src/option.c src/testdir/test_options.vim src/version.c
diffstat 3 files changed, 21 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/option.c
+++ b/src/option.c
@@ -1323,13 +1323,11 @@ do_set_string(
 	/*
 	 * Set 'keywordprg' to ":help" if an empty
 	 * value was passed to :set by the user.
-	 * Misuse errbuf[] for the resulting string.
 	 */
 	if (varp == (char_u *)&p_kp && (*arg == NUL || *arg == ' '))
 	{
-	    STRCPY(errbuf, ":help");
 	    save_arg = arg;
-	    arg = (char_u *)errbuf;
+	    arg = (char_u *)":help";
 	}
 	/*
 	 * Convert 'backspace' number to string, for
@@ -1417,7 +1415,7 @@ do_set_string(
 	 * but do remove it for "\\\\machine\\path".
 	 * The reverse is found in ExpandOldSetting().
 	 */
-	while (*arg && !VIM_ISWHITE(*arg))
+	while (*arg != NUL && !VIM_ISWHITE(*arg))
 	{
 	    int i;
 
@@ -1427,7 +1425,7 @@ do_set_string(
 			    && vim_isfilec(arg[1])
 			    && !VIM_ISWHITE(arg[1])
 			    && (arg[1] != '\\'
-					|| (s == newval && arg[2] != '\\')))
+					   || (s == newval && arg[2] != '\\')))
 #endif
 						)
 		++arg;	// remove backslash
@@ -1565,8 +1563,8 @@ do_set_string(
 	    }
 	}
 
-	if (save_arg != NULL)   // number for 'whichwrap'
-	    arg = save_arg;
+	if (save_arg != NULL)
+	    arg = save_arg;  // arg was temporarily changed, restore it
     }
 
     /*
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -1343,4 +1343,18 @@ func Test_switchbuf_reset()
   only!
 endfunc
 
+" :set empty string for global 'keywordprg' falls back to ":help"
+func Test_keywordprg_empty()
+  let k = &keywordprg
+  set keywordprg=man
+  call assert_equal('man', &keywordprg)
+  set keywordprg=
+  call assert_equal(':help', &keywordprg)
+  set keywordprg=man
+  call assert_equal('man', &keywordprg)
+  call assert_equal("\n  keywordprg=:help", execute('set kp= kp?'))
+  let &keywordprg = k
+endfunc
+
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    544,
+/**/
     543,
 /**/
     542,