Quellcode durchsuchen

feat: add ansi colors

master
Daniel Ledda vor 2 Monaten
Ursprung
Commit
4b1dd8e66b
2 geänderte Dateien mit 67 neuen und 3 gelöschten Zeilen
  1. +21
    -3
      app.cpp
  2. +46
    -0
      djstdlib/core.h

+ 21
- 3
app.cpp Datei anzeigen

@@ -143,7 +143,7 @@ int gymTrackerStatus(Arena *arena, list<string> args) {
GymLogDbParsed *db = parseDb(arena, os_readEntireFile(arena, DB_FILE_LOCATION));

Timestamp startTs = {0};
ParsePositiveIntResult numDays = {1, false};
ParsePositiveIntResult numDays = {1, true};
bool showAll = args.length == 1 && strEql(args.data[0], "--all"_s);
if (!showAll) {
if (args.length == 2 && (strEql(args.data[0], "--days"_s) || strEql(args.data[0], "-d"_s))) {
@@ -169,6 +169,7 @@ int gymTrackerStatus(Arena *arena, list<string> args) {
list<string> nameByExercise = PushFullListZero(arena, string, db->header.nextId);

list<real32> workPerExerciseByDay = PushFullListZero(arena, real32, db->header.nextId);
list<real32> workPerExerciseByPrevDay = PushFullListZero(arena, real32, db->header.nextId);
list<uint32> restPerExerciseByDay = PushFullListZero(arena, uint32, db->header.nextId);
list<uint32> lastTsPerExerciseByDay = PushFullListZero(arena, uint32, db->header.nextId);

@@ -192,7 +193,7 @@ int gymTrackerStatus(Arena *arena, list<string> args) {
if (dayCount > 0) {
log("\n");
}
log("================ %S =================================\n", formatTimeYmd(arena, &timestamp));
log("================ %S ===================\n", formatTimeYmd(arena, &timestamp));
lastDay = timestamp.tm_yday;
lastYear = timestamp.tm_year;
dayCount++;
@@ -245,12 +246,29 @@ int gymTrackerStatus(Arena *arena, list<string> args) {
log("Work summary:\n");
for (size_t j = 0; j < workPerExerciseByDay.length; j++) {
if (workPerExerciseByDay.data[j] != 0.0f) {
log("%S: %.2fkg in %.2fmin\n", nameByExercise.data[j], workPerExerciseByDay.data[j], (real32)restPerExerciseByDay.data[j] / 60.0f);
const char *fmtString;
real32 improvement = 0;
if (workPerExerciseByPrevDay.data[j] == 0) {
fmtString = COLOR_TEXT("%S", ANSI_fg_cyan) ": %.2fkg in %.2fmin\n";
} else {
improvement = workPerExerciseByDay.data[j] - workPerExerciseByPrevDay.data[j];
if (improvement > 0) {
fmtString = COLOR_TEXT("%S", ANSI_fg_cyan) ": %.2fkg in %.2fmin " COLOR_TEXT("+%.2fkg\n", ANSI_fg_green);
} else {
fmtString = COLOR_TEXT("%S", ANSI_fg_cyan) ": %.2fkg in %.2fmin " COLOR_TEXT("%.2fkg\n", ANSI_fg_red);
}
}

log(fmtString, nameByExercise.data[j], workPerExerciseByDay.data[j], (real32)restPerExerciseByDay.data[j] / 60.0f, improvement);

workPerExerciseByPrevDay.data[j] = workPerExerciseByDay.data[j];
}
}
zeroListFull(&workPerExerciseByDay);
zeroListFull(&restPerExerciseByDay);
zeroListFull(&lastTsPerExerciseByDay);
prevEntry = 0;
entry = 0;
}
}
}


+ 46
- 0
djstdlib/core.h Datei anzeigen

@@ -208,6 +208,52 @@ enum LogTarget {
LogTarget_count,
};

#define ANSI_INSTRUCTION_FROM_ENUM(ansiCodeEnum) ANSI_INSTRUCTION(ansiCodeEnum)
#define ANSI_INSTRUCTION(ansiCode) "\u001b[" #ansiCode "m"
#define ANSI_INSTRUCTION_STR(ansiCodeStr) "\u001b[" ansiCodeStr "m"
#define ANSI_RESET ANSI_INSTRUCTION(0)

#define ANSI_fg_black 30
#define ANSI_fg_red 31
#define ANSI_fg_green 32
#define ANSI_fg_yellow 33
#define ANSI_fg_blue 34
#define ANSI_fg_magenta 35
#define ANSI_fg_cyan 36
#define ANSI_fg_white 37

#define ANSI_fg_bblack 90
#define ANSI_fg_bred 91
#define ANSI_fg_bgreen 92
#define ANSI_fg_byellow 93
#define ANSI_fg_bblue 94
#define ANSI_fg_bmagenta 95
#define ANSI_fg_bcyan 96
#define ANSI_fg_bwhite 97

#define ANSI_bg_black 40
#define ANSI_bg_red 41
#define ANSI_bg_green 42
#define ANSI_bg_yellow 43
#define ANSI_bg_blue 44
#define ANSI_bg_magenta 45
#define ANSI_bg_cyan 46
#define ANSI_bg_white 47

#define ANSI_bg_bblack 100
#define ANSI_bg_bred 101
#define ANSI_bg_bgreen 102
#define ANSI_bg_byellow 103
#define ANSI_bg_bblue 104
#define ANSI_bg_bmagenta 105
#define ANSI_bg_bcyan 106
#define ANSI_bg_bwhite 107

#define COLOR_TEXT(text, foregroundcolor) ANSI_INSTRUCTION_FROM_ENUM(foregroundcolor) text ANSI_RESET
#define COLOR_TEXT_BG(text, backgroundcolor) ANSI_INSTRUCTION_FROM_ENUM(backgroundcolor) text ANSI_RESET
#define COLOR_TEXT_FG_BG(text, foregroundcolor, backgroundcolor) ANSI_INSTRUCTION_FROM_ENUM(foregroundcolor) ANSI_INSTRUCTION_FROM_ENUM(backgroundcolor) text ANSI_RESET
#define COLOR_TEXT_RGB(text, red, green, blue) ANSI_INSTRUCTION_STR("38;2;" #red ";" #green ";" #blue) text ANSI_RESET

void log(list<int> l, LogTarget target = LogTarget_stdout);
void log(list<string> l, LogTarget target = LogTarget_stdout);
void log(const char *fmt, ...);


||||||
x
 
000:0
Laden…
Abbrechen
Speichern