diff options
author | June McEnroe <june@causal.agency> | 2019-01-13 20:18:26 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-01-13 20:18:26 -0500 |
commit | 7853763091c9fe2f5309e63a1d998a053a39ba67 (patch) | |
tree | 7ee5d40706735ed579f1cf64f1ee774afe27660e /bin/cash | |
parent | Document PSlit (diff) | |
download | src-7853763091c9fe2f5309e63a1d998a053a39ba67.tar.gz src-7853763091c9fe2f5309e63a1d998a053a39ba67.zip |
Shorten $HOME to ~ in prompt expansion
Diffstat (limited to 'bin/cash')
-rw-r--r-- | bin/cash/parser.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/bin/cash/parser.c b/bin/cash/parser.c index 91771e81..377ab78f 100644 --- a/bin/cash/parser.c +++ b/bin/cash/parser.c @@ -1978,7 +1978,7 @@ pgetc_linecont(void) static char * expandprompt(const char *fmt) { static char ps[PROMPTLEN]; - const char *pwd; + const char *pwd, *home; int i, trim; /* @@ -2015,17 +2015,27 @@ expandprompt(const char *fmt) { case 'W': case 'w': pwd = lookupvar("PWD"); + home = lookupvar("HOME"); if (pwd == NULL || *pwd == '\0') pwd = "?"; + if (home == NULL || *home == '\0') + home = "?"; if (*fmt == 'W' && - *pwd == '/' && pwd[1] != '\0') + *pwd == '/' && pwd[1] != '\0' && + strcmp(pwd, home) != 0) { strlcpy(&ps[i], strrchr(pwd, '/') + 1, PROMPTLEN - i); - else + } else { + if (strncmp(pwd, home, strlen(home)) == 0) { + ps[i++] = '~'; + pwd += strlen(home); + } strlcpy(&ps[i], pwd, PROMPTLEN - i); + } /* Skip to end of path. */ - while (ps[i + 1] != '\0') + while (ps[i] != '\0') i++; + --i; break; /* |