col.h: see origin repo

// origin repo: https://github.com/resyfer/libcol
#ifndef _COL_HOL_H_
#define _COL_HOL_H_#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>  // 新增:添加数学库头文件// 平台检测
#ifdef _WIN32
#include <windows.h>
#else
#include <sys/types.h>
#include <unistd.h>
#ifdef __APPLE__
#include <sys/ioctl.h>
#else
#include <termios.h>
#endif
#endif// 工具宏
#define XSTR(X) #X
#define STR(X) XSTR(X)
#define COL_MAX_CTRL 128
#define COL_MAX_FORMATTED 4096
#define COL_RESET "\033[0m"  // 新增:定义RESET宏// 颜色模式
typedef enum {COL_8,        // 8基础色COL_8_BRIGHT, // 8亮色调COL_256,      // 256色COL_RGB       // RGB真彩色
} col_mode_t;// 文本样式
typedef enum {COL_NORMAL = 0,COL_BOLD = 1,COL_DIM = 2,COL_ITALIC = 3,COL_UNDERLINE = 4,COL_BLINK = 5,COL_REVERSE = 7,COL_HIDDEN = 8,COL_STRIKETHROUGH = 9,COL_DOUBLE_UNDERLINE = 21
} col_style_t;// 8色基础颜色(前景)
typedef enum {COL_BLACK = 30,COL_RED = 31,COL_GREEN = 32,COL_YELLOW = 33,COL_BLUE = 34,COL_MAGENTA = 35,COL_CYAN = 36,COL_WHITE = 37
} col_8_t;// 8色亮色调(前景)
typedef enum {COL_BRIGHT_BLACK = 90,COL_BRIGHT_RED = 91,COL_BRIGHT_GREEN = 92,COL_BRIGHT_YELLOW = 93,COL_BRIGHT_BLUE = 94,COL_BRIGHT_MAGENTA = 95,COL_BRIGHT_CYAN = 96,COL_BRIGHT_WHITE = 97
} col_8_bright_t;// 8色基础颜色(背景)
typedef enum {COL_BG_BLACK = 40,COL_BG_RED = 41,COL_BG_GREEN = 42,COL_BG_YELLOW = 43,COL_BG_BLUE = 44,COL_BG_MAGENTA = 45,COL_BG_CYAN = 46,COL_BG_WHITE = 47
} col_bg_8_t;// 8色亮色调(背景)
typedef enum {COL_BG_BRIGHT_BLACK = 100,COL_BG_BRIGHT_RED = 101,COL_BG_BRIGHT_GREEN = 102,COL_BG_BRIGHT_YELLOW = 103,COL_BG_BRIGHT_BLUE = 104,COL_BG_BRIGHT_MAGENTA = 105,COL_BG_BRIGHT_CYAN = 106,COL_BG_BRIGHT_WHITE = 107
} col_bg_8_bright_t;// 光标方向
typedef enum {COL_UP,COL_DOWN,COL_LEFT,COL_RIGHT
} col_direction_t;// 对齐方式
typedef enum {COL_ALIGN_LEFT,COL_ALIGN_CENTER,COL_ALIGN_RIGHT
} col_align_t;// 函数声明
#ifdef __cplusplus
extern "C" {
#endif// 初始化函数
void col_init(void);// 颜色支持检测
bool col_supported(void);// 获取终端尺寸
int col_term_width(void);
int col_term_height(void);// 基础颜色控制
void col_set_fg_8(col_8_t color, char* buf);
void col_set_fg_8_bright(col_8_bright_t color, char* buf);
void col_set_bg_8(col_bg_8_t color, char* buf);
void col_set_bg_8_bright(col_bg_8_bright_t color, char* buf);// 扩展颜色控制
void col_set_fg_256(int color_code, char* buf);
void col_set_bg_256(int color_code, char* buf);
void col_set_fg_rgb(unsigned char r, unsigned char g, unsigned char b, char* buf);
void col_set_bg_rgb(unsigned char r, unsigned char g, unsigned char b, char* buf);
void col_set_fg_hsl(float h, float s, float l, char* buf);
void col_set_bg_hsl(float h, float s, float l, char* buf);// 样式控制
void col_set_style(col_style_t style, char* buf);
void col_reset(char* buf);// 文本格式化
void col_format(const char* text, col_8_t color, col_style_t style, char* buf);
void col_format_advanced(const char* text,col_mode_t fg_mode, int fg1, int fg2, int fg3,col_mode_t bg_mode, int bg1, int bg2, int bg3,col_style_t style, char* buf);// 终端控制
void col_cursor_move(col_direction_t dir, int steps, char* buf);
void col_cursor_set(int row, int col, char* buf);
void col_cursor_hide(char* buf);
void col_cursor_show(char* buf);
void col_clear_screen(char* buf);
void col_clear_line(char* buf);
void col_scroll_up(int lines, char* buf);
void col_scroll_down(int lines, char* buf);
void col_set_title(const char* title, char* buf);// 文本布局
void col_align(const char* text, col_align_t align, char* buf);
void col_pad(const char* text, int width, col_align_t align, char* buf);#ifdef __cplusplus
}
#endif
#endif // _COL_HOL_H_// 实现部分 - 仅在定义COL_IMPLEMENTATION时编译
#ifdef COL_IMPLEMENTATION// 内部状态
static int col_support = -1;
static int col_width = 80;
static int col_height = 24;// HSL转RGB辅助函数
static void hsl_to_rgb(float h, float s, float l, unsigned char* r, unsigned char* g, unsigned char* b) {float c = (1.0f - fabsf(2.0f * l - 1.0f)) * s;  // 修正:使用fabsf代替fabsfloat x = c * (1.0f - fabsf(fmodf(h / 60.0f, 2.0f) - 1.0f));  // 修正:使用fabsffloat m = l - c / 2.0f;float rf = 0.0f, gf = 0.0f, bf = 0.0f;if (h >= 0 && h < 60) {rf = c; gf = x; bf = 0;} else if (h >= 60 && h < 120) {rf = x; gf = c; bf = 0;} else if (h >= 120 && h < 180) {rf = 0; gf = c; bf = x;} else if (h >= 180 && h < 240) {rf = 0; gf = x; bf = c;} else if (h >= 240 && h < 300) {rf = x; gf = 0; bf = c;} else if (h >= 300 && h < 360) {rf = c; gf = 0; bf = x;}*r = (unsigned char)((rf + m) * 255.0f);*g = (unsigned char)((gf + m) * 255.0f);*b = (unsigned char)((bf + m) * 255.0f);
}// 初始化函数
void col_init(void) {if (col_support != -1) return;#ifdef _WIN32// Windows平台初始化DWORD mode;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);if (hOut == INVALID_HANDLE_VALUE) {col_support = 0;return;}// 尝试启用VT100支持if (!GetConsoleMode(hOut, &mode)) {col_support = 0;return;}if (!SetConsoleMode(hOut, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) {col_support = 0;return;}// 获取终端尺寸CONSOLE_SCREEN_BUFFER_INFO csbi;if (GetConsoleScreenBufferInfo(hOut, &csbi)) {col_width = csbi.srWindow.Right - csbi.srWindow.Left + 1;col_height = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;}col_support = 1;
#else// Unix-like平台初始化col_support = isatty(STDOUT_FILENO) ? 1 : 0;// 获取终端尺寸
#ifdef TIOCGWINSZstruct winsize w;if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) == 0) {col_width = w.ws_col;col_height = w.ws_row;}
#endif
#endif
}// 检查颜色支持
bool col_supported(void) {if (col_support == -1) col_init();return col_support == 1;
}// 获取终端宽度
int col_term_width(void) {if (col_support == -1) col_init();return col_width;
}// 获取终端高度
int col_term_height(void) {if (col_support == -1) col_init();return col_height;
}// 基础颜色设置
void col_set_fg_8(col_8_t color, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%dm", color);
}void col_set_fg_8_bright(col_8_bright_t color, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%dm", color);
}void col_set_bg_8(col_bg_8_t color, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%dm", color);
}void col_set_bg_8_bright(col_bg_8_bright_t color, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%dm", color);
}// 扩展颜色设置
void col_set_fg_256(int color_code, char* buf) {if (!col_supported() || color_code < 0 || color_code > 255) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[38;5;%dm", color_code);
}void col_set_bg_256(int color_code, char* buf) {if (!col_supported() || color_code < 0 || color_code > 255) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[48;5;%dm", color_code);
}void col_set_fg_rgb(unsigned char r, unsigned char g, unsigned char b, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[38;2;%d;%d;%dm", r, g, b);
}void col_set_bg_rgb(unsigned char r, unsigned char g, unsigned char b, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[48;2;%d;%d;%dm", r, g, b);
}void col_set_fg_hsl(float h, float s, float l, char* buf) {unsigned char r, g, b;hsl_to_rgb(h, s, l, &r, &g, &b);col_set_fg_rgb(r, g, b, buf);
}void col_set_bg_hsl(float h, float s, float l, char* buf) {unsigned char r, g, b;hsl_to_rgb(h, s, l, &r, &g, &b);col_set_bg_rgb(r, g, b, buf);
}// 样式控制
void col_set_style(col_style_t style, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%dm", style);
}void col_reset(char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, COL_RESET);
}// 文本格式化
void col_format(const char* text, col_8_t color, col_style_t style, char* buf) {if (!col_supported()) {snprintf(buf, COL_MAX_FORMATTED, "%s", text);return;}char color_buf[COL_MAX_CTRL];char style_buf[COL_MAX_CTRL];char reset_buf[COL_MAX_CTRL];col_set_fg_8(color, color_buf);col_set_style(style, style_buf);col_reset(reset_buf);snprintf(buf, COL_MAX_FORMATTED, "%s%s%s%s", style_buf, color_buf, text, reset_buf);
}void col_format_advanced(const char* text,col_mode_t fg_mode, int fg1, int fg2, int fg3,col_mode_t bg_mode, int bg1, int bg2, int bg3,col_style_t style, char* buf) {if (!col_supported()) {snprintf(buf, COL_MAX_FORMATTED, "%s", text);return;}char fg_buf[COL_MAX_CTRL] = "";char bg_buf[COL_MAX_CTRL] = "";char style_buf[COL_MAX_CTRL] = "";char reset_buf[COL_MAX_CTRL];col_reset(reset_buf);col_set_style(style, style_buf);// 设置前景色switch (fg_mode) {case COL_8:col_set_fg_8((col_8_t)fg1, fg_buf);break;case COL_8_BRIGHT:col_set_fg_8_bright((col_8_bright_t)fg1, fg_buf);break;case COL_256:col_set_fg_256(fg1, fg_buf);break;case COL_RGB:col_set_fg_rgb((unsigned char)fg1, (unsigned char)fg2, (unsigned char)fg3, fg_buf);break;}// 设置背景色switch (bg_mode) {case COL_8:col_set_bg_8((col_bg_8_t)bg1, bg_buf);break;case COL_8_BRIGHT:col_set_bg_8_bright((col_bg_8_bright_t)bg1, bg_buf);break;case COL_256:col_set_bg_256(bg1, bg_buf);break;case COL_RGB:col_set_bg_rgb((unsigned char)bg1, (unsigned char)bg2, (unsigned char)bg3, bg_buf);break;}snprintf(buf, COL_MAX_FORMATTED, "%s%s%s%s%s",style_buf, fg_buf, bg_buf, text, reset_buf);
}// 终端控制
void col_cursor_move(col_direction_t dir, int steps, char* buf) {if (!col_supported() || steps <= 0) {buf[0] = '\0';return;}const char* dir_code;switch (dir) {case COL_UP: dir_code = "A"; break;case COL_DOWN: dir_code = "B"; break;case COL_RIGHT: dir_code = "C"; break;case COL_LEFT: dir_code = "D"; break;default: buf[0] = '\0'; return;}snprintf(buf, COL_MAX_CTRL, "\033[%d%s", steps, dir_code);
}void col_cursor_set(int row, int col, char* buf) {if (!col_supported() || row < 1 || col < 1) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%d;%dH", row, col);
}void col_cursor_hide(char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[?25l");
}void col_cursor_show(char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[?25h");
}void col_clear_screen(char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[2J\033[1;1H");
}void col_clear_line(char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[2K");
}void col_scroll_up(int lines, char* buf) {if (!col_supported() || lines <= 0) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%dS", lines);
}void col_scroll_down(int lines, char* buf) {if (!col_supported() || lines <= 0) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033[%dT", lines);
}void col_set_title(const char* title, char* buf) {if (!col_supported()) {buf[0] = '\0';return;}snprintf(buf, COL_MAX_CTRL, "\033]0;%s\007", title);
}// 文本布局 - 修复函数调用错误
void col_align(const char* text, col_align_t align, char* buf) {col_pad(text, col_term_width(), align, buf);  // 修正:调用正确的函数
}void col_pad(const char* text, int width, col_align_t align, char* buf) {int len = strlen(text);if (len >= width) {snprintf(buf, COL_MAX_FORMATTED, "%s", text);return;}int left = 0, right = 0;int pad = width - len;switch (align) {case COL_ALIGN_CENTER:left = pad / 2;right = pad - left;break;case COL_ALIGN_RIGHT:left = pad;break;case COL_ALIGN_LEFT:default:right = pad;break;}snprintf(buf, COL_MAX_FORMATTED, "%*s%s%*s", left, "", text, right, "");
}#endif // COL_IMPLEMENTATION/*** 这个实现遵循了 stb 风格的 header-only 库设计,主要特点和扩展功能如下:stb 风格实现:使用COL_IMPLEMENTATION宏控制实现部分的编译在需要编译实现的文件中,先定义#define COL_IMPLEMENTATION再包含头文件函数声明与实现分离,声明始终可见,实现仅在定义宏时编译扩展颜色支持:支持 4 种颜色模式:基础 8 色、亮色调 8 色、256 色和 RGB 真彩色新增 HSL 颜色支持(通过 HSL 转 RGB 实现)完整的前景色和背景色控制增强功能:终端滚动控制(向上 / 向下滚动)HSL 颜色空间支持(便于色彩调整)更完善的文本对齐和填充功能终端尺寸检测和使用跨平台特性:适配 Linux、macOS、BSD 和 Windows自动检测终端颜色支持能力在不支持 ANSI 转义的环境中自动降级*/

color_print.h

// color_print.h - 简化版带默认颜色的输出库 (stb风格)
// 用法:
//   0. 需要col.hol.h,但是建议在源文件开启#define COL_IMPLEMENTATION
//   1. 在一个C文件中定义 #define COLOR_PRINT_IMPLEMENTATION 后包含此头文件
//   2. 基础用法: cprintf(fmt, ...)  // 使用默认颜色
//      可以在对应的printf系方法设置默认的颜色
//   3. 自定义颜色: cprintfc(fg, bg, style, fmt, ...)
//   4. 设置默认颜色: cprintf_set_default(fg, bg, style)
// 跨平台支持: Windows/Linux/macOS#ifndef COLOR_PRINT_H
#define COLOR_PRINT_H#include <stdio.h>
#include <stdarg.h>
#define COL_IMPLEMENTATION
#include "col.hol.h"  // 依赖基础颜色定义// 带默认颜色的printf (用法同printf)
int cprintf(const char* fmt, ...);// 带自定义颜色的printf
int cprintfc(col_8_t fg, col_bg_8_t bg, col_style_t style, const char* fmt, ...);// 设置默认颜色 (全局生效)
void cprintf_set_default(col_8_t fg, col_bg_8_t bg, col_style_t style);// 带颜色的fprintf (输出到指定流)
int cfprintf(FILE* stream, const char* fmt, ...);// 带自定义颜色的fprintf
int cfprintfc(FILE* stream, col_8_t fg, col_bg_8_t bg, col_style_t style, const char* fmt, ...);#endif // COLOR_PRINT_H#ifdef COLOR_PRINT_IMPLEMENTATION#include <string.h>
#include <stdlib.h>// 平台兼容层: 终端检测
#ifdef _WIN32
#include <io.h>
#define is_terminal(s) (_isatty(_fileno(s)) != 0)
#else
#include <unistd.h>
#define is_terminal(s) (isatty(fileno(s)) != 0)
#endif// 内部状态: 默认颜色配置 (仅内部可见)
static struct {col_8_t fg;col_bg_8_t bg;col_style_t style;
} default_color = {COL_WHITE,   // 默认前景: 白色COL_BG_BLACK,// 默认背景: 黑色COL_NORMAL   // 默认样式: 正常
};// 初始化标记
static int color_inited = 0;// 初始化颜色支持
static void color_init(void) {if (!color_inited) {col_init();       // 初始化基础颜色库color_inited = 1;}
}// 生成颜色控制序列 (内部函数)
static void get_color_codes(col_8_t fg, col_bg_8_t bg, col_style_t style,char* prefix, size_t prefix_len,char* reset, size_t reset_len) {prefix[0] = '\0';reset[0] = '\0';color_init();if (!col_supported()) return;char s[COL_MAX_CTRL], f[COL_MAX_CTRL], b[COL_MAX_CTRL];col_set_style(style, s);col_set_fg_8(fg, f);col_set_bg_8(bg, b);snprintf(prefix, prefix_len, "%s%s%s", s, f, b);col_reset(reset);
}// 设置默认颜色
void cprintf_set_default(col_8_t fg, col_bg_8_t bg, col_style_t style) {default_color.fg = fg;default_color.bg = bg;default_color.style = style;
}// 带默认颜色的printf
int cprintf(const char* fmt, ...) {va_list args;va_start(args, fmt);char prefix[COL_MAX_CTRL], reset[COL_MAX_CTRL];get_color_codes(default_color.fg, default_color.bg, default_color.style,prefix, sizeof(prefix), reset, sizeof(reset));int ret;if (col_supported()) {fputs(prefix, stdout);ret = vfprintf(stdout, fmt, args);fputs(reset, stdout);} else {ret = vfprintf(stdout, fmt, args);}va_end(args);return ret;
}// 带自定义颜色的printf
int cprintfc(col_8_t fg, col_bg_8_t bg, col_style_t style, const char* fmt, ...) {va_list args;va_start(args, fmt);char prefix[COL_MAX_CTRL], reset[COL_MAX_CTRL];get_color_codes(fg, bg, style, prefix, sizeof(prefix), reset, sizeof(reset));int ret;if (col_supported()) {fputs(prefix, stdout);ret = vfprintf(stdout, fmt, args);fputs(reset, stdout);} else {ret = vfprintf(stdout, fmt, args);}va_end(args);return ret;
}// 带默认颜色的fprintf
int cfprintf(FILE* stream, const char* fmt, ...) {va_list args;va_start(args, fmt);int ret;if (is_terminal(stream)) {char prefix[COL_MAX_CTRL], reset[COL_MAX_CTRL];get_color_codes(default_color.fg, default_color.bg, default_color.style,prefix, sizeof(prefix), reset, sizeof(reset));if (col_supported()) {fputs(prefix, stream);ret = vfprintf(stream, fmt, args);fputs(reset, stream);} else {ret = vfprintf(stream, fmt, args);}} else {// 非终端输出不添加颜色ret = vfprintf(stream, fmt, args);}va_end(args);return ret;
}// 带自定义颜色的fprintf
int cfprintfc(FILE* stream, col_8_t fg, col_bg_8_t bg, col_style_t style, const char* fmt, ...) {va_list args;va_start(args, fmt);int ret;if (is_terminal(stream)) {char prefix[COL_MAX_CTRL], reset[COL_MAX_CTRL];get_color_codes(fg, bg, style, prefix, sizeof(prefix), reset, sizeof(reset));if (col_supported()) {fputs(prefix, stream);ret = vfprintf(stream, fmt, args);fputs(reset, stream);} else {ret = vfprintf(stream, fmt, args);}} else {ret = vfprintf(stream, fmt, args);}va_end(args);return ret;
}#endif // COLOR_PRINT_IMPLEMENTATION

probe.c

#define COL_IMPLEMENTATION
#include "col.hol.h"
#include <stdio.h>int main() {char buf[COL_MAX_FORMATTED];char ctrl[COL_MAX_CTRL];// 初始化颜色库col_init();// 检查颜色支持if (!col_supported()) {printf("终端不支持颜色输出\n");return 0;}// 设置终端标题col_set_title("颜色库演示", ctrl);printf("%s", ctrl);// 基础颜色文本col_format("红色粗体文本", COL_RED, COL_BOLD, buf);printf("%s\n", buf);// 高级格式化 - RGB颜色col_format_advanced("天蓝色文本带粉色背景",COL_RGB, 135, 206, 235,  // 天蓝色COL_RGB, 255, 192, 203,  // 粉色COL_ITALIC, buf);printf("%s\n", buf);// HSL颜色示例 - 绿色系col_set_fg_hsl(120, 0.7, 0.5, ctrl);  // 饱和度70%,亮度50%的绿色printf("%sHSL颜色示例%s\n", ctrl, COL_RESET);// 256色示例col_set_fg_256(166, ctrl);  // 棕色printf("%s256色模式示例%s\n", ctrl, COL_RESET);// 光标控制col_cursor_move(COL_DOWN, 1, ctrl);printf("%s", ctrl);// 居中对齐文本col_align("居中对齐的文本", COL_ALIGN_CENTER, buf);printf("%s\n", buf);// 重置终端col_reset(ctrl);printf("%s", ctrl);return 0;
}

probe2.c

#define COLOR_PRINT_IMPLEMENTATION
#include "color_print.h"
#include <stdio.h>int main() {// 基础用法:默认颜色(白字黑底)cprintf("这是默认颜色输出\n");cprintf("数字: %d, 字符串: %s\n", 123, "测试");// 修改默认颜色为绿色粗体cprintf_set_default(COL_GREEN, COL_BG_BLACK, COL_BOLD);cprintf("这行变成绿色粗体\n");// 临时使用红色斜体cprintfc(COL_RED, COL_BG_BLACK, COL_ITALIC, "这行是临时红色斜体\n");// 输出到文件(自动无颜色)FILE* f = fopen("log.txt", "w");if (f) {cfprintf(f, "写入文件的内容(无颜色)\n");fclose(f);}return 0;
}

pwd.win.c

#define COLOR_PRINT_IMPLEMENTATION
#include "color_print.h"  // 引入颜色输出库
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 跨平台获取当前工作目录
static char* get_current_dir(void) {
#ifdef _WIN32// Windows 平台实现char* buffer = malloc(MAX_PATH);if (buffer && GetCurrentDirectoryA(MAX_PATH, buffer)) {return buffer;}
#else// Linux/macOS 平台实现char* buffer = getcwd(NULL, 0);  // 自动分配足够大小的缓冲区return buffer;
#endiffree(buffer);return NULL;
}// 解析命令行参数(检查是否需要彩色输出)
static bool parse_args(int argc, char* argv[]) {for (int i = 1; i < argc; i++) {if (strcmp(argv[i], "--no-color") == 0) {// 禁用颜色(通过设置默认颜色为黑白)cprintf_set_default(COL_WHITE, COL_BG_BLACK, COL_NORMAL);return false;  // 不使用彩色} else if (strcmp(argv[i], "--help") == 0) {cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "用法: pwd [选项]\n");cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "显示当前工作目录\n");cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "选项:\n");cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "  --no-color   禁用彩色输出\n");cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "  --help       显示帮助信息\n");exit(0);} else {cprintfc(COL_RED, COL_BG_BLACK, COL_BOLD, "错误: 未知选项 '%s'\n", argv[i]);cprintfc(COL_YELLOW, COL_BG_BLACK, COL_NORMAL, "使用 '--help' 查看帮助\n");exit(1);}}return true;  // 使用彩色
}int main(int argc, char* argv[]) {// 初始化颜色输出库color_init();  // 确保颜色支持已初始化// 设置默认颜色(路径用蓝色显示)cprintf_set_default(COL_BLUE, COL_BG_BLACK, COL_BOLD);// 解析命令行参数bool use_color = parse_args(argc, argv);// 获取当前工作目录char* cwd = get_current_dir();if (!cwd) {cprintfc(COL_RED, COL_BG_BLACK, COL_BOLD, "错误: 无法获取当前工作目录\n");return 1;}// 输出当前目录(带颜色或默认)if (use_color) {cprintf("%s\n", cwd);  // 使用彩色输出} else {printf("%s\n", cwd);   // 禁用彩色时使用标准输出}// 清理资源free(cwd);return 0;
}

ref link

  • https://github.com/resyfer/libcol
  • ai code, not for production

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92677.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92677.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92677.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

llm本地部署+web访问+交互

要实现基于llm的web访问和交互&#xff0c;需支持对llm的访问和对网络搜索的调用。 这里使用ollama llm兼容openai sdk访问&#xff1b;使用proxyless-llm-websearch模拟网络搜索。 1 ollama本地部署 假设ollama已经部署&#xff0c;具体过程参考 在mac m1基于ollama运行dee…

自动驾驶数据闭环

自动驾驶的数据闭环是支撑算法持续迭代的核心机制&#xff0c;其本质是通过“数据采集-处理-训练-部署-反馈”的循环&#xff0c;不断优化模型对复杂场景的适应性。由于自动驾驶数据量极大&#xff08;单车日均TB级&#xff09;、场景多样&#xff08;从常规道路到极端边缘场景…

二十、MySQL-DQL-条件查询

DQL-条件查询代码&#xff1a; DQL-条件查询 -- 1.查询 姓名 为 杨逍 的员工 select * from tb_emp where name 杨逍; -- 2.查询 id小于等于5 的员工信息 select * from tb_emp where id < 5; -- 3.查询 没有分配职位 的员工信息 select * from tb_emp where job is null; …

Mac下安装Conda虚拟环境管理器

Conda 是一个开源的包、环境管理器&#xff0c;可以用于在同一个机器上创建不同的虚拟环境&#xff0c;安装不同Python 版本的软件包及其依赖&#xff0c;并能够在不同的虚拟环境之间切换 Conda常通过安装Anaconda/Miniconda来进行使用。一般使用Miniconda就够了。Miniconda 是…

Android 中解决 Button 按钮背景色设置无效的问题

1、问题描述 在布局文件中有两个 Button 按钮&#xff0c;为每个按钮设置不同的背景色&#xff0c;但是显示出来的效果都是紫色的&#xff0c;跟设置的颜色不同&#xff0c;布局文件如下所示&#xff1a;<Buttonandroid:id"id/button_cancel"android:layout_width…

云服务器--阿里云OSS(2)【Springboot使用阿里云OSS】

&#x1f4d2; 阿里云 OSS Spring Boot 异步任务&#xff08;直接存 OSS&#xff09; 1. 项目结构 src/main/java/com/example/demo├── controller│ └── UploadController.java // 接收上传请求├── service│ ├── AsyncUploadService.java // 异步上传…

get请求中文字符参数乱码问题

第一种方法 服务器默认的传参编码格式是ISO8859-1,所以前端直接原样字符串请求&#xff0c;到后端解析一下就得到正确字符 String fileName request.getParameter("fileName"); fileName new String(fileName.getBytes("ISO8859-1"),"UTF-8");…

C语言(10)——结构体、联合体、枚举

关于C语言零基础学习知识&#xff0c;小编有话说&#xff0c;各位看官敬请入下面的专栏世界&#xff1a;打怪升级之路——C语言之路_ankleless的博客-CSDN博客 Hi&#xff01;冒险者&#x1f60e;&#xff0c;欢迎闯入 C 语言的奇幻异世界&#x1f30c;&#xff01; 我是 Ankle…

海康威视摄像头实时推流到阿里云公网服务器(Windows + FFmpeg + nginx-rtmp)

海康威视摄像头实时推流到阿里云公网服务器&#xff08;Windows FFmpeg nginx-rtmp1. 步骤总览2. 阿里云 ECS&#xff08;Linux&#xff09;配置2.1 开放端口2.2 安装 nginx-rtmp3. Windows 电脑端配置3.1 安装 FFmpeg3.1.1 官网/镜像下载&#xff1a;3.1.2 解压后将 bin 目录…

基础网络网路层——IPV4地址

在IP网络上&#xff0c;如果用户要将一台计算机连接到Internet上&#xff0c;就需要向因特网服务提供方ISP&#xff08;Internet Service Provider&#xff09;申请一个IP地址。IP地址是在计算机网络中被用来唯一标识一台设备的一组数字。IPv4地址由32位二进制数值组成&#xf…

技术速递|GPT-5 正式上线 Azure AI Foundry

AI 应用正在经历一场深刻变革——对企业来说&#xff0c;仅仅“能聊天”早已不够&#xff0c;生成内容、逻辑推理、落地生产&#xff0c;这些才是新时代对 AI 能力的真正考验。 今天&#xff0c;我们非常激动地宣布&#xff0c;OpenAI 最新旗舰大模型 GPT-5 正式上线 Azure AI …

Logistic Regression|逻辑回归

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章&#xff0c;有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn&#xff0c;这里还有很多有关计算机的知识&#xff0c;欢迎进行留言或…

三极管在电路中的应用

1、信号放大&#xff08;电压放大&#xff09; 应用场景 &#xff1a;麦克风声音放大、耳机驱动、广播信号接收等音频设备 原理解析 &#xff1a; 想象三极管如同一个精准的水龙头&#xff1a; 基极&#xff08;B&#xff09;电流如同拧动阀门的微弱力量&#xff08;输入信号&a…

Redis 事务机制

文章目录一、什么是事务&#xff1f;二、事务相关操作总体认识基本操作流程watch 操作演示watch 原理一、什么是事务&#xff1f; Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执⾏. Redis 的事务和 MySQL 事务的区别&#xff1…

Mybatis学习之自定义映射resultMap(七)

这里写目录标题一、准备工作1、新建maven工程2、准备两张表3、建立mapper、pojo、映射文件mapper接口pojoxxxMapper.xml二、resultMap处理字段和属性的映射关系1、用起别名的方式保证字段名与属性名一致2、逐一设置resultMap映射关系3、配置mapUnderscoreToCamelCase三、多对一…

数学学习 | 高数、线代、概率论及数理统计荐书

注&#xff1a;本文为 “数学学习书目推荐” 相关合辑。 略作重排&#xff0c;如有内容异常&#xff0c;请看原文。 高等数学、线性代数及概率论与数理统计领域推荐书目 西湖边的卡夫卡 编辑于 2023-09-19 13:26 7495 人赞同了该回答 数学具有内在的美学属性&#xff0c;但并非…

【LLM实战|langgraph】langgrpah基础

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 langgraph 基础 1. Chatbot实现 # !pip install langchain # !pip install langgraphfrom typing import Annotatedfrom typing_extensions import Typ…

大疆无人机使用eport连接Jetson主板实现目标检测

所需硬件设备如下&#xff1a; 实现原理&#xff1a; 视频流获取&#xff1a;从大疆无人机获取实时视频流。数据传输&#xff1a;将视频流传输至 Jetson 平台。目标检测处理&#xff1a;在 Jetson 上运行目标检测算法对传入的视频帧进行分析 EPort开发套件 大疆官网给出了…

Typora激活与使用

Typora下载 下载地址&#xff1a;Typora 官方中文站 Typora&#xff08;1.9.5及其以前的版本&#xff09; 工具&#xff1a;待补充 流程 1.解压工具 2.将license-gen.exe、node_inject.exe两个文件放于typora安装目录下 3.在typora安装目录下运行cmd&#xff08;可以打开…

图片拆分工具,自定义宫格切割

软件介绍 今天推荐一款实用的图像处理工具——lmage Splitter&#xff0c;支持图像拆分与格式互转功能&#xff0c;无广告干扰&#xff0c;操作简单流畅&#xff0c;满足多样化图片编辑需求。 软件优势 该工具为绿色版设计&#xff0c;无需安装即可直接运行&#xff0c;下载…