st

Suckless' st with my personal patches
git clone https://git.instinctive.eu/st.git
Log | Files | Refs | README | LICENSE

commit 3621dc8c07e6b2b2ea0ce5a5dc5edabf9c783ba3
parent a1c24d0c82e4af05bcb290cbe86216452ebf1faa
Author: Natasha Kerensikova <natacha@instinctive.eu>
Date:   Sun, 19 Feb 2023 10:42:23 +0100

[nat] ISO 14755

Diffstat:
Mconfig.def.h | 6++++++
Mst.1 | 4++++
Mst.c | 22++++++++++++++++++++++
Mst.h | 2++
4 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -171,6 +171,11 @@ static unsigned int defaultattr = 11; static uint forcemousemod = ShiftMask; /* + * Command used to query unicode glyphs. + */ +char *iso14755_cmd = "dmenu -w \"$WINDOWID\" -p codepoint: </dev/null"; + +/* * Internal mouse shortcuts. * Beware that overloading Button1 will disable the selection. */ @@ -201,6 +206,7 @@ static Shortcut shortcuts[] = { { TERMMOD, XK_Y, selpaste, {.i = 0} }, { ShiftMask, XK_Insert, selpaste, {.i = 0} }, { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + { TERMMOD, XK_I, iso14755, {.i = 0} }, }; /* diff --git a/st.1 b/st.1 @@ -159,6 +159,10 @@ Copy the selected text to the clipboard selection. .TP .B Ctrl-Shift-v Paste from the clipboard selection. +.TP +.B Ctrl-Shift-i +Launch dmenu to enter a unicode codepoint and send the corresponding glyph +to st. .SH CUSTOMIZATION .B st can be customized by creating a custom config.h and (re)compiling the source diff --git a/st.c b/st.c @@ -2048,6 +2048,28 @@ tprinter(char *s, size_t len) } void +iso14755(const Arg *arg) +{ + FILE *p; + char *us, *e, codepoint[9], uc[UTF_SIZ]; + unsigned long utf32; + + if (!(p = popen(iso14755_cmd, "r"))) + return; + + us = fgets(codepoint, sizeof(codepoint), p); + pclose(p); + + if (!us || *us == '\0' || *us == '-' || strlen(us) > 7) + return; + if ((utf32 = strtoul(us, &e, 16)) == ULONG_MAX || + (*e != '\n' && *e != '\0')) + return; + + ttywrite(uc, utf8encode(utf32, uc), 1); +} + +void toggleprinter(const Arg *arg) { term.mode ^= MODE_PRINT; diff --git a/st.h b/st.h @@ -81,6 +81,7 @@ void die(const char *, ...); void redraw(void); void draw(void); +void iso14755(const Arg *); void printscreen(const Arg *); void printsel(const Arg *); void sendbreak(const Arg *); @@ -124,3 +125,4 @@ extern unsigned int tabspaces; extern unsigned int defaultfg; extern unsigned int defaultbg; extern unsigned int defaultcs; +extern char *iso14755_cmd;