summary refs log tree commit diff
path: root/bin/cash
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 /bin/cash
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;
 
 				/*
Disallow PRIVMSG/NOTICE before registrationJune McEnroe 2019-10-28Move entire login flow to state and reorganize itJune McEnroe 2019-10-27Wait for SASL success before sending CAP ENDJune McEnroe Also refuse to continue logging in if SASL authentication fails. I should really just move all of log in and authentication from server.c to state.c... 2019-10-27Only increment consumer after successful sendJune McEnroe 2019-10-27Set SO_REUSEADDR on bindsJune McEnroe 2019-10-27Output ring info on SIGINFOJune McEnroe 2019-10-27Improve client/server error messagesJune McEnroe 2019-10-27Add reload cmd to rc scriptJune McEnroe Using daemon(8) makes this way more awkward than it should be. 2019-10-27Reload certificate on SIGUSR1June McEnroe 2019-10-27Drop clients on zero-length readsJune McEnroe 2019-10-27Explicitly tls_handshake new clientsJune McEnroe This prevents a client connecting, sending nothing, and getting blocked in tls_read immediately. 2019-10-26Document rationaleJune McEnroe 2019-10-26Handle nick collisionJune McEnroe 2019-10-26Wait for AUTHENTICATE + from serverJune McEnroe 2019-10-26Respond to PING with same parameterJune McEnroe 2019-10-26Add undocumented flag to disable verificationJune McEnroe 2019-10-26Do not require RPL_ISUPPORT for stateReadyJune McEnroe 2019-10-26Implement graceful shutdownJune McEnroe 2019-10-26Require PASS before USERJune McEnroe Prevent creating a ring consumer without authentication. 2019-10-26Track channel topicsJune McEnroe 2019-10-26Set AWAY when no clients are connectedJune McEnroe 2019-10-26Add flags to request TOPIC and NAMES on client connectJune McEnroe 2019-10-26OopsJune McEnroe 2019-10-26Disconnect client on unknown commandJune McEnroe During registration, no other commands should be sent. Afterwards, only intercepted commands will get parsed. 2019-10-26Allow reading sensitive information from filesJune McEnroe 2019-10-26Add rc scriptJune McEnroe 2019-10-25Add install and uninstall targetsJune McEnroe 2019-10-25Expand documentationJune McEnroe 2019-10-25Add AGPLv3 notice on client registrationJune McEnroe OwO 2019-10-25Rename project pounceJune McEnroe