diff options
author | jilles <jilles@FreeBSD.org> | 2010-06-02 19:16:58 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2010-06-02 19:16:58 +0000 |
commit | e5f96a4e051e13725fc9c904fa4b2d2214e48eb7 (patch) | |
tree | abe0a29df5a319ce831fc93ef7d6b9bbfc7f34ff /bin | |
parent | bf334bd4a759559e589a8fe20eebf8c48effbca1 (diff) | |
download | FreeBSD-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
Diffstat (limited to 'bin')
-rw-r--r-- | bin/sh/histedit.c | 14 | ||||
-rw-r--r-- | bin/sh/myhistedit.h | 1 | ||||
-rw-r--r-- | bin/sh/var.c | 5 | ||||
-rw-r--r-- | bin/sh/var.h | 2 |
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) |