Emoji Input

I wanted a utility I could invoke from my Wayland compositor to lookup and copy emoji into the clipboard. I'm sure other people have written similar things, but I couldn't find anything in ten minutes of searching that matched what I had in mind, so I wrote my own. It's quite simple. It just uses fuzzel to provide a searchable menu from a TSV of names and emoji characters and then copies whichever one I choose into my clipboard.

To get my TSV, I ran this code in the browser console on https://unicode.org/emoji/charts/full-emoji-list.html:

var list=""; var elems = document.getElementsByTagName("tr"); for (var i=3; i<elems.length; i++) { if (!elems[i].getElementsByClassName("name").length) continue; list += elems[i].getElementsByClassName("name")[0].innerText + ";;;;" + elems[i].getElementsByClassName("chars")[0].innerText + "n"; }

I expanded the output and copied it into a file I named emoji.tsv. I ran sed to replace the ';;;;'s with tabs. (Tabs don't appear to get copied from the Firefox console on my box and vim appears to mangle some of the Unicode characters with its built-in search and replace, which is why I've done it this way.)

sed -i 's/;;;;/t/g' emoji.tsv

emoji.tsv is the result of all that.

I wrote a script to search and copy from the file:

#!/usr/bin/env sh

# Dependencies:
# wl-clipboard
# fuzzel
# A list of tab-separated emoji names and characters

EMOJI_LIST="${EMOJI_LIST:-$HOME/intramuros/documents/emoji.tsv}"
FUZZEL_CMD="${FUZZEL_CMD:-$HOME/scripts/sway-menu}"

cat "$EMOJI_LIST" | $FUZZEL_CMD --dmenu | cut -f2 | wl-copy -n

sway-menu is just a wrapper script I wrote for fuzzel to allow keeping a uniform look across the scripts that use it:

#!/usr/bin/env sh

fuzzel -r0 -b111111e6 -tccccccff -mdd5001ff -s000000e6 -I -y20 -f'Jost*:style=Regular:size=8' $@

Finally I added this to my sway/config, which invokes the script when I hit Meta+m.

# emoji menu
bindsym $mod+m exec emoji-lookup

Relevant links:

Page Created:: 2021-09-16

Last Updated:: 2024-12-11

Last Reviewed:: 2024-12-11