st-iso14755-0.8.3.diff (2276B)
1 diff --git a/config.def.h b/config.def.h 2 index 0895a1f..578a90e 100644 3 --- a/config.def.h 4 +++ b/config.def.h 5 @@ -159,6 +159,11 @@ static unsigned int defaultattr = 11; 6 */ 7 static uint forcemousemod = ShiftMask; 8 9 +/* 10 + * Command used to query unicode glyphs. 11 + */ 12 +char *iso14755_cmd = "dmenu -w \"$WINDOWID\" -p codepoint: </dev/null"; 13 + 14 /* 15 * Internal mouse shortcuts. 16 * Beware that overloading Button1 will disable the selection. 17 @@ -188,6 +193,7 @@ static Shortcut shortcuts[] = { 18 { TERMMOD, XK_Y, selpaste, {.i = 0} }, 19 { ShiftMask, XK_Insert, selpaste, {.i = 0} }, 20 { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, 21 + { TERMMOD, XK_I, iso14755, {.i = 0} }, 22 }; 23 24 /* 25 diff --git a/st.1 b/st.1 26 index 39120b4..4a98626 100644 27 --- a/st.1 28 +++ b/st.1 29 @@ -159,6 +159,10 @@ Copy the selected text to the clipboard selection. 30 .TP 31 .B Ctrl-Shift-v 32 Paste from the clipboard selection. 33 +.TP 34 +.B Ctrl-Shift-i 35 +Launch dmenu to enter a unicode codepoint and send the corresponding glyph 36 +to st. 37 .SH CUSTOMIZATION 38 .B st 39 can be customized by creating a custom config.h and (re)compiling the source 40 diff --git a/st.c b/st.c 41 index 0ce6ac2..532dc8c 100644 42 --- a/st.c 43 +++ b/st.c 44 @@ -1985,6 +1985,28 @@ tprinter(char *s, size_t len) 45 } 46 } 47 48 +void 49 +iso14755(const Arg *arg) 50 +{ 51 + FILE *p; 52 + char *us, *e, codepoint[9], uc[UTF_SIZ]; 53 + unsigned long utf32; 54 + 55 + if (!(p = popen(iso14755_cmd, "r"))) 56 + return; 57 + 58 + us = fgets(codepoint, sizeof(codepoint), p); 59 + pclose(p); 60 + 61 + if (!us || *us == '\0' || *us == '-' || strlen(us) > 7) 62 + return; 63 + if ((utf32 = strtoul(us, &e, 16)) == ULONG_MAX || 64 + (*e != '\n' && *e != '\0')) 65 + return; 66 + 67 + ttywrite(uc, utf8encode(utf32, uc), 1); 68 +} 69 + 70 void 71 toggleprinter(const Arg *arg) 72 { 73 diff --git a/st.h b/st.h 74 index d978458..7b00dd6 100644 75 --- a/st.h 76 +++ b/st.h 77 @@ -81,6 +81,7 @@ void die(const char *, ...); 78 void redraw(void); 79 void draw(void); 80 81 +void iso14755(const Arg *); 82 void printscreen(const Arg *); 83 void printsel(const Arg *); 84 void sendbreak(const Arg *); 85 @@ -122,3 +123,4 @@ extern char *termname; 86 extern unsigned int tabspaces; 87 extern unsigned int defaultfg; 88 extern unsigned int defaultbg; 89 +extern char *iso14755_cmd;