current state
This commit is contained in:
parent
53a322ef30
commit
4e0a3e54a3
|
@ -0,0 +1,148 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#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);
|
||||||
|
|
||||||
|
}
|
Reference in New Issue