sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | 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;