commit 7440b34cc824cf4a6b10bfd5549b7750a1143f2e
parent c63bca584930693f0470ee517f924d3eedccabb7
Author: Dimitrije Dobrota <mail@dimitrijedobrota.com>
Date: Mon, 22 Jan 2024 16:07:35 +0000
Unified foreground and background color templates
Diffstat:
3 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
@@ -3,7 +3,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project(
Alec
- VERSION 0.0.5
+ VERSION 0.0.6
DESCRIPTION "Abstraction Layer for Escape Codes"
HOMEPAGE_URL https://git.dimitrijedobrota.com/alec.git
LANGUAGES CXX
diff --git a/demo/demo.cpp b/demo/demo.cpp
@@ -2,15 +2,16 @@
#include <iostream>
using namespace ALEC;
+using enum COLOR;
+using enum DECOR;
int main(void) {
-
std::cout << ABUF_SHOW << CURSOR_HIDE;
- std::cout << CURSOR_POSITION<1, 1> << FOREGROUND_256<91> << "HELLO!\n";
+ std::cout << CURSOR_POSITION<1, 1> << FOREGROUND<91> << "HELLO!\n";
std::cout << CURSOR_DOWN<3>;
- std::cout << FOREGROUND_256<30> << BACKGROUND_256<196> << "WORLD!\n";
+ std::cout << FOREGROUND<30> << BACKGROUND<196, 53, 64> << "WORLD!\n";
std::cout << BACKGROUND<DEFAULT> << "testing 1...\n" << FOREGROUND<DEFAULT>;
std::cout << DECOR_SET<INVERSE> << "testing 2...\n" << DECOR_RESET<INVERSE>;
diff --git a/src/alec.hpp b/src/alec.hpp
@@ -4,7 +4,6 @@
#include <algorithm>
#include <array>
#include <cstdint>
-#include <iostream>
#include <type_traits>
namespace ALEC {
@@ -45,9 +44,6 @@ enum class DECOR {
STRIKE = 9,
};
-using enum COLOR;
-using enum DECOR;
-
namespace details {
template <std::size_t N> struct string_literal {
@@ -99,6 +95,7 @@ template <auto... Args> struct escape_t {
};
template <auto... Strs> static constexpr auto escape = escape_t<Strs...>::value.data();
+template <details::string_literal... Strs> static constexpr auto escape_literal = escape<Strs...>;
} // namespace details
@@ -167,45 +164,49 @@ template <intmax_t n, intmax_t m>
requires limit_pos<n> && limit_pos<m>
static constexpr auto CURSOR_POSITION = details::escape<n, ';', m, 'H'>;
+// color
+template <auto... val> static const char *FOREGROUND;
+template <auto... val> static const char *BACKGROUND;
+
// palet colors
-template <COLOR color> static constexpr auto FOREGROUND = details::escape<(intmax_t)color + 30, 'm'>;
-template <COLOR color> static constexpr auto BACKGROUND = details::escape<(intmax_t)color + 40, 'm'>;
+template <COLOR color> static constexpr auto FOREGROUND<color> = details::escape<(intmax_t)color + 30, 'm'>;
+template <COLOR color> static constexpr auto BACKGROUND<color> = details::escape<(intmax_t)color + 40, 'm'>;
// 256-color palette
template <intmax_t idx>
requires limit_256<idx>
-static constexpr auto FOREGROUND_256 = details::escape<intmax_t(38), ';', intmax_t(5), ';', idx, 'm'>;
+static constexpr auto FOREGROUND<idx> = details::escape<intmax_t(38), ';', intmax_t(5), ';', idx, 'm'>;
template <intmax_t idx>
requires limit_256<idx>
-static constexpr auto BACKGROUND_256 = details::escape<intmax_t(48), ';', intmax_t(5), ';', idx, 'm'>;
+static constexpr auto BACKGROUND<idx> = details::escape<intmax_t(48), ';', intmax_t(5), ';', idx, 'm'>;
// RGB colors
template <intmax_t R, intmax_t G, intmax_t B>
requires limit_256<R> && limit_256<G> && limit_256<B>
-static constexpr auto FOREGROUND_RGB =
+static constexpr auto FOREGROUND<R, G, B> =
details::escape<intmax_t(38), ';', intmax_t(5), ';', R, ';', G, ';', B, 'm'>;
template <intmax_t R, intmax_t G, intmax_t B>
requires limit_256<R> && limit_256<G> && limit_256<B>
-static constexpr auto BACKGROUND_RGB =
+static constexpr auto BACKGROUND<R, G, B> =
details::escape<intmax_t(48), ';', intmax_t(5), ';', R, ';', G, ';', B, 'm'>;
// Set/reset text decorators
-template <DECOR decor> static constexpr const char *DECOR_SET = details::escape<(intmax_t)decor, 'm'>;
-template <DECOR decor> static constexpr const char *DECOR_RESET = details::escape<(intmax_t)decor + 20, 'm'>;
+template <DECOR decor> static constexpr auto DECOR_SET = details::escape<(intmax_t)decor, 'm'>;
+template <DECOR decor> static constexpr auto DECOR_RESET = details::escape<(intmax_t)decor + 20, 'm'>;
// Savle/load cursor position;
-static constexpr const char *CURSOR_SAVE = details::escape<'s'>;
-static constexpr const char *CURSOR_LOAD = details::escape<'u'>;
+static constexpr auto CURSOR_SAVE = details::escape<'s'>;
+static constexpr auto CURSOR_LOAD = details::escape<'u'>;
// Show/hide cursor
-static constexpr const char *CURSOR_SHOW = details::escape<details::string_literal("?25h")>;
-static constexpr const char *CURSOR_HIDE = details::escape<details::string_literal("?25l")>;
+static constexpr auto CURSOR_SHOW = details::escape_literal<"?25h">;
+static constexpr auto CURSOR_HIDE = details::escape_literal<"?25l">;
// Show/hide alternate buffer
-static constexpr const char *ABUF_SHOW = details::escape<details::string_literal("?1049h")>;
-static constexpr const char *ABUF_HIDE = details::escape<details::string_literal("?1049l")>;
+static constexpr auto ABUF_SHOW = details::escape_literal<"?1049h">;
+static constexpr auto ABUF_HIDE = details::escape_literal<"?1049l">;
} // namespace ALEC