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;
|