Luna/shell/Prompt.cpp
2024-04-20 17:17:31 +02:00

47 lines
1010 B
C++

/**
* @file Prompt.cpp
* @author apio (cloudapio.eu)
* @brief Displays the shell prompt.
*
* @copyright Copyright (c) 2024, the Luna authors.
*
*/
#include "Prompt.h"
#include <luna/String.h>
#include <os/File.h>
#include <os/FileSystem.h>
#include <pwd.h>
#include <stdlib.h>
#include <sys/utsname.h>
#include <unistd.h>
struct utsname g_sysinfo;
const char* hostname = "";
const char* username = "";
char prompt_end = '$';
void setup_prompt()
{
// Set up everything to form a prompt.
uname(&g_sysinfo);
hostname = g_sysinfo.nodename;
if (getuid() == 0) prompt_end = '#';
struct passwd* pw = getpwuid(getuid());
if (pw) { username = pw->pw_name; }
else { username = getenv("USER"); }
endpwent();
}
Result<void> display_prompt()
{
auto cwd = TRY(os::FileSystem::working_directory());
os::print("\x1b[%dm%s\x1b[m@\x1b[36m%s\x1b[m:\x1b[1;34m%s\x1b[m%c ", getuid() == 0 ? 31 : 35, username, hostname,
cwd.chars(), prompt_end);
return {};
}