diff --git a/Makefile b/Makefile index e07afeb..6e0054f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,8 @@ TERMCAP_FILE=http://code.metager.de/source/raw/OpenBSD/src/share/termtypes/termtypes.master +all: src/termcap.erl + rebar3 compile + src/termcap.erl: termtypes.master.clean mk-termcap.escript termcap.erl ./mk-termcap.escript termtypes.master.clean > src/cf_term.erl @@ -10,7 +13,10 @@ termcap.erl: clean: [ -f termtypes.master ] && rm termtypes.master || true [ -f termtypes.master.clean ] && rm termtypes.master.clean || true - + +compile: + rebar3 compile + termtypes.master.clean: termtypes.master cat termtypes.master | grep -v '^#' | grep -v '^\s*$$' > termtypes.master.clean diff --git a/rebar.config b/rebar.config index 2656fd5..1873664 100644 --- a/rebar.config +++ b/rebar.config @@ -1,2 +1,8 @@ {erl_opts, [debug_info]}. {deps, []}. + +{profiles, [ + {shell, [ + {deps, [sync]} + ]} + ]}. diff --git a/src/cf.app.src b/src/cf.app.src index e85142d..c6b6826 100644 --- a/src/cf.app.src +++ b/src/cf.app.src @@ -1,6 +1,6 @@ {application,cf, [{description,"Terminal colour helper"}, - {vsn,"0.2.2"}, + {vsn, git}, {registered,[]}, {applications,[kernel,stdlib]}, {env,[]}, diff --git a/src/cf.erl b/src/cf.erl index ab05dd8..bc1f0e7 100644 --- a/src/cf.erl +++ b/src/cf.erl @@ -38,6 +38,11 @@ %% c,C - cyan %% w,W - white %% +%% true color is supported by using +%% ~!# as each as hex values so ~!#ff6402 +%% +%% the same can be done for the background by yusign ~## +%% %% The function will disable colours on non x term termials %% @end print(Fmt, Args) -> @@ -113,12 +118,37 @@ cfmt(S) -> cfmt(S, Enabled) -> lists:flatten(cfmt_(S, Enabled)). -cfmt_([$~,$!, $_, _C | S], false) -> +cfmt_([$~, $!, $#, _R1, _R2, _G1, _G2, _B1, _B2 | S], false) -> cfmt_(S, false); -cfmt_([$~,$#, _C | S], false) -> +cfmt_([$~, $#, $#, _R1, _R2, _G1, _G2, _B1, _B2 | S], false) -> cfmt_(S, false); -cfmt_([$~,$!, _C | S], false) -> + +cfmt_([$~, $!, $_, _C | S], false) -> cfmt_(S, false); +cfmt_([$~, $#, _C | S], false) -> + cfmt_(S, false); +cfmt_([$~, $!, _C | S], false) -> + cfmt_(S, false); + +cfmt_([$~, $!, $#, R1, R2, G1, G2, B1, B2 | S], Enabled) -> + R = list_to_integer([R1, R2], 16), + G = list_to_integer([G1, G2], 16), + B = list_to_integer([B1, B2], 16), + ["\033[38;2;", + integer_to_list(R), $;, + integer_to_list(G), $;, + integer_to_list(B), $m | + cfmt_(S, Enabled)]; + +cfmt_([$~, $#, $#, R1, R2, G1, G2, B1, B2 | S], Enabled) -> + R = list_to_integer([R1, R2], 16), + G = list_to_integer([G1, G2], 16), + B = list_to_integer([B1, B2], 16), + ["\033[48;2;", + integer_to_list(R), $;, + integer_to_list(G), $;, + integer_to_list(B), $m | + cfmt_(S, Enabled)]; cfmt_([$~, $!, $_, $_ | S], Enabled) -> [?U |cfmt_(S, Enabled)]; @@ -126,6 +156,7 @@ cfmt_([$~,$!, $^ | S], Enabled) -> [?B | cfmt_(S, Enabled)]; cfmt_([$~,$!, $_, $^ | S], Enabled) -> [?U, ?B | cfmt_(S, Enabled)]; + ?CFMT($!, ?R); ?CFMT($x, ?NX); ?CFMT($X, ?BX);