sh: Pass TERM changes to libedit.

I have changed the patch slightly to ignore TERM changes in subshells.

PR:		bin/146916
Submitted by:	Guy Yur
Obtained from:	NetBSD
This commit is contained in:
Jilles Tjoelker 2010-06-02 19:16:58 +00:00
parent cf7d8dea39
commit 580eefdf4f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=208755
4 changed files with 22 additions and 0 deletions

View File

@ -98,6 +98,8 @@ histedit(void)
/*
* turn editing on
*/
char *term;
INTOFF;
if (el_in == NULL)
el_in = fdopen(0, "r");
@ -107,6 +109,11 @@ histedit(void)
el_out = fdopen(2, "w");
if (el_in == NULL || el_err == NULL || el_out == NULL)
goto bad;
term = lookupvar("TERM");
if (term)
setenv("TERM", term, 1);
else
unsetenv("TERM");
el = el_init(arg0, el_in, el_out, el_err);
if (el != NULL) {
if (hist)
@ -160,6 +167,13 @@ sethistsize(hs)
}
}
void
setterm(const char *term)
{
if (rootshell && el != NULL && term != NULL)
el_set(el, EL_TERMINAL, term);
}
int
histcmd(int argc, char **argv)
{

View File

@ -38,6 +38,7 @@ extern int displayhist;
void histedit(void);
void sethistsize(const char *);
void setterm(const char *);
int histcmd(int, char **);
int not_fcnumber(const char *);
int str_to_event(const char *, int);

View File

@ -80,6 +80,7 @@ struct varinit {
#ifndef NO_HISTORY
struct var vhistsize;
struct var vterm;
#endif
struct var vifs;
struct var vmail;
@ -114,6 +115,10 @@ STATIC const struct varinit varinit[] = {
NULL },
{ &vps4, 0, "PS4=+ ",
NULL },
#ifndef NO_HISTORY
{ &vterm, VUNSET, "TERM=",
setterm },
#endif
{ &voptind, 0, "OPTIND=1",
getoptsreset },
{ NULL, 0, NULL,

View File

@ -77,6 +77,7 @@ extern struct var vps2;
extern struct var vps4;
#ifndef NO_HISTORY
extern struct var vhistsize;
extern struct var vterm;
#endif
/*
@ -96,6 +97,7 @@ extern struct var vhistsize;
#define optindval() (voptind.text + 7)
#ifndef NO_HISTORY
#define histsizeval() (vhistsize.text + 9)
#define termval() (vterm.text + 5)
#endif
#define mpathset() ((vmpath.flags & VUNSET) == 0)