Author: trasz
Date: Fri Dec 28 17:51:40 2018
New Revision: 342577
URL: https://svnweb.freebsd.org/changeset/base/342577

Log:
  Make sh(1) collapse $HOME into "~" in PS1.
  
  Reviewed by:  jilles
  MFC after:    2 weeks
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D18663

Modified:
  head/bin/sh/parser.c

Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c        Fri Dec 28 17:50:40 2018        (r342576)
+++ head/bin/sh/parser.c        Fri Dec 28 17:51:40 2018        (r342577)
@@ -1978,7 +1978,9 @@ getprompt(void *unused __unused)
 {
        static char ps[PROMPTLEN];
        const char *fmt;
+       const char *home;
        const char *pwd;
+       size_t homelen;
        int i, trim;
        static char internal_error[] = "??";
 
@@ -2039,8 +2041,24 @@ getprompt(void *unused __unused)
                                    *pwd == '/' && pwd[1] != '\0')
                                        strlcpy(&ps[i], strrchr(pwd, '/') + 1,
                                            PROMPTLEN - i);
-                               else
-                                       strlcpy(&ps[i], pwd, PROMPTLEN - i);
+                               else {
+                                       home = lookupvar("HOME");
+                                       if (home != NULL)
+                                               homelen = strlen(home);
+                                       if (home != NULL &&
+                                           strcmp(home, "/") != 0 &&
+                                           strncmp(pwd, home, homelen) == 0 &&
+                                           (pwd[homelen] == '/' ||
+                                           pwd[homelen] == '\0')) {
+                                               strlcpy(&ps[i], "~",
+                                                   PROMPTLEN - i);
+                                               strlcpy(&ps[i + 1],
+                                                   pwd + homelen,
+                                                   PROMPTLEN - i - 1);
+                                       } else {
+                                               strlcpy(&ps[i], pwd, PROMPTLEN 
- i);
+                                       }
+                               }
                                /* Skip to end of path. */
                                while (ps[i + 1] != '\0')
                                        i++;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to