From 67d882479b61165c5d58bd72430d6009f4a7f25f Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Sun, 5 Mar 2017 22:25:33 +0000 Subject: 40745 + 40753: Fix 'unset ZLE_RPROMPT_INDENT' not restoring the default behaviour. To reproduce: RPS1=foo ZLE_RPROMPT_INDENT=42 unset ZLE_RPROMPT_INDENT --- ChangeLog | 3 +++ Src/init.c | 2 +- Src/params.c | 20 +++++++++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 864a3ec62..4219b1510 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2017-03-08 Daniel Shahaf + * 40745 + 40753: Src/init.c, Src/params.c: Fix 'unset + ZLE_RPROMPT_INDENT' not restoring the default behaviour. + * 40744: Doc/Zsh/grammar.yo: Document the SHORT_LOOPS 'function' syntax. diff --git a/Src/init.c b/Src/init.c index c12043b88..a1162b318 100644 --- a/Src/init.c +++ b/Src/init.c @@ -790,7 +790,7 @@ init_term(void) tcstr[TCCLEARSCREEN] = ztrdup("\14"); tclen[TCCLEARSCREEN] = 1; } - rprompt_indent = 1; + rprompt_indent = 1; /* If you change this, update rprompt_indent_unsetfn() */ /* The following is an attempt at a heuristic, * but it fails in some cases */ /* rprompt_indent = ((hasam && !hasbw) || hasye || !tccan(TCLEFT)); */ diff --git a/Src/params.c b/Src/params.c index 8942fefc2..b89fb74eb 100644 --- a/Src/params.c +++ b/Src/params.c @@ -128,6 +128,11 @@ struct timeval shtimer; /**/ mod_export int termflags; +/* Forward declaration */ + +static void +rprompt_indent_unsetfn(Param pm, int exp); + /* Standard methods for get/set/unset pointers in parameters */ /**/ @@ -241,6 +246,9 @@ static const struct gsu_integer argc_gsu = static const struct gsu_array pipestatus_gsu = { pipestatgetfn, pipestatsetfn, stdunsetfn }; +static const struct gsu_integer rprompt_indent_gsu = +{ intvargetfn, zlevarsetfn, rprompt_indent_unsetfn }; + /* Nodes for special parameters for parameter hash table */ #ifdef HAVE_UNION_INIT @@ -327,7 +335,7 @@ IPDEF4("ZSH_SUBSHELL", &zsh_subshell), #define IPDEF5U(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL|PM_UNSET},BR((void *)B),GSU(F),10,0,NULL,NULL,NULL,0} IPDEF5("COLUMNS", &zterm_columns, zlevar_gsu), IPDEF5("LINES", &zterm_lines, zlevar_gsu), -IPDEF5U("ZLE_RPROMPT_INDENT", &rprompt_indent, zlevar_gsu), +IPDEF5U("ZLE_RPROMPT_INDENT", &rprompt_indent, rprompt_indent_gsu), IPDEF5("SHLVL", &shlvl, varinteger_gsu), /* Don't import internal integer status variables. */ @@ -3733,6 +3741,16 @@ zlevarsetfn(Param pm, zlong x) adjustwinsize(2 + (p == &zterm_columns)); } + +/* Implements gsu_integer.unsetfn for ZLE_RPROMPT_INDENT; see stdunsetfn() */ + +static void +rprompt_indent_unsetfn(Param pm, int exp) +{ + stdunsetfn(pm, exp); + rprompt_indent = 1; /* Keep this in sync with init_term() */ +} + /* Function to set value of generic special scalar * * parameter. data is pointer to a character pointer * * representing the scalar (string). */ -- cgit 1.4.1