Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: variable warnings issues
- X-seq: zsh-workers 43084
- From: Peter Stephenson <p.stephenson@xxxxxxxxxxx>
- To: Zsh hackers' list <zsh-workers@xxxxxxx>
- Subject: PATCH: variable warnings issues
- Date: Thu, 21 Jun 2018 14:43:32 +0100
- Cms-type: 201P
- Dkim-filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180621134337euoutp019fb0ace1a12a02f39f9d0d4c03786e14~6ML5Z_y3A1318113181euoutp01U
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1529588617; bh=uHdcdbWAGFCyeDNwvLpvWT7dnEJyRfhdRTl7Ixx1SSI=; h=Date:From:To:Subject:References:From; b=EBqtA+XUjHMwOoDeerfIGIkuLQqmjWq4pNepOvxxO4VDp3cW609A0AKiz5NMjq4+L lCLLZdPqzRYJSIMTA9LqYFEO5rN3CsG+K4tG6EIQ4YlGx3cjkjF5W+zkxMBbaLRLo7 tMXQOoCAB9th3iGsj+74lMXeytE9gJvm1Ztq1Ln4=
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- Organization: SCSC
- References: <CGME20180621134335eucas1p2b831176d9b8e7fd6075eff86424d697f@eucas1p2.samsung.com>
I've been using WARN_CREATE_GLOBAL and WARN_NESTED_VAR extensively
and this adds a couple of improvements.
The principle change is to add the -g option to vared; it's similar
to the effect with typeset in this respect. You'd use it if your
vared is there to allow the user to edit a variable of their choosing
(e.g. I have a front-end varednl that runs vared with IFS set to $'\n').
You wouldn't use it if you're running vared in a function to edit
something you believe to be limited to that function.
While I'm at it, suppress WARN_NESTED_VAR warnings in
zsh_directory_name_cdr --- note you need to be able to inline array
asignments with typeset or this isn't possible. I don't think
there's a reason for backward compatibility here since this function
suite is always installed per zsh version and has been since it
appeared, but checking
[[ -n $reswords[(R)typeset] ]]
would be possible.
One day we might get around to extending the warnings to associative
arrays.
pws
diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo
index bd0252f..b72606c 100644
--- a/Doc/Zsh/zle.yo
+++ b/Doc/Zsh/zle.yo
@@ -342,7 +342,7 @@ findex(vared)
cindex(parameters, editing)
cindex(editing parameters)
redef(SPACES)(0)(tt(ifztexi(NOTRANS(@ @ @ @ @ @ ))ifnztexi( )))
-xitem(tt(vared )[ tt(-Aache) ] [ tt(-p) var(prompt) ] [ tt(-r) var(rprompt) ])
+xitem(tt(vared )[ tt(-Aacghe) ] [ tt(-p) var(prompt) ] [ tt(-r) var(rprompt) ])
xitem(SPACES()[ tt(-M) var(main-keymap) ] [ tt(-m) var(vicmd-keymap) ])
xitem(SPACES()[ tt(-i) var(init-widget) ] [ tt(-f) var(finish-widget) ])
item(SPACES()[ tt(-t) var(tty) ] var(name))(
@@ -353,7 +353,9 @@ When the tt(-c) flag is given, the parameter is created if it doesn't
already exist. The tt(-a) flag may be given with tt(-c) to create
an array parameter, or the tt(-A) flag to create an associative array.
If the type of an existing parameter does not match the type to be
-created, the parameter is unset and recreated.
+created, the parameter is unset and recreated. The tt(-g) flag may
+be given to suppress warnings from the tt(WARN_CREATE_GLOBAL)
+and tt(WARN_NESTED_VAR) options.
If an array or array slice is being edited, separator characters as defined
in tt($IFS) will be shown quoted with a backslash, as will backslashes
diff --git a/Functions/Chpwd/zsh_directory_name_cdr b/Functions/Chpwd/zsh_directory_name_cdr
index c9be7db..cb72e46 100644
--- a/Functions/Chpwd/zsh_directory_name_cdr
+++ b/Functions/Chpwd/zsh_directory_name_cdr
@@ -1,14 +1,13 @@
if [[ $1 = n ]]; then
if [[ $2 = <-> ]]; then
# Recent directory
- typeset -ga reply
autoload -Uz cdr
cdr -r
if [[ -n ${reply[$2]} ]]; then
- reply=(${reply[$2]})
+ typeset -ga reply=(${reply[$2]})
return 0
else
- reply=()
+ typeset -ga reply=()
return 1
fi
fi
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index b78c47e..99e44a7 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -1652,6 +1652,7 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func))
Param pm = 0;
int ifl;
int type = PM_SCALAR, obreaks = breaks, haso = 0, oSHTTY = 0;
+ int warn_flags;
char *p1, *p2, *main_keymapname, *vicmd_keymapname, *init, *finish;
Keymap main_keymapsave = NULL, vicmd_keymapsave = NULL;
FILE *oshout = NULL;
@@ -1665,6 +1666,7 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func))
return 1;
}
+ warn_flags = OPT_ISSET(ops, 'g') ? 0 : ASSPM_WARN;
if (OPT_ISSET(ops,'A'))
{
if (OPT_ISSET(ops, 'a'))
@@ -1845,11 +1847,11 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func))
a = spacesplit(t, 1, 0, 1);
zsfree(t);
if (PM_TYPE(pm->node.flags) == PM_ARRAY)
- setaparam(args[0], a);
+ assignaparam(args[0], a, warn_flags);
else
sethparam(args[0], a);
} else
- setsparam(args[0], t);
+ assignsparam(args[0], t, warn_flags);
unqueue_signals();
return 0;
}
@@ -2148,7 +2150,7 @@ zle_main_entry(int cmd, va_list ap)
static struct builtin bintab[] = {
BUILTIN("bindkey", 0, bin_bindkey, 0, -1, 0, "evaM:ldDANmrsLRp", NULL),
- BUILTIN("vared", 0, bin_vared, 1, 1, 0, "aAcef:hi:M:m:p:r:t:", NULL),
+ BUILTIN("vared", 0, bin_vared, 1, 1, 0, "aAcef:ghi:M:m:p:r:t:", NULL),
BUILTIN("zle", 0, bin_zle, 0, -1, 0, "aAcCDfFgGIKlLmMNrRTUw", NULL),
};
Messages sorted by:
Reverse Date,
Date,
Thread,
Author