From 0a6cb5078d223288f9d3ab779fcc57370a10a6bb Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Mon, 25 Jun 2018 09:31:40 +0100 Subject: 43084: Variable warning suppression enhancements. Add vared -g option along the lines of typeset -g. Set reply safely in zsh_directory_name_cdr. --- ChangeLog | 6 ++++++ Doc/Zsh/zle.yo | 6 ++++-- Functions/Chpwd/zsh_directory_name_cdr | 5 ++--- Src/Zle/zle_main.c | 8 +++++--- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index a003eeac9..6e83c53c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2018-06-25 Peter Stephenson + + * 43084: Doc/Zsh/zle.yo, Functions/Chpwd/zsh_directory_name_cdr, + Src/Zle/zle_main.c: vared -g suppresses variable creation and + override warnings; also suppress in function. + 2018-06-25 Jun-ichi Takimoto * 43079, 43086: Completion/Unix/Type/_process_names, diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo index bd0252f6e..b72606c0b 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 c9be7db0c..cb72e4600 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 b78c47eed..99e44a744 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), }; -- cgit 1.4.1