From 580eefdf4f4157461da417f93d8b6a1cc9052b1d Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Wed, 2 Jun 2010 19:16:58 +0000 Subject: [PATCH] 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 --- bin/sh/histedit.c | 14 ++++++++++++++ bin/sh/myhistedit.h | 1 + bin/sh/var.c | 5 +++++ bin/sh/var.h | 2 ++ 4 files changed, 22 insertions(+) diff --git a/bin/sh/histedit.c b/bin/sh/histedit.c index cdde09ac8e57..521c6f793cca 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 f4fa37407285..bc9fd4eddda1 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 75de239b7753..6f4acae1ba59 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 6a02630842d3..1ec707be7df3 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)