From 4e0a3e54a37b1981c7ca6572d1665d295bdc9fc4 Mon Sep 17 00:00:00 2001 From: Luca Conte Date: Sun, 11 Aug 2024 23:34:01 +0000 Subject: [PATCH] current state --- main.c | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 main.c diff --git a/main.c b/main.c new file mode 100644 index 0000000..747570b --- /dev/null +++ b/main.c @@ -0,0 +1,148 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define C_DEFAULT 39 +#define C_BLACK 30 +#define C_RED 31 +#define C_GREEN 32 +#define C_YELLOW 33 +#define C_BLUE 34 +#define C_MAGENTA 35 +#define C_CYAN 36 +#define C_L_GRAY 37 +#define C_D_GRAY 90 +#define C_L_RED 91 +#define C_L_GREEN 92 +#define C_L_YELLOW 93 +#define C_L_BLUE 94 +#define C_L_MAGENTA 95 +#define C_L_CYAN 96 +#define C_WHITE 97 + + +#define SEPERATOR L'\xe0bc' +#define USER L'\xf2c0' +#define DEVICE L'\xf4a9' +#define BRANCH L'\xf418' +#define FOLDER L'\xf114' + +int fg = C_BLACK; + +int bgHost = C_L_CYAN; +int bgUser = C_L_GREEN; +int bgBranch = C_L_GRAY; +int bgEnd = C_CYAN; +int bgFolder[] = { C_WHITE, C_CYAN }; +int numFolderColors = 2; + +void fgcol(int col) { + wprintf(L"\\[\x1b[%dm\\]", col); +} +void bgcol(int col) { + wprintf(L"\\[\x1b[%dm\\]",col + 10); +} + +void printGlyph(wchar_t unicode) { + wprintf(L"%lc", unicode); +} + +void seperate(int col1, int col2) { + fgcol(col1); + bgcol(col2); + printGlyph(SEPERATOR); + fgcol(fg); +} + +int main(void) { + char path_buf[1024]; + getcwd(path_buf, sizeof(path_buf)); + + char hostname_buf[1024]; + gethostname(hostname_buf, sizeof(hostname_buf)); + + struct passwd *p = getpwuid(getuid()); + char* username_buf = p->pw_name; + + FILE *fp; + char branch[1024]; + fp = popen("/usr/bin/git rev-parse --abbrev-ref HEAD 2>/dev/null", "r"); + if (fp == NULL) exit(1); + + if (fgets(branch, sizeof(branch), fp) == NULL) branch[0] = 0x00; + + + + if (strcmp(username_buf, "root") == 0) { + bgUser = C_L_MAGENTA; + } + + + setlocale(LC_CTYPE, ""); + + fgcol(C_BLACK); + bgcol(bgHost); + + wprintf(L" "); + printGlyph(DEVICE); + wprintf(L" %s ", hostname_buf); + + seperate(bgHost, bgUser); + + wprintf(L" "); + printGlyph(USER); + wprintf(L" %s ", username_buf); + + + int folder = 0; + + seperate(bgUser, bgFolder[0]); + wprintf(L" "); + printGlyph(FOLDER); + wprintf(L" "); + for (int i = 1; i < strlen(path_buf); i++) { + if (path_buf[i] == '/') { + if (path_buf[i + 1] != 0x00) { + wprintf(L" "); + seperate(bgFolder[folder % numFolderColors], bgFolder[(folder + 1) % numFolderColors]); + wprintf(L" "); + printGlyph(FOLDER); + wprintf(L" "); + folder++; + } + } else { + wprintf(L"%c", path_buf[i]); + } + } + + if (strlen(path_buf)!=1) { + wprintf(L" "); + } + seperate(bgFolder[folder % numFolderColors], C_DEFAULT); + wprintf(L"\n"); + + + if (strlen(branch) > 0) { + bgcol(bgBranch); + wprintf(L" "); + printGlyph(BRANCH); + wprintf(L" "); + for (int i = 0; i < strlen(branch); i++) { + if (branch[i] == '\n') break; + wprintf(L"%c", branch[i]); + } + seperate(bgBranch, bgEnd); + } + bgcol(bgEnd); + wprintf(L" $ "); + seperate(bgEnd, C_DEFAULT); + wprintf(L" "); + + fgcol(0); + +}