{"id":18951776,"url":"https://github.com/desmonhak/colors-c-c-plus-plus","last_synced_at":"2026-03-03T02:39:57.081Z","repository":{"id":161736973,"uuid":"359218555","full_name":"desmonHak/colors-C-C-plus-plus","owner":"desmonHak","description":"Cabecera que permite manipular colores con C/C++ de una forma mas sencilla","archived":false,"fork":false,"pushed_at":"2024-08-17T21:17:02.000Z","size":936,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-08-17T22:25:54.970Z","etag":null,"topics":["c","colors","easy"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/desmonHak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-18T18:07:56.000Z","updated_at":"2024-08-17T22:25:57.096Z","dependencies_parsed_at":"2024-02-29T00:23:17.649Z","dependency_job_id":"01bcb89b-1443-4b4b-937c-c4e942aa18fb","html_url":"https://github.com/desmonHak/colors-C-C-plus-plus","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desmonHak%2Fcolors-C-C-plus-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desmonHak%2Fcolors-C-C-plus-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desmonHak%2Fcolors-C-C-plus-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desmonHak%2Fcolors-C-C-plus-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/desmonHak","download_url":"https://codeload.github.com/desmonHak/colors-C-C-plus-plus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223691321,"owners_count":17186787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","colors","easy"],"created_at":"2024-11-08T13:29:25.304Z","updated_at":"2026-03-03T02:39:57.015Z","avatar_url":"https://github.com/desmonHak.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# COLORS\n\nUna librería para Windows y Linux que permite manipular colores con C/C++.\n\n---\n\nTodo lo necesario esta en el directorio `include`, la cabecera inicial (`\u003ccolors.h\u003e`) incluye por defecto el modulo `\u003cstdio.h\u003e` y `\u003cWindows.h\u003e` para poder manipular los colores de una forma mas sencilla.\n\nLa cabecera `\u003ccolors.h\u003e` permite activar la caracteriztica para usar secuencias de escape ANSI en Windows y lo hace automaticamente. Pero si usas MSVC tienes que activarlo manualmente llamando a `_ACTIVATE_COLORS_ANSI_WIN__()`.\n\n\u003e [!IMPORTANT]\n\u003e Así como `_ACTIVATE_COLORS_ANSI_WIN__()` se activa solo (a menos que use MSVC donde se tiene que activar manualmente), ocurre lo mismo con `resetColorTerminal()`, esta se llama automaticamente al finalizar el programa (a menos que use MSVC);\n\n---\n\n## USOS\n\nPuedes usar tanto `printf` o `printf_color` (que proporciona `\u003ccolors.h\u003e`). La diferencia es que con `printf_color` puedes usar la sintaxis de interpolado `#{}` para poder utilizar los colores.\n\n```C\n#include \"colors.h\"\n\nint main(void)\n{\n    printf(\n        \"%sHola %smundo%s!%s\\n\",\n        FG_GREEN_ANSI,\n        FG_RED_ANSI,\n        ANSI_COLOR_BG(\"6\"),\n        FG_RESET_ANSI\n    );\n\n    printf_color(\"#{FG:green}Hola #{FG:red}mundo#{BG:cyan}!\");\n\n    return 0;\n}\n\n```\n\nTambien puedes usar uso de macros globales para cambiar el color de la letra y el fondo de esta misma.\n\n\n```C\n#include \"colors.h\"\n\nint main(){\n    SET_FG_CYAN;\n    puts(\"Texto en Cyan\");\n\n    ANSI_RESET_MODES;\n    puts(\"Texto normal\");\n\n    printf_color(\"#{BG:green}#{FG:red}letra en rojo con fondo verde: %d, %c, {reset}\\n\", 1, 'c');\n\n    printf_color(\"#{BG:blue}#{FG:green}letra en verde con fondo azul: %d, %f#{reset}\\n\", 2, 1.2f);\n\n    return 0;\n}\n```\n\nTambien puedes usar algunasde las macros para representar información. Tales como `POINTGREEN()` o `POINTRED()`.\n\n```C\n#include \"colors.h\"\n\nint main(){\n    printf(POINTGREEN(\" hola mundo\\n\") );\n    /* =\u003e [*] hola mundo */\n\n    printf_color(POINTRED(\"hola mundo\\n\")   );\n    /* =\u003e [*]hola mundo */\n}\n```\n\n---\n\n## COLORES DISPONIBLES\n\n```C\n/* colores para las letras: */\n\"FG:red\"\n\"FG:green\"\n\"FG:blue\"\n\"FG:black\"\n\"FG:yellow\"\n\"FG:purple\"\n\"FG:cyan\"\n\"FG:white\"\n\n/* colores para el fondo: */\n\"BG:black\"\n\"BG:red\"\n\"BG:green\"\n\"BG:yellow\"\n\"BG:purple\"\n\"BG:cyan\"\n\"BG:white\"\n\"BG:blue\"\n\n/* restablece los colores tanto al color de texto como el fondo de este */\n\"reset\"\n```\n\n\u003e [!IMPORTANT]\n\u003e Si se usa `CONSOLE_COLOR_RESET;` es posible que no se vean reflejados los cambios, así que luego de ello es mejor usar `fflush(stdin);`. Con `#{reset}` no se ha presentado el mismo problema si usa un `\\n` adelante.\n\n## EJEMPLOS\n\n----\n\n![imagen](https://raw.githubusercontent.com/desmonHak/colors-C-C-plus-plus/main/imagen.png) \n\n![imagen1](https://raw.githubusercontent.com/desmonHak/colors-C-C-plus-plus/main/imagen1.png) \n\n----\n\n## ESTILOS DISPONIBLES\n\n```C\n/* Letra en negrita */\n\"ST:bold\"\n\n/* Letra oscura */\n\"ST:darkened\"\n\n/* Letra en italica/inclinada */\n\"ST:italics\"\n\n/* Letra subrayada */\n\"ST:underline\"\n\n/* Letra parpadeante */\n\"ST:blink\"\n\n/* Invierte tanto el fondo como el color de letra */\n\"ST:invert\"\n```\n\n----\n\n## COLORES PARA LETRAS\n\n```C\n/* letra negro oscuro */\n#define SET_FG_BLACK           ...\n\n/* letra rojo ocuro */\n#define SET_FG_RED             ...\n\n/* letra verde ocuro */\n#define SET_FG_GREEN           ...\n\n/* letra amarillo oscuro */\n#define SET_FG_YELLOW          ...\n\n/* letra azul oscuro */\n#define SET_FG_BLUE            ...\n\n/* letra magenta oscuro */\n#define SET_FG_MAGENTA         ...\n\n/* letra cyan ocuro: */\n#define SET_FG_CYAN            ...\n\n/* letra blanco oscuro */\n#define SET_FG_WHITE           ...\n\n/* resetear el color de la letra a la por defecto */\n#define SET_FG_RESET           ...\n\n/* versiones claras de los colores de letra: */\n#define SET_FG_LIGHTBLACK   ...\n#define SET_FG_LIGHTRED     ...\n#define SET_FG_LIGHTGREEN   ...\n#define SET_FG_LIGHTYELLOW  ...\n#define SET_FG_LIGHTBLUE    ...\n#define SET_FG_LIGHTMAGENTA ...\n#define SET_FG_LIGHTCYAN    ...\n#define SET_FG_LIGHTWHITE   ...\n```\n\n\n## COLORES PARA EL FONDO\n\n```C\n#define SET_BG_COLOR_BLACK  ...\n#define SET_BG_COLOR_RED    ...\n#define SET_BG_COLOR_GREEN  ...\n#define SET_BG_COLOR_YELLOW ...\n#define SET_BG_COLOR_BLUE   ...\n#define SET_BG_COLOR_PURPLE ...\n#define SET_BG_COLOR_CYAN   ...\n#define SET_BG_COLOR_WHITE  ...\n#define SET_BG_COLOR_RESET  ...\n```\n\n# EXTRAS\n\n```C\n/* Mover el cursor hacia arriba */\n#define UP(data, number)        ...\n\n/* Mover el cursor hacia abajo */\n#define DOWN(data, number)      ...\n\n/* Mover el cursor hacia la derecha */\n#define FORWARD(data, number)   ...\n\n/* Mover el cursor hacia la izquierda */\n#define BACK(data, number)      ...\n\n/* Mover el cursor a una posición específica */\n#define POS(number1, number2)   ...\n\n/* cambiar titulo de la terminal: */\n#define SET_TITLE(title)        ...\n\n/* limpiar pantalla */\n#define CLEAR_DISPLAY           ...\n\n/* limpiar una linea */\n#define CLEAR_LINE              ...\n\n/* crear un string con punto verde al inicio */\n#define POINTGREEN(data)        ...\n\n/* esconder cursor */\n#define HIDDEN_SLIDER           ...\n\n/*  mostrar cursor */\n#define SHOW_SLIDER             ...\n\n/* cambiar el modo del cursor */\n#define SET_MODE_SLIDER         ...\n\n/* cambiar el tamaño del cursor */\n#define SET_SIZE_SLIDER(size)   ...\n\n/* crear un string con punto roojo al inicio */\n#define POINTRED(data)          ...\n\n/* permite borrar una linea */\nvoid clear_line(); \n\n/* permite limpiar la pantalla entera */\nvoid clear_display();\n\n/* permite cambiar el titulo de la terminal */\nvoid set_title(char *title);\n\n/* permite mover el cursor a la cordenada (x, y) y imprimir la informacion contenida en data */\nvoid pos(unsigned char x, unsigned char y, char *data);\n\n/* permite retroceder el cursor n veces y mostrar informacion(data). */\nvoid back(char *data, unsigned char number);\n\n/* permite mover el cursor n veces a la derecha y mostrar informacion(data). */\nvoid forward(char *data, unsigned char number);\n\n/* permite mover el cursor n veces hacia abajo y mostrar informacion. */\nvoid down(char *data, unsigned char number);\n\n/* permite mover el cursor n veces hacia arriba y mostrar informacion. */\nvoid up(char *data, unsigned char number);\n\n/* version mejorada de printf: */\nvoid printf_color(const char *format, ...);\n\n/* permite cambiar el color de la terminal segun el ANSI */\nvoid setConsoleColor(ConsoleColor foreground, ConsoleColor background);\n\n/* resetea el color de la terminal al por defecto. */\nvoid resetColorTerminal();\n\n```\n\nOtro formato a mencionar es sobre imprimir valores el binario.\n\n```C\n#include \"colors.h\"\n\nint main(void)\n{\n    printf_color(\"El numero 12 en binario es: #{i8:12}\\n\");\n    // =\u003e El numero 12 en binario es: 00001100\n\n    printf_color(\"El numero 999 en binario es: #{i16:999}\\n\");\n    // =\u003e El numero 999 en binario es: 0000001111100111\n\n    return 0;\n}\n\n```\n\nEl valor maximo es de 64 bits (`i64`), pero estan disponibles: `i8`, `i16`, `i32` e `i64`.\n\n----\n\n## COLORES RGB\n\nPodemos crear colores personalizados usando el sistema `RGB`. Para la tarea podemos crear una estructura `RGB_C` donde indicar los colores, usar la macro `RGB_CREATE` que crea esta misma, o podemos poner los valores red, green, blue directamente en lugar de crear la estructura.\n\nPara crear una estructura RGB podemos hacerlo de estas maneras:\n```C\nRGB_C my_color_rgb = {100, 225, 30};\n\nRGB_C my_color_rgb = RGB_CREATE(100, 225, 30);\n\nRGB_C my_color_rgb = (RGB_C){\n    .r = 100, \n    .g = 225, \n    .b = 30\n};\n\nRGB_C my_color_rgb = (RGB_C){\n    .red = 100, \n    .green = 225, \n    .blue = 30\n};\n```\nTodas las anteriores sirven para crear la misma estrutuctura, en este caso, tenemos un `'objeto RGB_C'` donde el rojo es 100, el verde es 225 y el azul es 30, recordar que el valor que podemos color aqui va de `0-255`.\n\nUna vez realizado esto podemos usar 3 funciones para definir el color de fondo y la letra. Estas son:\n\n- `foreground_color_custom(color_letra)`: para cambiar solo el color de la letra.\n- `background_color_custom(color_fondo)`: para cambiar solo el color del fondo.\n- `back_fore_color_custom(color_fondo, color_letra)`: para cambiar el color del fondo y la letra.\n\n```C\nRGB_C my_foreground = RGB_CREATE(100, 225, 30);\nforeground_color_custom(my_foreground);\nbackground_color_custom(RGB_CREATE(40, 30, 225));\n\nback_fore_color_custom(RGB_CREATE(40, 30, 225), RGB_CREATE(100, 225, 30));\nback_fore_color_custom(40, 30, 225, 100, 225, 30)\nback_fore_color_custom(RGB_CREATE(40, 30, 225), my_foreground)\n```\n\nTodas las formas anteriormente vistas son validas y hacen lo mismo pero usando macros, estructuras directar, variables...(de distintas maneras hacer lo mismo).\n\n----\n\n### setConsoleColor()\n\nEsta funcion permite cambiar el color de la letra y el fondo del terminal. Esta funcion recibe como primer argumento el `foreground` el cual a de ser un valor entero que forme parte de los colores `ANSI` del sistema deseado. Igual en el caso del segundo parametro `background`. Para facilitar la tarea tenemos un enum donde se definen los valores posibles que puede recibir la funcion:\n\n```C\ntypedef enum ConsoleColor\n{\n    COLOR_BLACK,\n    COLOR_BLUE,\n    COLOR_GREEN,\n    COLOR_CYAN,\n    COLOR_RED,\n    COLOR_MAGENTA,\n    COLOR_YELLOW,\n    COLOR_WHITE,\n\n    COLOR_LIGHTBLACK,\n    COLOR_LIGHTCYAN,\n    COLOR_LIGHTRED,\n    COLOR_LIGHTMAGENTA,\n    COLOR_LIGHTYELLOW,\n    COLOR_LIGHTWHITE\n} ConsoleColor;\n```\n\nHay que mencionar que los colores `COLOR_LIGH` no estan disponibles para el `background` con esta funcion, por lo que solo puede usar las versiones relativamente oscuras.\n\n```C\nsetConsoleColor(COLOR_LIGHTYELLOW, COLOR_GREEN);\n```\nLa definicion anterior cambia la letra a amarillo claro y el fondo a verde\n\n----\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesmonhak%2Fcolors-c-c-plus-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdesmonhak%2Fcolors-c-c-plus-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesmonhak%2Fcolors-c-c-plus-plus/lists"}