Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
index.sh (4927B)
1 #! page 2 title: Un emoji \"picker\" en shell 3 author: Arthur Pons 4 description: Construisons un outil pour sélectionner un emoji et les mettre dans le presse-papier 5 publication: 2024-05-02 6 7 sectionmd: main 8 9 Les emojis c'est mignon et on voudrait en mettre partout. Créons 10 donc un "emoji picker" aussi simple que possible et qui nous permettra 11 d'en insérer un peu partout où on veut 😄 (<- comme celui-ci !). 12 13 ## Récupérer la liste des emojis 14 15 Le consortium unicode fourni une liste des emojis dans un document 16 disponible sur le web : 17 18 curl -Ls https://unicode.org/Public/emoji/latest/emoji-test.txt > emoji-test.txt 19 20 Il contient un emoji par ligne ainsi que tout plein d'informations à son propos : 21 22 1F498 ; fully-qualified # 💘 E0.6 heart with arrow 23 1F49D ; fully-qualified # 💝 E0.6 heart with ribbon 24 1F496 ; fully-qualified # 💖 E0.6 sparkling heart 25 1F497 ; fully-qualified # 💗 E0.6 growing heart 26 1F493 ; fully-qualified # 💓 E0.6 beating heart 27 1F49E ; fully-qualified # 💞 E0.6 revolving hearts 28 1F495 ; fully-qualified # 💕 E0.6 two hearts 29 1F49F ; fully-qualified # 💟 E0.6 heart decoration 30 2763 FE0F ; fully-qualified # ❣️ E1.0 heart exclamation 31 2763 ; unqualified # ❣ E1.0 heart exclamation 32 1F494 ; fully-qualified # 💔 E0.6 broken heart 33 2764 FE0F 200D 1F525 ; fully-qualified # ❤️🔥 E13.1 heart on fire 34 2764 200D 1F525 ; unqualified # ❤🔥 E13.1 heart on fire 35 36 ## Créer un format propice au choix 37 38 Qui dit des données tabulaires dit notre arsenal habituel d'outils. On veut un emoji 39 et sa description par ligne ce qui devrait faire une interface décente de choix : 40 41 💘 heart with arrow 42 💝 heart with ribbon 43 💖 sparkling heart 44 💗 growing heart 45 46 Pour cela on peut utiliser le script suivant : 47 48 t=$(mktemp -d);trap "rm -rf $t" EXIT 49 < emoji-test.txt grep -Ev '^(#.*)?$' | tr -s ' ' | cut -d';' -f2 > $t/c 50 < $t/c cut -d' ' -f4 > $t/l 51 < $t/c cut -d' ' -f6- > $t/r 52 paste $t/l $t/r 53 54 Première ligne on créé un répertoire temporaire de travail. Seconde on retire 55 les lignes vides et les commentaires, on écrase les suites d'espaces en un seul 56 espace puis on retire tout ce qu'il y a à gauche du point virgule. Troisième et 57 quatrième on récupère les emojis et leurs descriptions. Ce script pourrait 58 être plus simple sous la forme d'un programme awk mais peu importe. 59 60 ## Créer une interface pour en choisir un 61 62 Quand il s'agit de choisir parmi une liste arbitraire d'éléments sur la base du 63 contenu des lignes il est propice d'utiliser fzy. J'en parle dans l'[article 64 sur les extensions de catium](/extension-catium/index.html) et [celui sur 65 la musique](/musique/index.html). Pour notre besoin cela pourrait ressembler à 66 ça, avec `dbemoji` le fichier que l'on a créé avec le précédent script : 67 68 < dbemoji fzy -l 100 | cut -f1 | xclip -selection clipboard -f -rmlastnl 69 70 On met les emoji dans fzy, on filtre interactivement dessus en tapant du texte 71 susceptible d'apparaître dans la description, on ne récupère que l'emoji de 72 la ligne sélectionnée et on met ça dans le presse papier. L'option `-f` d'xclip 73 permet de tout de même récupérer l'emoji en sortie de façon à pouvoir continuer 74 le pipe si jamais. On peut donc soit `ctrl+v` l'emoji quelque part soit, si 75 l'outil où l'on veut l'insérer le permet, le récupérer directement depuis 76 la stdout. 77 78 ## L'utiliser dans vim 79 80 Evidemment j'ai envie d'insérer facilement des emoji dans vim. Pour cela 81 j'utilise cette macro : 82 83 inoremap <buffer> (-e <ESC>:r!pickemoji<CR>kgJe 84 85 avec `pickemoji` étant la ligne de shell écrite juste au dessus. Je peux 86 donc taper taper taper du texte, entrer rapidement `(-e`, déclencher 87 l'interface fzy, choisir mon emoji et continuer à taper[^1] ! 🙂 88 89 ## Et si on en veut plusieurs ? 90 91 Il existe un [fork de fzy](https://github.com/leo-arch/fzy) permettant de 92 choisir plusieurs lignes dans l'interface. Il faut utiliser l'option `-m` puis 93 faire une tabulation sur chaque choix que l'on veut. Cela permet d'insérer 94 plusieurs emoji d'un coup ! 95 Tous les emojis avec computer dans leurs descriptions : 🖥️💽🖱 96 97 [^1]: 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 🕵🔎