diff --git a/config.def.h b/config.def.h index 0e01717..c6d7f58 100644 --- a/config.def.h +++ b/config.def.h @@ -178,6 +178,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 index e8d6059..81bceff 100644 --- 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 index b8e6077..c089df3 100644 --- a/st.c +++ b/st.c @@ -38,11 +38,15 @@ /* macros */ #define IS_SET(flag) ((term.mode & (flag)) != 0) +#define NUMMAXLEN(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1) #define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177') #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) #define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c)) #define ISDELIM(u) (utf8strchr(worddelimiters, u) != NULL) +/* constants */ +#define ISO14755CMD "dmenu -w \"$WINDOWID\" -p codepoint: 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) { diff --git a/st.h b/st.h index 38c61c4..dac64d8 100644 --- a/st.h +++ b/st.h @@ -80,6 +80,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 *);