- Récupérer la liste des emojis
- Créer un format propice au choix
- Créer une interface pour en choisir un
- L’utiliser dans vim
- Et si on en veut plusieurs ?
Les emojis c’est mignon et on voudrait en mettre partout. Créons donc un “emoji picker” aussi simple que possible et qui nous permettra d’en insérer un peu partout où on veut 😄 (<- comme celui-ci !).
Récupérer la liste des emojis
Le consortium unicode fourni une liste des emojis dans un document disponible sur le web :
curl -Ls https://unicode.org/Public/emoji/latest/emoji-test.txt > emoji-test.txt
Il contient un emoji par ligne ainsi que tout plein d’informations à son propos :
1F498 ; fully-qualified # 💘 E0.6 heart with arrow
1F49D ; fully-qualified # 💝 E0.6 heart with ribbon
1F496 ; fully-qualified # 💖 E0.6 sparkling heart
1F497 ; fully-qualified # 💗 E0.6 growing heart
1F493 ; fully-qualified # 💓 E0.6 beating heart
1F49E ; fully-qualified # 💞 E0.6 revolving hearts
1F495 ; fully-qualified # 💕 E0.6 two hearts
1F49F ; fully-qualified # 💟 E0.6 heart decoration
2763 FE0F ; fully-qualified # ❣️ E1.0 heart exclamation
2763 ; unqualified # ❣ E1.0 heart exclamation
1F494 ; fully-qualified # 💔 E0.6 broken heart
2764 FE0F 200D 1F525 ; fully-qualified # ❤️🔥 E13.1 heart on fire
2764 200D 1F525 ; unqualified # ❤🔥 E13.1 heart on fire
Créer un format propice au choix
Qui dit des données tabulaires dit notre arsenal habituel d’outils. On veut un emoji et sa description par ligne ce qui devrait faire une interface décente de choix :
💘 heart with arrow
💝 heart with ribbon
💖 sparkling heart
💗 growing heart
Pour cela on peut utiliser le script suivant :
t=$(mktemp -d);trap "rm -rf $t" EXIT
< emoji-test.txt grep -Ev '^(#.*)?$' | tr -s ' ' | cut -d';' -f2 > $t/c
< $t/c cut -d' ' -f4 > $t/l
< $t/c cut -d' ' -f6- > $t/r
paste $t/l $t/r
Première ligne on créé un répertoire temporaire de travail. Seconde on retire les lignes vides et les commentaires, on écrase les suites d’espaces en un seul espace puis on retire tout ce qu’il y a à gauche du point virgule. Troisième et quatrième on récupère les emojis et leurs descriptions. Ce script pourrait être plus simple sous la forme d’un programme awk mais peu importe.
Créer une interface pour en choisir un
Quand il s’agit de choisir parmi une liste arbitraire d’éléments sur la base du
contenu des lignes il est propice d’utiliser fzy. J’en parle dans l’article
sur les extensions de catium et celui sur
la musique. Pour notre besoin cela pourrait ressembler à
ça, avec dbemoji
le fichier que l’on a créé avec le précédent script :
< dbemoji fzy -l 100 | cut -f1 | xclip -selection clipboard -f -rmlastnl
On met les emoji dans fzy, on filtre interactivement dessus en tapant du texte
susceptible d’apparaître dans la description, on ne récupère que l’emoji de
la ligne sélectionnée et on met ça dans le presse papier. L’option -f
d’xclip
permet de tout de même récupérer l’emoji en sortie de façon à pouvoir continuer
le pipe si jamais. On peut donc soit ctrl+v
l’emoji quelque part soit, si
l’outil où l’on veut l’insérer le permet, le récupérer directement depuis
la stdout.
L’utiliser dans vim
Evidemment j’ai envie d’insérer facilement des emoji dans vim. Pour cela j’utilise cette macro :
inoremap <buffer> (-e <ESC>:r!pickemoji<CR>kgJe
avec pickemoji
étant la ligne de shell écrite juste au dessus. Je peux
donc taper taper taper du texte, entrer rapidement (-e
, déclencher
l’interface fzy, choisir mon emoji et continuer à taper1 ! 🙂
Et si on en veut plusieurs ?
Il existe un fork de fzy permettant de
choisir plusieurs lignes dans l’interface. Il faut utiliser l’option -m
puis
faire une tabulation sur chaque choix que l’on veut. Cela permet d’insérer
plusieurs emoji d’un coup !
Tous les emojis avec computer dans leurs descriptions : 🖥️💽🖱
-
du moins c’est mon espoir mais la macro ne me remet pas en mode insertion à la fin. Je ne sais pas bien pourquoi, je vais investiguer 🕵🔎 ↩