summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-01-13 20:18:26 -0500
committerJune McEnroe <june@causal.agency>2019-01-13 20:18:26 -0500
commit1e9981486305eb3bebe4c7659b1c8717701e72f7 (patch)
tree05120e5febb7d33594fdd6e5f4c47f6fab43897d
parentDocument PSlit (diff)
downloadsrc-1e9981486305eb3bebe4c7659b1c8717701e72f7.tar.gz
src-1e9981486305eb3bebe4c7659b1c8717701e72f7.zip
Shorten $HOME to ~ in prompt expansion
Diffstat (limited to '')
-rw-r--r--bin/cash/parser.c18
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;
 
 				/*
>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 I have no idea why I did this. 2018-09-13Rewrite UI againJune McEnroe The persistent topic is gone and the status line is now at the top. The status formatting still needs to be reworked. I also want to try showing the nick in the input window so it really looks like your next message. 2018-09-12Add note about C-oJune McEnroe Why are there so few well usable ctrl key bindings? 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 Ridiculous. 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