st-iso14755-0.8.2.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.2.diff (2326B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index 0e01717..c6d7f58 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -178,6 +178,7 @@ static Shortcut shortcuts[] = {
            6          { TERMMOD,              XK_Y,           selpaste,       {.i =  0} },
            7          { ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
            8          { TERMMOD,              XK_Num_Lock,    numlock,        {.i =  0} },
            9 +        { TERMMOD,              XK_I,           iso14755,       {.i =  0} },
           10  };
           11  
           12  /*
           13 diff --git a/st.1 b/st.1
           14 index e8d6059..81bceff 100644
           15 --- a/st.1
           16 +++ b/st.1
           17 @@ -159,6 +159,10 @@ Copy the selected text to the clipboard selection.
           18  .TP
           19  .B Ctrl-Shift-v
           20  Paste from the clipboard selection.
           21 +.TP
           22 +.B Ctrl-Shift-i
           23 +Launch dmenu to enter a unicode codepoint and send the corresponding glyph
           24 +to st.
           25  .SH CUSTOMIZATION
           26  .B st
           27  can be customized by creating a custom config.h and (re)compiling the source
           28 diff --git a/st.c b/st.c
           29 index b8e6077..c089df3 100644
           30 --- a/st.c
           31 +++ b/st.c
           32 @@ -38,11 +38,15 @@
           33  
           34  /* macros */
           35  #define IS_SET(flag)                ((term.mode & (flag)) != 0)
           36 +#define NUMMAXLEN(x)                ((int)(sizeof(x) * 2.56 + 0.5) + 1)
           37  #define ISCONTROLC0(c)                (BETWEEN(c, 0, 0x1f) || (c) == '\177')
           38  #define ISCONTROLC1(c)                (BETWEEN(c, 0x80, 0x9f))
           39  #define ISCONTROL(c)                (ISCONTROLC0(c) || ISCONTROLC1(c))
           40  #define ISDELIM(u)                (utf8strchr(worddelimiters, u) != NULL)
           41  
           42 +/* constants */
           43 +#define ISO14755CMD                "dmenu -w \"$WINDOWID\" -p codepoint: </dev/null"
           44 +
           45  enum term_mode {
           46          MODE_WRAP        = 1 << 0,
           47          MODE_INSERT      = 1 << 1,
           48 @@ -1980,6 +1984,28 @@ tprinter(char *s, size_t len)
           49          }
           50  }
           51  
           52 +void
           53 +iso14755(const Arg *arg)
           54 +{
           55 +        FILE *p;
           56 +        char *us, *e, codepoint[9], uc[UTF_SIZ];
           57 +        unsigned long utf32;
           58 +
           59 +        if (!(p = popen(ISO14755CMD, "r")))
           60 +                return;
           61 +
           62 +        us = fgets(codepoint, sizeof(codepoint), p);
           63 +        pclose(p);
           64 +
           65 +        if (!us || *us == '\0' || *us == '-' || strlen(us) > 7)
           66 +                return;
           67 +        if ((utf32 = strtoul(us, &e, 16)) == ULONG_MAX ||
           68 +            (*e != '\n' && *e != '\0'))
           69 +                return;
           70 +
           71 +        ttywrite(uc, utf8encode(utf32, uc), 1);
           72 +}
           73 +
           74  void
           75  toggleprinter(const Arg *arg)
           76  {
           77 diff --git a/st.h b/st.h
           78 index 38c61c4..dac64d8 100644
           79 --- a/st.h
           80 +++ b/st.h
           81 @@ -80,6 +80,7 @@ void die(const char *, ...);
           82  void redraw(void);
           83  void draw(void);
           84  
           85 +void iso14755(const Arg *);
           86  void printscreen(const Arg *);
           87  void printsel(const Arg *);
           88  void sendbreak(const Arg *);