1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 03:17:34 +00:00

Shell: Build prompt based on the PROMPT environment variable if present

This commit is contained in:
Andreas Kling 2020-02-10 21:40:22 +01:00
parent 1828d9eadd
commit 8262c1e662

View file

@ -55,6 +55,8 @@ static int run_command(const String&);
static String prompt() static String prompt()
{ {
auto* ps1 = getenv("PROMPT");
if (!ps1) {
if (g.uid == 0) if (g.uid == 0)
return "# "; return "# ";
@ -64,6 +66,42 @@ static String prompt()
return builder.to_string(); return builder.to_string();
} }
StringBuilder builder;
for (char* ptr = ps1; *ptr; ++ptr) {
if (*ptr == '\\') {
++ptr;
if (!*ptr)
break;
switch (*ptr) {
case 'X':
builder.append("\033]0;");
break;
case 'a':
builder.append(0x07);
break;
case 'e':
builder.append(0x1b);
break;
case 'u':
builder.append(g.username);
break;
case 'h':
builder.append(g.hostname);
break;
case 'w':
builder.append(g.cwd);
break;
case 'p':
builder.append(g.uid == 0 ? '#' : '$');
break;
}
continue;
}
builder.append(*ptr);
}
return builder.to_string();
}
static int sh_pwd(int, char**) static int sh_pwd(int, char**)
{ {
printf("%s\n", g.cwd.characters()); printf("%s\n", g.cwd.characters());