From d7ce4b9bc61ee52144e62ec3d4665f80095db44c Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Wed, 17 Mar 2021 16:00:06 -0400 Subject: [PATCH] Add C-z keys for directly inserting most color codes So you don't have to remember those dang numbers whose order makes no sense! --- catgirl.1 | 16 ++++++++++++++-- ui.c | 35 ++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/catgirl.1 b/catgirl.1 index 5aaee2b..c5ac74e 100644 --- a/catgirl.1 +++ b/catgirl.1 @@ -1,4 +1,4 @@ -.Dd March 8, 2021 +.Dd March 17, 2021 .Dt CATGIRL 1 .Os . @@ -685,7 +685,19 @@ Toggle underline. .El . .Pp -To set colors, follow +Some color codes can be inserted +with the following: +.Bl -column "C-z A" "magenta" "C-z N" "orange (dark yellow)" +.It Ic C-z A Ta gray Ta Ic C-z N Ta brown (dark red) +.It Ic C-z B Ta blue Ta Ic C-z O Ta orange (dark yellow) +.It Ic C-z C Ta cyan Ta Ic C-z P Ta pink (light magenta) +.It Ic C-z G Ta green Ta Ic C-z R Ta red +.It Ic C-z K Ta black Ta Ic C-z W Ta white +.It Ic C-z M Ta magenta Ta Ic C-z Y Ta yellow +.El +. +.Pp +To set other colors, follow .Ic C-z c by one or two digits for the foreground color, optionally followed by a comma diff --git a/ui.c b/ui.c index ebae222..add6eb3 100644 --- a/ui.c +++ b/ui.c @@ -1012,13 +1012,34 @@ static void keyCtrl(wchar_t ch) { static void keyStyle(wchar_t ch) { uint id = windows.ptrs[windows.show]->id; - switch (iswcntrl(ch) ? ch ^ L'@' : (wchar_t)towupper(ch)) { - break; case L'B': edit(id, EditInsert, B); - break; case L'C': edit(id, EditInsert, C); - break; case L'I': edit(id, EditInsert, I); - break; case L'O': edit(id, EditInsert, O); - break; case L'R': edit(id, EditInsert, R); - break; case L'U': edit(id, EditInsert, U); + if (iswcntrl(ch)) ch = towlower(ch ^ L'@'); + enum Color color = Default; + switch (ch) { + break; case L'A': color = Gray; + break; case L'B': color = Blue; + break; case L'C': color = Cyan; + break; case L'G': color = Green; + break; case L'K': color = Black; + break; case L'M': color = Magenta; + break; case L'N': color = Brown; + break; case L'O': color = Orange; + break; case L'P': color = Pink; + break; case L'R': color = Red; + break; case L'W': color = White; + break; case L'Y': color = Yellow; + break; case L'b': edit(id, EditInsert, B); + break; case L'c': edit(id, EditInsert, C); + break; case L'i': edit(id, EditInsert, I); + break; case L'o': edit(id, EditInsert, O); + break; case L'r': edit(id, EditInsert, R); + break; case L'u': edit(id, EditInsert, U); + } + if (color != Default) { + char buf[4]; + snprintf(buf, sizeof(buf), "%c%02d", C, color); + for (char *ch = buf; *ch; ++ch) { + edit(id, EditInsert, *ch); + } } }