st-iso14755-0.8.3.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
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;