summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2010-06-02 19:16:58 +0000
committerjilles <jilles@FreeBSD.org>2010-06-02 19:16:58 +0000
commite5f96a4e051e13725fc9c904fa4b2d2214e48eb7 (patch)
treeabe0a29df5a319ce831fc93ef7d6b9bbfc7f34ff
parentbf334bd4a759559e589a8fe20eebf8c48effbca1 (diff)
downloadFreeBSD-src-e5f96a4e051e13725fc9c904fa4b2d2214e48eb7.zip
FreeBSD-src-e5f96a4e051e13725fc9c904fa4b2d2214e48eb7.tar.gz
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
-rw-r--r--bin/sh/histedit.c14
-rw-r--r--bin/sh/myhistedit.h1
-rw-r--r--bin/sh/var.c5
-rw-r--r--bin/sh/var.h2
4 files changed, 22 insertions, 0 deletions
diff --git a/bin/sh/histedit.c b/bin/sh/histedit.c
index cdde09a..521c6f7 100644
--- a/bin/sh/histedit.c
+++ b/bin/sh/histedit.c
@@ -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)
{
diff --git a/bin/sh/myhistedit.h b/bin/sh/myhistedit.h
index f4fa374..bc9fd4e 100644
--- a/bin/sh/myhistedit.h
+++ b/bin/sh/myhistedit.h
@@ -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);
diff --git a/bin/sh/var.c b/bin/sh/var.c
index 75de239..6f4acae 100644
--- a/bin/sh/var.c
+++ b/bin/sh/var.c
@@ -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,
diff --git a/bin/sh/var.h b/bin/sh/var.h
index 6a02630..1ec707b 100644
--- a/bin/sh/var.h
+++ b/bin/sh/var.h
@@ -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)
OpenPOWER on IntegriCloud