From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18767 invoked by alias); 8 Nov 2016 20:44:11 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39878 Received: (qmail 6715 invoked from network); 8 Nov 2016 20:44:11 -0000 X-Qmail-Scanner-Diagnostics: from mail-wm0-f68.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(74.125.82.68):SA:0(0.0/5.0):. Processed in 0.472461 secs); 08 Nov 2016 20:44:11 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,SPF_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: layus.on@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 74.125.82.68 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=vJH7dRCMxgFh+rb1mbXtQf5VjE5yFmzTDyRnLihyDKw=; b=ipkfr57QNU6HQsHDkZ1P/Tarndu3nm/oYKleL80aYICrEnAuKIiEU+N3wbyhD3Hru+ Pchdhy/AS5eAl1CCLfDp+gvFh//o2NCdd9nCudfZbtScdb/5aI1aSW/iaYSRfGBQwplJ 2TuzxZEndjVls28W0NreRkeduyULEa80Us+dtn1eLLJAiK5sKHrNysmEEH5Hx7IaKmnJ cOzGe/cxGmiclGPyXMF9MFNyecMOLMqT3y4muv9tr4F54OMgGyQeq2Pc03aQVbGxowHi CPD10ec/e3i5Op9vXB9aOXxjyqA8RJPC6YO5SojTGiFNWaelmGGomA21ZpCu5G118OMJ IveQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=vJH7dRCMxgFh+rb1mbXtQf5VjE5yFmzTDyRnLihyDKw=; b=NEg6XCWi6Av5TDy1CWuIMczDfsaspFKVTKFBXpb9PtoOWSN+fwrzmaMZptXOMabBrJ bkWxPxRraX82x+1v3u7GH3VYW0Iyzv3O+GbqVmNA1HgK/VyaqziXWlByuehWxyV167Ft 7BpfE6/C/rNrl78RCzpLXvoa6nCO8+l5KyyS7ENOeM4E9dLc6swpl5qR3yMXbtclWFYk VAv6GRUPT3/GNBUEq1RxPy45In62a5oJCCZZDgtT/zIJeL5599E+hPNrQnEKpmf0+ljV szHdzo8R/nzpJHibICp7EFLXtQJ9bkJub11G+oW0Ie7x0FJaumQA2aq0CVrFGhwIVWaP mK3w== X-Gm-Message-State: ABUngvf7m7afXn68QRuT+D81FmsZrqaiNdo7h5q/Asyyy96PzzI3uHQ0DrvFjnWDkYmtZg== X-Received: by 10.28.150.20 with SMTP id y20mr16234086wmd.67.1478636834160; Tue, 08 Nov 2016 12:27:14 -0800 (PST) From: Guillaume Maudoux To: zsh-workers@zsh.org Cc: Guillaume Maudoux Subject: [PATCH] make TERMINFO_DIRS variable special Date: Tue, 8 Nov 2016 21:26:51 +0100 Message-Id: <20161108202651.22527-1-layus.on@gmail.com> X-Mailer: git-send-email 2.10.1 --- Doc/Zsh/params.yo | 15 +++++++++++---- Src/params.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Doc/Zsh/params.yo b/Doc/Zsh/params.yo index c7d84b9..728fc21 100644 --- a/Doc/Zsh/params.yo +++ b/Doc/Zsh/params.yo @@ -1485,10 +1485,17 @@ take effect. ) vindex(TERMINFO) item(tt(TERMINFO) )( -A reference to a compiled description of the terminal, used by the -`terminfo' library when the system has it; see manref(terminfo)(5). -If set, this causes the shell to reinitialise the terminal, making -the workaround `tt(TERM=$TERM)' unnecessary. +A reference to a directory containing the compiled description of +terminals, used by the `terminfo' library when the system has it; see +manref(terminfo)(5). If set, this causes the shell to reinitialise the +terminal, making the workaround `tt(TERM=$TERM)' unnecessary. +) +vindex(TERMINFO_DIRS) +item(tt(TERMINFO_DIRS) )( +An array (colon-separated list) of paths to be searched for a compiled +description of the terminal, used by the `terminfo' library when the system has +it; see manref(terminfo)(5). If set, this causes the shell to reinitialise the +terminal, making the workaround `tt(TERM=$TERM)' unnecessary. ) vindex(TIMEFMT) item(tt(TIMEFMT))( diff --git a/Src/params.c b/Src/params.c index 19a8c29..92b8ac1 100644 --- a/Src/params.c +++ b/Src/params.c @@ -87,6 +87,7 @@ char *ifs, /* $IFS */ *postedit, /* $POSTEDIT */ *term, /* $TERM */ *zsh_terminfo, /* $TERMINFO */ + *zsh_terminfodirs, /* $TERMINFO_DIRS */ *ttystrname, /* $TTY */ *pwd; /* $PWD */ @@ -208,6 +209,8 @@ static const struct gsu_scalar term_gsu = { termgetfn, termsetfn, stdunsetfn }; static const struct gsu_scalar terminfo_gsu = { terminfogetfn, terminfosetfn, stdunsetfn }; +static const struct gsu_scalar terminfodirs_gsu = +{ terminfodirsgetfn, terminfodirssetfn, stdunsetfn }; static const struct gsu_scalar wordchars_gsu = { wordcharsgetfn, wordcharssetfn, stdunsetfn }; static const struct gsu_scalar ifs_gsu = @@ -283,6 +286,7 @@ IPDEF2("histchars", histchars_gsu, PM_DONTIMPORT), IPDEF2("HOME", home_gsu, PM_UNSET), IPDEF2("TERM", term_gsu, PM_UNSET), IPDEF2("TERMINFO", terminfo_gsu, PM_UNSET), +IPDEF2("TERMINFO_DIRS", terminfodirs_gsu, PM_UNSET), IPDEF2("WORDCHARS", wordchars_gsu, 0), IPDEF2("IFS", ifs_gsu, PM_DONTIMPORT | PM_RESTRICTED), IPDEF2("_", underscore_gsu, PM_DONTIMPORT), @@ -4511,6 +4515,33 @@ terminfosetfn(Param pm, char *x) term_reinit_from_pm(); } +/* Function to get value of special parameter `TERMINFO_DIRS' */ + +/**/ +char * +terminfodirsgetfn(UNUSED(Param pm)) +{ + return zsh_terminfodirs ? zsh_terminfodirs : dupstring(""); +} + +/* Function to set value of special parameter `TERMINFO_DIRS' */ + +/**/ +void +terminfodirssetfn(Param pm, char *x) +{ + zsfree(zsh_terminfodirs); + zsh_terminfodirs = x; + + /* + * terminfo relies on the value being exported before + * we reinitialise the terminal. This is a bit inefficient. + */ + if ((pm->node.flags & PM_EXPORTED) && x) + addenv(pm, x); + + term_reinit_from_pm(); +} /* Function to get value for special parameter `pipestatus' */ /**/ -- 2.10.1