|
|
- diff --git a/config.def.h b/config.def.h
- index 0895a1f..578a90e 100644
- --- a/config.def.h
- +++ b/config.def.h
- @@ -159,6 +159,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.
- @@ -188,6 +193,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 39120b4..4a98626 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 0ce6ac2..532dc8c 100644
- --- a/st.c
- +++ b/st.c
- @@ -1985,6 +1985,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)
- {
- diff --git a/st.h b/st.h
- index d978458..7b00dd6 100644
- --- 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 *);
- @@ -122,3 +123,4 @@ extern char *termname;
- extern unsigned int tabspaces;
- extern unsigned int defaultfg;
- extern unsigned int defaultbg;
- +extern char *iso14755_cmd;
|