summary refs log tree commit diff
path: root/bin/1sh
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-03-09 19:17:31 -0400
committerJune McEnroe <june@causal.agency>2020-03-09 20:01:30 -0400
commit473b9b6d747ecda456adea7ae7d3ff6d9bcf91ed (patch)
treee86192608c4a55db542963686adb33c8cc995bae /bin/1sh
parentAdd PS0 pre-prompt string (diff)
downloadsrc-473b9b6d747ecda456adea7ae7d3ff6d9bcf91ed.tar.gz
src-473b9b6d747ecda456adea7ae7d3ff6d9bcf91ed.zip
Shorten $HOME to ~ in prompt expansion
Diffstat (limited to '')
-rw-r--r--bin/1sh/parser.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/bin/1sh/parser.c b/bin/1sh/parser.c
index 080b84e7..3f73220f 100644
--- a/bin/1sh/parser.c
+++ b/bin/1sh/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;
 
 				/*
4adf29ced0&follow=1'>Add tests for formatParseJune McEnroe 2018-09-13Preview with nick in input windowJune McEnroe 2018-09-13Never send PRIVMSG to TagStatus or TagVerboseJune McEnroe 2018-09-13Move color selection to format.cJune McEnroe 2018-09-13Fix len for format->split at end of stringJune McEnroe 2018-09-13Avoid uninitialized x in uiReadJune McEnroe 2018-09-13Add IRCDefault to colors enumJune McEnroe 2018-09-13Return a format->split even at the end of the stringJune McEnroe 2018-09-13Fix weird tab-complete after commaJune McEnroe 2018-09-13Rewrite UI againJune McEnroe 2018-09-12Add note about C-oJune McEnroe 2018-09-12Use formatParse split to position input cursorJune McEnroe 2018-09-12Factor out IRC formatting parsingJune McEnroe 2018-09-11Add /help equivalent to /manJune McEnroe 2018-09-11Don't render every PM as a pingJune McEnroe 2018-09-11Add urlOpenMatchJune McEnroe 2018-09-10Depend on man.sh for chroot.tar targetJune McEnroe 2018-09-10Set LESSSECURE=1 in man.shJune McEnroe 2018-09-10Add /man commandJune McEnroe 2018-09-10Install man page in chrootJune McEnroe 2018-09-10Install man pageJune McEnroe 2018-09-10Split keys into subsections and document colorsJune McEnroe 2018-09-10Add "blank" lines to chatte.1June McEnroe 2018-09-10Document key bindings in chatte.1June McEnroe 2018-09-08Document slash commands in chatte.1June McEnroe